swactor/crates/dashboard
Zachery Aaron Shores-Chmielewski 4a348ab4cd refactor(core): drop native threading for tick-driven execution
Core no longer owns or drives OS threads. The runtime is now a single
tick-driven worker whose loop an external engine hosts and advances.
This is the cutover required before the engine seam is introduced.

Removed from core:
- Runtime::run() and its owned thread pool (spawn, park/unpark, join)
- notify_worker() and worker_threads: Vec<OnceLock<Thread>> plumbing
- Placement load-aware selector and its WorkerStats-driven next_worker()
- WorkerId newtype and the address->worker routing map; AddressMap is
  now a plain AddrSet membership set
- num_threads from RuntimeConfig

Rewired for the single-worker tick API:
- python/wasm bindings, dashboard dummy node (deleted), myelin vastai
  adapter, and the runtime/test suites

Cleanup folded in during review:
- prune three never-written WorkerStats counters (cross_sends,
  messages_dropped, restarts)
- collapse the redundant tick_all params onto the WorkerContext handle
2026-08-09 13:50:33 +04:00
..
src refactor(core): drop native threading for tick-driven execution 2026-08-09 13:50:33 +04:00
.gitignore feat: stability for deployment and distribution (#44) 2026-02-19 14:39:33 +00:00
ACTOR_PANEL_SPEC.md refactor: mvp-system is now a standalone app, myelin 2026-08-01 14:06:10 +04:00
AGENTS.md feat: actor view panels for the dashboard 2026-08-03 14:18:24 +04:00
Cargo.lock stash dashboard prune and match mvp to spec 2026-06-25 11:29:16 +04:00
Cargo.toml feat: proper README, LICENSE, and our first quick example 2026-08-06 00:53:16 +04:00
README.md feat: actor view panels for the dashboard 2026-08-03 14:18:24 +04:00

dashboard

Read-only HTML/SSE dashboard over incoming datastream frames.

The crate owns the Axum server, bounded raw frame window, and view registry. Component crates can keep their own view implementations beside their code and register them through DashboardHandle::register_view. The built-in swactor views are hosted here because worker/actor/message processing is universal to swactor programs: the worker page, and the actor overview (fused roster) plus per-actor dossier.

Routes

  • GET / — dashboard index
  • GET /events — raw incoming frames as SSE
  • GET /api/frames — recent raw frame window
  • GET /api/views — registered view metadata
  • GET /view/datastream/live — generic live explorer over retained and incoming datastream frames
  • GET /api/view/datastream/live — bounded per-stream/channel explorer snapshot
  • GET /view/fleet — compact fleet overview and focused machine telemetry
  • GET /api/view/fleet — fleet and machine telemetry JSON snapshot
  • GET /view/swactor/workers — built-in worker page
  • GET /api/view/swactor/workers — worker page JSON snapshot
  • GET /view/swactor/actor-overview — built-in actor overview + roster page
  • GET /api/view/swactor/actor-overview — actor overview JSON snapshot
  • GET /view/swactor/actor-dossier — built-in per-actor dossier page
  • GET /api/view/swactor/actor-dossier — actor dossier JSON snapshot

All state is derived from observed frames. The dashboard sends no control signals back to producers.