Replace fleet/actor-overview/actor-dossier/workers views and the root link list with one ControlPlaneView serving / and /view/fleet: node cards fuse machine stats with actor rollup, node click opens machine detail + roster, actor click opens an in-page dossier (identity, message diet, sparkline, sampled message history via /api/view/fleet/detail). - Message history folds view-side from messages_processed deltas: 16-receipt ring, 250ms spacing, sampled-out counters — noisy actors cannot flood the page and producers stay untouched. - Stale streams render in a separate collapsed pool; superseded life generations are evicted immediately; stale pool hard-capped at 50. - Unified navbar injected server-side from the view registry; pages opt in with a <!--swactor:nav--> placeholder so app-registered views appear automatically. Hardcoded per-page navs stripped. - Rust type names are the actor display name; address is the unique key. Stale doc comment claiming types are not on the frame fixed.
938 B
938 B
Dashboard crate contract
Keep this crate read-only with respect to observed programs.
- It may ingest telemetry frames.
- It may retain bounded raw-frame and view state for HTML/API rendering.
- It may host universal swactor runtime views.
- It must not send control signals to observed runtimes.
- It must not require changes outside
crates/dashboardfor dashboard-only work.
Main built-in view: the fused control plane at / and /view/fleet (node cards with machine + actor rollup, per-node roster, per-actor dossier via /api/view/fleet/detail), backed by host.*, proc.<label>.lifecycle, runtime.stats, and runtime.actors frames when present. It is a pure frame consumer, tolerant of publisher shape. Message history is folded view-side from messages_processed deltas — no producer changes. The unified navbar is injected server-side from the view registry; pages opt in with a <!--swactor:nav--> placeholder.