Chrome-style silent updater: no prompt, no progress UI, no buttons.
On startup we check for updates (8s timeout), and if one is found
we download + verify + apply + relaunch — total ~3-5s on a fast
connection. The user sees the new version's window instead of the
old one, period.
Errors that do warrant a dialog (apply failed mid-write, sha256
mismatch, can't relaunch) still surface as a message box so the
user knows their copy is on the previous version. 'No update' and
network timeouts stay silent.
Split timeouts so a 60s download doesn't get killed by the 8s
check budget.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Double-clicking drover.exe now silently checks for updates first
(8s timeout, ignores network failures). If a newer release is
published, a YES/NO message box asks the user; on YES we download,
verify SHA256, apply via selfupdate, and re-launch the binary so
the user immediately sees the new version's window.
NO or no update → straight to the smoke-test window as before.
Update errors show an error dialog, then continue.
Implementation:
- internal/updater is reused as-is — the existing CheckForUpdate +
ApplyUpdate API is enough.
- autoupdate_windows.go owns the dialog and re-launch logic
(golang.org/x/sys/windows for MessageBoxW, os/exec for fresh
process). autoupdate_other.go is the no-op stub for Linux CI.
- relaunchSelf uses cmd.Start (fire and forget) — no Wait. Current
process os.Exit(0) immediately so the OS doesn't keep both
generations of drover running.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>