swactor/crates/dashboard/Cargo.toml
Zachery Aaron Shores-Chmielewski d19dd91324 feat(xtask): provisioning-reconciler-demo with live fleet control
`cargo xtask provisioning-reconciler-demo [--port n] [--nodes n]` boots a
lightweight orchestrator for visual, human-checked E2E confirmation of the
provisioning reconciler: swactor engine + real ClusterDriver + demo
provider, with node children re-exec'ing the same xtask binary in node
role and joining the supervisor over real iroh connections.

- supervisor actor owns driver/provider/shape on a 250ms wall-clock tick,
  mirroring the production ClusterReconciler poll semantics; emits
  prov.reconciler.events/snapshot plus per-node lifecycle/status streams
- k8s-styled reconciler view: ready/desired header, node stage cards,
  commands-out and events-in feeds
- dashboard `demo-control` feature: POST /control/{kill,provision,remove}
  + Fleet Control view; regular builds compile none of it (symbol-verified)
- fleet cards fold proc.<node>.lifecycle and node.status heartbeats into
  per-node pid/state pills that stay live
- hardening: exe resolution survives binary replacement by rebuilds,
  spawn failures feed back as BootstrapFailed so the reconciler retries
  instead of wedging at SshReady, teardown skips exit waits for
  never-started children

Verified in-browser: boot 3/3 converged with real joins; dashboard kill
dips and fully recovers with a replacement; provision +1 → 4/4; remove −2
graceful teardown → 2/2; child process count matches reconciler nodes.
2026-08-15 18:11:33 +04:00

20 lines
500 B
TOML

[package]
name = "dashboard"
version = "0.1.0"
edition = "2024"
license = "AGPL-3.0-only"
[dependencies]
axum = "0.8"
telemetry = { path = "../telemetry" }
swactor = { path = "../..", features = ["serde"] }
parking_lot = "0.12"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio.workspace = true
tokio-stream = "0.1"
[features]
# Live control actions (kill processes, provision nodes) for the
# provisioning-reconciler demo. Never enabled in shipping builds.
demo-control = []