docs: describe the flat container list, not a dormant tree

mara's ruling on the review: documentation describes functionality as
is. The dashboard doc carried a "Topology tree" section marked dormant,
still spelling out the indent lanes, joints and continuation bars the
renderer paints — for a renderer that, with no parent field to walk,
puts every container at depth 0 and emits no prefix column at all. A
section labelled dormant is still a section describing a feature the
code does not have.

Each one now states what the page renders today: SW4RM's C0NTAINERS is
a flat alphabetical list, one row per container, no indent and no glyph;
the tree section says nothing nests and names the code that decides so;
the selection bar lists the bulk actions it has, without a note about
the M0V3 picker it doesn't (agent-hierarchy.md's removal table is where
that record belongs).

Two more the -U15 context sweep turned up outside that section, neither
naming a removed identifier so neither reachable by grep: approvals.md
told an agent to clone "the child's" config repo, and hivectl.md sold
`agent restart` as a way round "the agent hierarchy".
This commit is contained in:
atlas 2026-09-21 22:56:56 +02:00
commit d547ae58e6
3 changed files with 12 additions and 34 deletions

View file

@ -491,7 +491,7 @@ current config — not an editing surface. An agent without the
capability sees no other agent's config at all.
An agent with the `approvals` tool group submits a change the same way
it makes any other change: **clone the child's config repo from the
it makes any other change: **clone the target agent's config repo from the
forge into its own state dir, commit on a branch, open a PR**, and let
the operator review and approve it. By design, no second, mount-shaped
path reaches the same file without the review.

View file

@ -163,7 +163,7 @@ raw rows instead of the table.
`agent <name> restart` is the manual equivalent of the MCP `restart`
tool — useful when you need to kick a container from the host without
going through the agent hierarchy. For more than one agent at once, use
going through an agent at all. For more than one agent at once, use
the top-level `hivectl restart --agents` (or `--agent <name>` repeated) —
it rides a single DAG and reports per-target failures at the end rather
than aborting mid-run, instead of shelling out to `agent <name> restart`

View file

@ -56,15 +56,10 @@ surfaces, not tab panes.
## SW4RM tab
**C0NTAINERS** — live containers rendered as a flat,
alphabetically-sorted list. The renderer still walks
`ContainerView.parent` for a depth-first tree with ASCII glyphs
(`├─`, `└─`, `│ ` continuation columns), but that field no longer
exists, so every row sits at depth 0 and the renderer paints no glyph. The tree
sorts alphabetically;
roots likewise. The tree tolerates cycles in the parent graph —
it appends orphaned containers (not reachable from any root)
as roots so no agent disappears. Pulsing red banner at the top
**C0NTAINERS** — live containers as a flat list, one row per
container, sorted alphabetically by agent name. No row nests under
another, none carries an indent or a tree glyph, and every container the
rescan reports gets a row. Pulsing red banner at the top
of this section if any two sub-agents hash to the same port
(`port_conflicts` from `/api/state`): the operator must rename
one of them and rebuild. `lifecycle::{spawn,rebuild}` also
@ -981,27 +976,11 @@ identically.)
### Topology tree
⚠️ **Dormant now that `ContainerView.parent` no longer exists:**
`buildAgentTree` now puts every container at depth 0 and the rules below are
all no-ops — the list renders flat. The walk and the prefix painting are
still in `swarm.js`; retiring them falls to the frontend owner rather
than to this removal. What follows describes what the code
still does, for whoever makes that call.
The per-row prefix column (`.tree-prefix`) is **DOM-painted, not
text-glyph-painted**: each indent lane is its own positioned `<span>`
so CSS can draw full-height vertical bars that bridge the gap between
sibling rows. Plain text box-drawing characters (`├─`, `└─`, `│ `)
would only paint one text-line tall and leave visible breaks between
the taller-than-one-line container cards, so CSS borders draw the
bars instead: a continuation bar runs the full height of an
ancestor's still-open subtree, and the joint at a row's own depth is
`├` (more siblings below) or `└` (last sibling — the line stops at
the row's icon midline). Exact lane widths and positioning live in
`swarm.js`'s tree-prefix rendering and its paired CSS rules — not
reproduced here since they're tuned in pixel units and will drift.
With every container at depth 0 these rules are all no-ops and the
layout reads like a plain flat list, which is what a hive renders today.
Nothing nests. `swarm.js::buildAgentTree` returns every container at
depth 0 in alphabetical order, and the row builder emits no prefix
column for a depth-0 row — so a container row carries no indent, no
joint and no continuation bar, and the SW4RM list reads as a flat
roster. The `.tree-prefix` lane rules in `dashboard.css` match nothing.
## Selection bar
@ -1032,8 +1011,7 @@ frosted-mauve bar slides up from the bottom of the viewport
- `DESTR0Y` / `PURG3` — always available
<!-- vale write-good.Passive = YES -->
The `M0V3` picker that used to sit here no longer exists — an agent
has no parent to move it to any more.
That list is the whole set — the bar offers no other bulk action.
- **`✕ clear`** button + `Esc` key clear the entire selection.
Every render prunes stale selections (agents destroyed while