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.
11 lines
938 B
Markdown
11 lines
938 B
Markdown
# 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/dashboard` for 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.
|