What changed: scripts/deploy.sh installs versioned releases —
releases/<rel>/bin behind a current symlink, with data/ deliberately
outside releases so a rollback can never roll back evidence. A systemd unit,
a launchd plist, and deploy/RUNBOOK.md covering install, upgrade, rollback,
backup, and heartbeat-watching. Rollback is a repoint + restart; a database
whose schema is too new for the binary fails the migration check honestly
instead of opening it anyway.
Proof — the drill that matters: exercised end to end mid-incident — v1
running, incident open, upgrade to v2, still down, rollback to v1, still
down. The incident never flinched; boot rebuild resumed from committed rows
under both binaries.