Skip to content
LabTether

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:

  1. Tailscale login -- confirm the app resolves the MagicDNS hostname, not a raw 100.x address.
  2. Terminal/desktop soak -- open terminal and desktop sessions on a real device; idle 10+ minutes, active input 5+ minutes each. Watch for unexpected disconnects.
  3. VNC black-screen check -- connect with Connection Debug Banner enabled; capture the full banner sequence if the screen goes black.
  4. macOS Screen Sharing prompt -- confirm the credential prompt appears inline on iOS and accepts valid credentials.
  5. 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-backup and 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, and PRIVACY.md (when distributing native binaries) are all present and accurate.