Watch
0
0
Fork
You've already forked hyperhive
0

docs(web-ui): fix argus's request-changes items + 5 more absence/changelog lines

Removes the remaining #system/Settings stale facts and absent-thing
mentions argus's review flagged, plus 5 more lines mara's rule-3 audit
found in the same file (named a nonexistent field/state instead of
stating current behaviour).

Refs #3902
This commit is contained in:
atlas 2026-10-02 11:55:20 +02:00 • committed by mara
commit 6a60312da7

View file

@ -6,7 +6,7 @@
hive-c0re serves the dashboard at `/dashboard.html` (with the home page at `/`). hive-c0re serves the dashboard at `/dashboard.html` (with the home page at `/`).
It has a fixed chrome header at the top and a `<main>` that shows exactly It has a fixed chrome header at the top and a `<main>` that shows exactly
one tab pane at a time. The URL hash (`#swarm`, `#call`, `#system`, one tab pane at a time. The URL hash (`#swarm`, `#call`,
`#permissions`, `#schedules`) drives which pane is `#permissions`, `#schedules`) drives which pane is
active; hash changes don't reload the page. FL0W, L0GS, and the optional active; hash changes don't reload the page. FL0W, L0GS, and the optional
M4TR1X client are separate pages reachable from the H0M3 hub at `/`, not M4TR1X client are separate pages reachable from the H0M3 hub at `/`, not
@ -161,10 +161,9 @@ sample each refresh), and stops on sub-tab change. Disk size (`disk_bytes`)
rides the same row, but a separate ~5 min background `du` sampler feeds rides the same row, but a separate ~5 min background `du` sampler feeds
it (state dir + container writable rootfs, shared nix store excluded via it (state dir + container writable rootfs, shared nix store excluded via
`du -x`), so the 5 s poll stays cheap cgroup-only reads; the row carries the `du -x`), so the 5 s poll stays cheap cgroup-only reads; the row carries the
last-sampled value (`null` until the first sample). Network is intentionally last-sampled value (`null` until the first sample). Network isn't tracked
omitted — agents share the host netns, so there is no per-container net per container — see `docs/networking/network.md` for the current
counter (per-agent network needs the netns-isolation roadmap in per-agent netns model.
`docs/networking/network.md`).
Hive infrastructure services (`hive-ci`, `hive-forge`, `hive-gateway`, Hive infrastructure services (`hive-ci`, `hive-forge`, `hive-gateway`,
`hive-matrix`) have no dashboard panel — `hivectl stop`/`start`/`restart` `hive-matrix`) have no dashboard panel — `hivectl stop`/`start`/`restart`
@ -548,8 +547,8 @@ 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.
The operator reaches it from the swarm-ui LinksMenu, not a H0M3 hub The operator reaches it from the swarm-ui LinksMenu (see
tile (see `docs/swarm/ui.md::Quick links`), and logs in once with the `docs/swarm/ui.md::Quick links`), and logs in once with the
in-host tuwunel homeserver URL (`http://localhost:8008` or whatever in-host tuwunel homeserver URL (`http://localhost:8008` or whatever
the matrix module exposes). the matrix module exposes).
@ -601,7 +600,7 @@ re-renders the terminal row. The operator addresses the root agent as `@root`.
The H0M3 hub is the primary landing page (served at `/` by default). A The H0M3 hub is the primary landing page (served at `/` by default). A
responsive grid of link tiles — Dashboard, Flow, Logs, Builds, Stats, responsive grid of link tiles — Dashboard, Flow, Logs, Builds, Stats,
Settings, Core, Credentials, API — each pointing to their respective Core, Credentials, API — each pointing to their respective
surfaces, all unconditionally shown (no gating). The page is a pure surfaces, all unconditionally shown (no gating). The page is a pure
portal with no tab-bar or SSE subscriptions. Typography + colours inherit portal with no tab-bar or SSE subscriptions. Typography + colours inherit
from the shared theme (Catppuccin Mocha via `common.css` + `theme.css`). from the shared theme (Catppuccin Mocha via `common.css` + `theme.css`).
@ -726,7 +725,7 @@ regardless of run state.
<!-- vale write-good.Passive = YES --> <!-- vale write-good.Passive = YES -->
**Line 2** — status badges only (no per-card action buttons — actions **Line 2** — status badges only (no per-card action buttons — actions
moved to the **selection bar** or the **per-agent `⋮` menu**, see live in the **selection bar** or the **per-agent `⋮` menu**, see
below). below).
### Status badges ### Status badges
@ -754,10 +753,9 @@ into one label, matching the existing multi-badge convention this
line already uses for `paused`/`needs_update`/model/ctx. line already uses for `paused`/`needs_update`/model/ctx.
Any pending badge means the row is actually **running** something Any pending badge means the row is actually **running** something
right now — there is no separate queued-but-not-started row state right now (see **Pending-badge derivation** below); every row
to visually distinguish it from (see **Pending-badge derivation** carrying ≥1 badge keeps the amber row tint AND draws a **rotating
below), so every row carrying ≥1 badge keeps the amber row tint AND amber ring** around the agent icon.
draws a **rotating amber ring** around the agent icon.
**Pending-badge derivation:** transients only (`transientsState`, **Pending-badge derivation:** transients only (`transientsState`,
keyed `agent -> Map<kind, since_unix>`) — a transient is **derived keyed `agent -> Map<kind, since_unix>`) — a transient is **derived
@ -770,9 +768,7 @@ life). Two consequences for anything rendering it:
- The label vocabulary is **open** — it's the node's own wire tag - The label vocabulary is **open** — it's the node's own wire tag
(`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.
particular doesn't exist, because no node kind is unique to a
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
a status-only test (any `Running` node whose payload names a a status-only test (any `Running` node whose payload names a
@ -785,12 +781,11 @@ their own label directly via `TransientSet`/`TransientCleared`
events carrying no backing node at all. events carrying no backing node at all.
**Queued (not-yet-started) work shows nothing on the card.** Only **Queued (not-yet-started) work shows nothing on the card.** Only
running work gets a per-agent pending badge — by design, there is no running work gets a per-agent pending badge, by design — the swarm
fallback badge for work that's merely `Pending` in the queue, since view stays independent of job-queue internals. The queue-summary
the swarm view stays independent of job-queue internals. The queue- banner below is the only queued-work indicator on this tab, and it
summary banner below is the only queued-work indicator on this tab, reads the narrow `/api/jobq/rollup` endpoint rather than the full
and it reads the narrow `/api/jobq/rollup` endpoint rather than the graph.
full graph.
**Active model badge** (`model · <name>`, blue) appears when the **Active model badge** (`model · <name>`, blue) appears when the
container is running and the harness has persisted a model name (the container is running and the harness has persisted a model name (the
@ -890,7 +885,7 @@ bounded by a 3-minute timeout (`GRACEFUL_STOP_TIMEOUT`) that
resolves either way and falls back to the downstream mechanical resolves either way and falls back to the downstream mechanical
stop. The quiescing progress surfaces through the same stop. The quiescing progress surfaces through the same
rebuild-queue pending-badge mechanism the card already reads for a rebuild-queue pending-badge mechanism the card already reads for a
rebuild — there's no build log, since a graceful stop runs no nix rebuild, driven by the `Signal`/`Drain` pair rather than a nix
build. (The `hivectl stop --graceful` CLI flag enqueues the same build. (The `hivectl stop --graceful` CLI flag enqueues the same
`Signal`/`Drain` pair, so the dashboard and CLI paths behave `Signal`/`Drain` pair, so the dashboard and CLI paths behave
identically.) identically.)