Add upgrade all chat command with drain check and convergence verify

- `upgrade all` sweeps every registered sled in sequence, streaming
  per-sled phase markers and reporting a summary.
- Binary source is now the gateway's own artifact store via
  host.docker.internal (was: unresolvable `gateway` hostname serving
  the gateway's macOS binary to Linux sleds — would have bricked them).
- Sleds with active claude processes are skipped, never killed.
- After reconnect, /api/version git_hash is compared against the
  published artifact's .hash sidecar; divergence is reported loudly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019fHdm92yjvguPi2LiXfLB9
This commit is contained in:
Timmy
2026-07-15 16:22:11 +01:00
co-authored by Claude Fable 5
parent 07b9e1605d
commit 18ba57a7b0
4 changed files with 250 additions and 70 deletions
+7
View File
@@ -298,6 +298,13 @@ pub async fn serve_binary_handler() -> poem::Response {
}
}
/// Canonical artifact filename for sled binaries on this deployment's platform.
///
/// Sleds run linux/arm64 under OrbStack on Apple Silicon. When amd64 hosts
/// arrive, `release` publishes one artifact per platform and this becomes a
/// lookup instead of a constant.
pub const SLED_ARTIFACT_NAME: &str = "huskies-linux-arm64";
/// Directory where the gateway stores distributable sled binaries.
///
/// Host-global (`~/.huskies/artifacts/`), not per-project: one artifact serves