Watch
0
0
Fork
You've already forked hyperhive
0

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
This commit is contained in:
atlas 2026-10-02 11:45:40 +02:00 • committed by mara
commit 843c9ad016

View file

@ -16,7 +16,7 @@ from the dashboard tab strip.
- **← home back-link**: top-left of the chrome, links to the H0M3 hub - **← 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. at `/`. Every surface links back to the hub rather than to each other.
- **Tab strip**: `◆ SW4RM ◆`, `◆ Y3R C4LL ◆`, `◆ P3RM1SS10NS ◆`, - **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 / standalone **C0R3** page (`/core.html`), and FL0W / L0GS / ST4TS /
M4TR1X live on their own pages too, all reachable from the M4TR1X live on their own pages too, all reachable from the
H0M3 hub (not the tab strip). Count pills on SW4RM 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 browser's `localStorage` — preferences **don't** sync between devices and
**don't** survive a profile wipe. One section today (browser **don't** survive a profile wipe. One section today (browser
notifications); future preferences land here as sibling `<h3>` blocks notifications); future preferences land here as sibling `<h3>` blocks
in `dashboard.html`. Was its own S3TT1NGS page/tile (`/settings.html`) in `dashboard.html` — a standalone page for one toggle wouldn't earn
until mara moved it in here — a standalone page for one toggle didn't its own tile.
earn its own tile.
**◇ browser notifications** — `🔔 enable notifications` button when **◇ browser notifications** — `🔔 enable notifications` button when
permission ungranted; `🔕 mute / 🔔 unmute` toggle once granted 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`) ## C0R3 page (`/core.html`)
Passive / rare-interaction state. No longer a dashboard tab — it's a Passive / rare-interaction state, reached from the **Core** tile on the
standalone page reached from the **Core** tile on the H0M3 hub (served at H0M3 hub (served at
`/core.html`), with the same minimal chrome as `/logs.html`: a `← home` `/core.html`), with the same minimal chrome as `/logs.html`: a `← home`
back-link + a `createTabStrip` sub-tab nav (**K3PT ST4T3** default, back-link + a `createTabStrip` sub-tab nav (**K3PT ST4T3** default,
then **C0NT41N3R L04D**). The page is its own esbuild bundle (`core.js`) then **C0NT41N3R L04D**). The page is its own esbuild bundle (`core.js`)
that cold-loads `/api/state` and subscribes to `/api/dashboard/stream` for that cold-loads `/api/state` and subscribes to `/api/dashboard/stream` for
`tombstones_changed`, `capabilities_changed`, and `tool_groups_changed` `tombstones_changed`, `capabilities_changed`, and `tool_groups_changed`
(the latter two re-render the stale-perms sub-section when permission (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.) page — see below.)
**K3PT ST4T3** — two sub-sections on one pane: **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 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 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 handle's `.refresh()` on every `rebuild_queue_changed` SSE tick (that
event is a bare `{ seq }` trigger — it carried a typed queue snapshot event is a bare `{ seq }` trigger carrying no queue payload; both
until every consumer had moved to the generic endpoint, and now carries dashboard pages treat the tick as a pure refetch trigger).
none; 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 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 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 **Rows carry no source chip, kind label, timing, or build-log
deep-link** — the generic graph wire doesn't carry those fields, and deep-link** — the generic graph wire doesn't carry those fields, and
rows deliberately present exactly what the endpoint provides rather 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 render their **full step tree**, not just a bare summary — the wire
doesn't filter `Done` nodes out. 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`, the update button (snapshot field `meta_update_running`,
live event `meta_update_running`). live event `meta_update_running`).
**BUILD L0GS** — all-agents build log history (moved from `/logs.html`). **BUILD L0GS** — all-agents build log history. Lazy-loaded on first tab
Lazy-loaded on first tab activation; autorefreshes when activation; autorefreshes when
`rebuild_queue_changed` fires. Fetches `GET /api/build-logs?limit=30`. `rebuild_queue_changed` fires. Fetches `GET /api/build-logs?limit=30`.
Renders a scrollable list of build entries; each row is a collapsible Renders a scrollable list of build entries; each row is a collapsible
button showing status badge (`live` / `ok` / `fail`), agent name, 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 `HIVE_MATRIX_GUI_ENABLED` env var → `state.matrix_gui_enabled` in
`/api/state`; the gateway does the actual static serving. `/api/state`; the gateway does the actual static serving.
There's no tile for it on the H0M3 hub (removed along with Forge's — The operator reaches it from the swarm-ui LinksMenu, not a H0M3 hub
see the H0M3 section above). The operator reaches it from the swarm-ui tile (see `docs/swarm/ui.md::Quick links`), and logs in once with the
LinksMenu instead (see `docs/swarm/ui.md::Quick links`), and logs in in-host tuwunel homeserver URL (`http://localhost:8008` or whatever
once with the in-host tuwunel homeserver URL (`http://localhost:8008` or whatever
the matrix module exposes). the matrix module exposes).
The unified nginx-front re-root to 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: reachable from the Logs tile on the H0M3 hub. Minimal chrome:
a `← home` back link and a three-item sub-tab strip. Tab a `← home` back link and a three-item sub-tab strip. Tab
routing is hash-based (`#agent`, `#infra`, `#system`); default is 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 **AGENT sub-tab** — per-container journald viewer. Two selects: agent
name (populated from `GET /api/state`) and unit filter 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 (`NodeKind`'s `&str` conversion, the same strings the graph wire's node
labels carry), not a fixed set. Treat it as an opaque display labels carry), not a fixed set. Treat it as an opaque display
string; don't switch on specific values. `restarting` in 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. restart.
- It's **not** exclusively operator-initiated, and **not** limited - It's **not** exclusively operator-initiated, and **not** limited
to rebuild-shaped work — `running_transients()` in hive-c0re is to rebuild-shaped work — `running_transients()` in hive-c0re is
@ -1226,8 +1223,7 @@ payload):
every queue mutation (enqueue, state transition, dedup collapse, every queue mutation (enqueue, state transition, dedup collapse,
terminal-history trim). Unlike the snapshot events below it ships terminal-history trim). Unlike the snapshot events below it ships
no state at all: the client re-fetches `GET /api/jobq/graph`, which no state at all: the client re-fetches `GET /api/jobq/graph`, which
is where it reads the queue from cold too. No is where it reads the queue from cold too.
`/api/state.rebuild_queue` exists — it went with the typed projection.
- `schedules_changed` (seq, schedules: `Vec<WireSchedule>`) — - `schedules_changed` (seq, schedules: `Vec<WireSchedule>`) —
full snapshot of all scheduled prompts. Emitted after every full snapshot of all scheduled prompts. Emitted after every
operator mutation via the `/api/schedules` surface (new / operator mutation via the `/api/schedules` surface (new /
@ -1276,7 +1272,7 @@ shaped yet). Every other section — approvals,
transients, containers, operator inbox, message flow — transients, containers, operator inbox, message flow —
derives from `/api/dashboard/stream` after the initial snapshot, derives from `/api/dashboard/stream` after the initial snapshot,
maintaining its own client-side store and applying events on maintaining its own client-side store and applying events on
top. The 5s periodic poll is gone. top.
<!-- vale write-good.Passive = YES --> <!-- vale write-good.Passive = YES -->
Generalised form helpers: `form[data-confirm="…"]` pops Generalised form helpers: `form[data-confirm="…"]` pops