`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.
25 lines
769 B
TOML
25 lines
769 B
TOML
[package]
|
|
name = "xtask"
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
license = "AGPL-3.0-only"
|
|
|
|
[dependencies]
|
|
serde_json = "1"
|
|
blake3 = "1"
|
|
swactor = { path = "..", features = ["serde"] }
|
|
swactor-engine = { path = "../crates/engine" }
|
|
swactor-transport = { path = "../crates/transport" }
|
|
swactor-process = { path = "../crates/process" }
|
|
provisioning = { path = "../crates/provisioning" }
|
|
telemetry = { path = "../crates/telemetry" }
|
|
dashboard = { path = "../crates/dashboard", features = ["demo-control"] }
|
|
iroh-driver = { path = "../crates/iroh-driver" }
|
|
distribution = { path = "../crates/distribution" }
|
|
iroh = "0.98"
|
|
tokio.workspace = true
|
|
serde = { version = "1", features = ["derive"] }
|
|
parking_lot = "0.12"
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
libc = "0.2"
|