From 843c9ad0165e7d04d3a18a64ba5709d48ffaabd7 Mon Sep 17 00:00:00 2001 From: atlas Date: Fri, 2 Oct 2026 11:45:40 +0200 Subject: [PATCH] docs(web-ui): state current dashboard behaviour, drop changelog wording Rewrites 12 sentences in docs/web-ui/dashboard.md that described current state as a change from something earlier (moved/no longer/ gone/was) or stated what a field/page doesn't exist without saying what replaced it. Verified each against the current code at forge/main before rewriting. Refs #3902 --- docs/web-ui/dashboard.md | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/docs/web-ui/dashboard.md b/docs/web-ui/dashboard.md index f1032305..88266119 100644 --- a/docs/web-ui/dashboard.md +++ b/docs/web-ui/dashboard.md @@ -16,7 +16,7 @@ from the dashboard tab strip. - **← home back-link**: top-left of the chrome, links to the H0M3 hub at `/`. Every surface links back to the hub rather than to each other. - **Tab strip**: `◆ SW4RM ◆`, `◆ Y3R C4LL ◆`, `◆ P3RM1SS10NS ◆`, - `◆ SCH3DUL3S ◆`. In-page tabs only — the SYST3M panels moved to the + `◆ SCH3DUL3S ◆`. In-page tabs only — the SYST3M panels live on the standalone **C0R3** page (`/core.html`), and FL0W / L0GS / ST4TS / M4TR1X live on their own pages too, all reachable from the H0M3 hub (not the tab strip). Count pills on SW4RM @@ -92,9 +92,8 @@ in_reply_to, file_refs). browser's `localStorage` — preferences **don't** sync between devices and **don't** survive a profile wipe. One section today (browser notifications); future preferences land here as sibling `

` blocks -in `dashboard.html`. Was its own S3TT1NGS page/tile (`/settings.html`) -until mara moved it in here — a standalone page for one toggle didn't -earn its own tile. +in `dashboard.html` — a standalone page for one toggle wouldn't earn +its own tile. **◇ browser notifications** — `🔔 enable notifications` button when permission ungranted; `🔕 mute / 🔔 unmute` toggle once granted @@ -111,15 +110,15 @@ instead — it's agent-terminal-only, unrelated to this section. ## C0R3 page (`/core.html`) -Passive / rare-interaction state. No longer a dashboard tab — it's a -standalone page reached from the **Core** tile on the H0M3 hub (served at +Passive / rare-interaction state, reached from the **Core** tile on the +H0M3 hub (served at `/core.html`), with the same minimal chrome as `/logs.html`: a `← home` back-link + a `createTabStrip` sub-tab nav (**K3PT ST4T3** default, then **C0NT41N3R L04D**). The page is its own esbuild bundle (`core.js`) that cold-loads `/api/state` and subscribes to `/api/dashboard/stream` for `tombstones_changed`, `capabilities_changed`, and `tool_groups_changed` (the latter two re-render the stale-perms sub-section when permission -data changes). (Rebuild queue and meta inputs have moved to the BU1LDS +data changes). (Rebuild queue and meta inputs live on the BU1LDS page — see below.) **K3PT ST4T3** — two sub-sections on one pane: @@ -199,9 +198,8 @@ pipeline) with an `onUpdate` callback to drive the two things below it that the generic view doesn't show. The component owns fetching, cold and live: `GET /api/jobq/graph` on mount, and a refetch via the mount handle's `.refresh()` on every `rebuild_queue_changed` SSE tick (that -event is a bare `{ seq }` trigger — it carried a typed queue snapshot -until every consumer had moved to the generic endpoint, and now carries -none; both dashboard pages treat the tick as a pure refetch trigger). +event is a bare `{ seq }` trigger carrying no queue payload; both +dashboard pages treat the tick as a pure refetch trigger). Each row is one root graph node (`parent: null`); a multi-step op's per-agent subgraphs and sub-steps render as nodes within that one @@ -222,7 +220,7 @@ own domain concept (the component knows nothing about that endpoint). **Rows carry no source chip, kind label, timing, or build-log deep-link** — the generic graph wire doesn't carry those fields, and rows deliberately present exactly what the endpoint provides rather -than reconstructing chrome hive-c0re no longer sends. Settled entries +than reconstructing chrome hive-c0re doesn't send. Settled entries render their **full step tree**, not just a bare summary — the wire doesn't filter `Done` nodes out. @@ -274,8 +272,8 @@ the panel shows a pulsing "⏳ meta-update running" banner and disables the update button (snapshot field `meta_update_running`, live event `meta_update_running`). -**BUILD L0GS** — all-agents build log history (moved from `/logs.html`). -Lazy-loaded on first tab activation; autorefreshes when +**BUILD L0GS** — all-agents build log history. Lazy-loaded on first tab +activation; autorefreshes when `rebuild_queue_changed` fires. Fetches `GET /api/build-logs?limit=30`. Renders a scrollable list of build entries; each row is a collapsible button showing status badge (`live` / `ok` / `fail`), agent name, @@ -550,10 +548,9 @@ nginx container at `/matrix/` when `HIVE_MATRIX_GUI_ENABLED` env var → `state.matrix_gui_enabled` in `/api/state`; the gateway does the actual static serving. -There's no tile for it on the H0M3 hub (removed along with Forge's — -see the H0M3 section above). The operator reaches it from the swarm-ui -LinksMenu instead (see `docs/swarm/ui.md::Quick links`), and logs in -once with the in-host tuwunel homeserver URL (`http://localhost:8008` or whatever +The operator reaches it from the swarm-ui LinksMenu, not a H0M3 hub +tile (see `docs/swarm/ui.md::Quick links`), and logs in once with the +in-host tuwunel homeserver URL (`http://localhost:8008` or whatever the matrix module exposes). The unified nginx-front re-root to @@ -620,7 +617,7 @@ A dedicated log-viewer page (not a tab pane — a separate HTML page), reachable from the Logs tile on the H0M3 hub. Minimal chrome: a `← home` back link and a three-item sub-tab strip. Tab routing is hash-based (`#agent`, `#infra`, `#system`); default is -`#agent`. (Build log history has moved to the BU1LDS page — see above.) +`#agent`. (Build log history lives on the BU1LDS page — see above.) **AGENT sub-tab** — per-container journald viewer. Two selects: agent name (populated from `GET /api/state`) and unit filter @@ -774,7 +771,7 @@ life). Two consequences for anything rendering it: (`NodeKind`'s `&str` conversion, the same strings the graph wire's node labels carry), not a fixed set. Treat it as an opaque display string; don't switch on specific values. `restarting` in - particular no longer exists, because no node kind is unique to a + particular doesn't exist, because no node kind is unique to a restart. - It's **not** exclusively operator-initiated, and **not** limited to rebuild-shaped work — `running_transients()` in hive-c0re is @@ -1226,8 +1223,7 @@ payload): every queue mutation (enqueue, state transition, dedup collapse, terminal-history trim). Unlike the snapshot events below it ships no state at all: the client re-fetches `GET /api/jobq/graph`, which - is where it reads the queue from cold too. No - `/api/state.rebuild_queue` exists — it went with the typed projection. + is where it reads the queue from cold too. - `schedules_changed` (seq, schedules: `Vec`) — full snapshot of all scheduled prompts. Emitted after every operator mutation via the `/api/schedules` surface (new / @@ -1276,7 +1272,7 @@ shaped yet). Every other section — approvals, transients, containers, operator inbox, message flow — derives from `/api/dashboard/stream` after the initial snapshot, maintaining its own client-side store and applying events on -top. The 5s periodic poll is gone. +top. Generalised form helpers: `form[data-confirm="…"]` pops