Skip to content

ADR 0005: Desktop Release Rules

Accepted

Accepted

2026-07-15

The desktop app is a live-call copilot. Updates that interrupt an active call could cause a user to lose a deal. The release process must prioritize call safety over deployment speed.

Semantic versioning: v{major}.{minor}.{patch} (stable), v{major}.{minor}.{patch}-beta.{N} (pre-release).

Two channels only: stable and beta. Canary deferred — not enough users for meaningful signal.

Updates download silently in the background. They never apply during an active call session (phases: connecting, active, summary). If a call is in progress when an update is ready:

  • Queue the update
  • Show a subtle non-intrusive indicator
  • Apply on transition back to idle, or on app quit

Manual beta to stable promotion: a deliberate human action after N stable days. Not automated, not time-based.

  • Client sends clientVersion on every WebSocket connection
  • Backend responds: ok | nudge (soft banner) | block (disable overlay)
  • Now: handle nudge only. Enable block on first breaking protocol change.
  • Backend-owned rule — the client obeys, does not decide.

Direct download + auto-update via electron-updater. Artifacts: NSIS (Windows), DMG (macOS).

No app stores. Microsoft Store and Mac App Store sandboxing is incompatible with:

  • System audio loopback (WASAPI requires unsandboxed access)
  • Content protection (setContentProtection / screen capture exclusion)

Store review would force crippling the product. Revisit only for a hypothetical deliberately-limited “lite” build.

  • Windows: EV Code Signing Certificate (eliminates SmartScreen)
  • macOS: Developer ID + Notarization
  • Both integrated into CI pipeline
  • autoInstallOnAppQuit = false — we control quit behavior via CallStateMachine
  • No staged rollout infra needed yet
  • Backend must implement the version handshake endpoint before hard-block is usable