Gate D written; brief for piece 4, the WebUI first screen on the Console design (#1506, #1503)

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
2026-09-12 19:05:44 -05:00
co-authored by Claude Fable 5.1
parent 46ded3fcba
commit b7f8d1cc35
3 changed files with 73 additions and 8 deletions
@@ -238,6 +238,63 @@ ledger's output, not from memory.
- If a number cannot be computed from evidence it prints "unknown", never a
guess.
## Piece 4: WebUI first screen (Console)
Approved by Jason 2026-09-12 ("speed walk to success") after Gate D. Decision
MOSAIC-STACK-D-002: Dewey's design 3, Console
(`agents/dewey/work/wui/mockups/d3-console.html`), is the WebUI starting
point. The board is its first and only screen. Owner: dewey. Dewey opens the
issue and updates `CURRENT.md` when picking it up.
### What it is
`packages/webui`: `node packages/webui/src/cli.mjs serve [--port N]
[--board http://127.0.0.1:7331]`. Loopback only. One page, the Console
layout from the mockup, populated from the control board's `/api/board`
JSON: project tree on the left, dense session table (state, task with its
source tag, active project, workspace, model, registered line, last
activity), inspector drawer on the row with the last assistant text and the
reply box. Actions proxy to the board: `POST /api/seen` and `POST /api/reply`
unchanged in shape. "Simulated" notices from the mockup are gone; every
control either does the board thing or does not exist yet.
- Data: only what `/api/board` already serves. No new scanner, no new
sources, no seat writes. If the mockup shows a field the board does not
have, the field is dropped for this piece and a line goes to
`docs/plans/DEFERRED.md`.
- Style: the mockup's CSS and brand assets as they are, palette and
appearance switches kept if they are already built, otherwise dropped.
- Refresh: same as the board page (its scan on load or refresh); no polling
loop beyond what the board page already does.
- No auth, no accounts, no settings page, no second screen, no router.
### Gate E (yes/no)
Jason works Monday 2026-09-14 from the WebUI and does not open the board's
own page or a terminal to a repo seat to answer "who is waiting on me". Pass
is his say-so at the end of the day, with any exception written as a line in
`DEFERRED.md` with the reason.
### Tests
- Page renders the fixture `/api/board` JSON (the board's own test fixture)
into the table and tree; counts match the fixture.
- Seen and reply proxy to the board with the same body; a fake board on
localhost captures the requests.
- Board unreachable: page says so with the URL, no blank screen.
- Loopback bind only, as the board.
- Dewey's existing mockup verifier (`work/wui/checks/mockups-verify.mjs`)
or its equivalent runs against the served page for contrast and 320px
width.
### Boundaries
- `packages/control-board` changes only if the WebUI needs a field the
scanner already computes but does not serialize; each such change is one
commit with a test, nothing else.
- No fleet sources, no comms changes, no `packages/seat` changes.
- Dewey coordinates with Darkwing before touching any board file.
## How the scanner decides state
The scanner reads the newest pi session log for each agent, plus whether