Pre-Release Checklist
Code quality
Run all quality gates before tagging a release:
make fmt
make lint
make test
cd web/console && npx tsc --noEmit
All four must pass cleanly.
Smoke test
With the deployment stack running:
make smoke-test
For desktop workflow validation against a specific asset:
LABTETHER_DESKTOP_SMOKE_TARGET=<asset-id> make desktop-smoke-test
Add LABTETHER_DESKTOP_SMOKE_EXPECT_AGENT_VNC=1 when the target should return agent-backed VNC credentials, and LABTETHER_DESKTOP_SMOKE_PROBE_AUDIO=1 to probe the audio sideband.
If an agent-backed or WebRTC target is in inventory but missing from /agents/connected, treat the preflight failure as a real readiness blocker -- reconnect or restart that agent before sign-off.
iOS validation
When shipping changes that affect terminal/desktop websocket stability, VNC behavior, Tailscale login, or Previous Sessions UX, run physical device validation.
Prerequisites:
- Physical iPhone or iPad running the build under test
- Hub access from the device over LAN and/or Tailscale
- Backend log access:
tmux capture-pane -p -t labtether-backend -S -300 -J | tail -n 200 - Owner-token API access:
curl -ksS -H "Authorization: Bearer ${LABTETHER_API_TOKEN:-${LABTETHER_OWNER_TOKEN}}" https://localhost:8443/agents/presence
Validation order:
- Tailscale login -- confirm the app resolves the MagicDNS hostname, not a raw
100.xaddress. - Terminal/desktop soak -- open terminal and desktop sessions on a real device; idle 10+ minutes, active input 5+ minutes each. Watch for unexpected disconnects.
- VNC black-screen check -- connect with Connection Debug Banner enabled; capture the full banner sequence if the screen goes black.
- macOS Screen Sharing prompt -- confirm the credential prompt appears inline on iOS and accepts valid credentials.
- Previous Sessions UX -- rename, edit, local-remove, and Delete Everywhere all persist correctly after refresh.
If a check fails, record the device-local time immediately, capture the visible iOS state before dismissing, and pull backend logs for the same minute.
Final checks
- All critical workflows pass: login, node onboarding, connector health, terminal session, desktop session.
- Alert and incident surfaces load correctly.
- Backup/restore readiness confirmed (
make db-backupand documented restore path). - Docs updated for all user-visible changes.
- Known issues documented with workarounds.
- For public releases:
README.md,LICENSE,CHANGELOG.md,KNOWN_ISSUES.md, support/security reporting paths, andPRIVACY.md(when distributing native binaries) are all present and accurate.