From b7f8d1cc359f21974f15effc24681808f32c60d0 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sat, 12 Sep 2026 19:05:44 -0500 Subject: [PATCH] Gate D written; brief for piece 4, the WebUI first screen on the Console design (#1506, #1503) Co-Authored-By: Claude Fable 5.1 --- docs/plans/2026-09-12_control-board-mvp.md | 57 ++++++++++++++++++++++ docs/plans/CURRENT.md | 17 +++++-- docs/plans/DEFERRED.md | 7 ++- 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/docs/plans/2026-09-12_control-board-mvp.md b/docs/plans/2026-09-12_control-board-mvp.md index 5cf8a42d..59830781 100644 --- a/docs/plans/2026-09-12_control-board-mvp.md +++ b/docs/plans/2026-09-12_control-board-mvp.md @@ -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 diff --git a/docs/plans/CURRENT.md b/docs/plans/CURRENT.md index 315e07ce..f11433ec 100644 --- a/docs/plans/CURRENT.md +++ b/docs/plans/CURRENT.md @@ -50,10 +50,19 @@ Gate C passed 2026-09-12 on 867619dc (logged by Jason at 4f830680): answered in its own session with no send attempt, and the row showed the answer on the next scan. #1505 is closed. -Next action: Jason runs Gate D for piece 3, the ledger, under #1506: -`node packages/ledger/src/cli.mjs --since 2026-09-06 --until 2026-09-12`. -Choose one number to move next week and write that sentence with the number -into this file. Do not infer acceptance from the implementation or tests. +Gate D (2026-09-12, Jason's run of the ledger for 2026-09-06 to 2026-09-12): +**18.9 human messages per closed issue.** That is the number to move next +week: every message Jason types to a seat is a nudge the rails did not +absorb. Target for the week of 2026-09-13: under 10, by assignment through +`mosaic seat task` and the board instead of the terminal, then the +orchestrator seat. Companion numbers from the same run, for context only: +8 issues closed, median 2.7 hours open, 1.9 follow-up commits per issue. + +Next action: piece 4, the WebUI on Dewey's Console design (MOSAIC-STACK-D-002). +Brief on the plan page, section "Piece 4: WebUI first screen (Console)". +Owner: dewey. Darkwing closes #1506 (Gate D written) and #1504 (registration +shipped, Gate B passed), then holds for piece 5 (orchestrator seat) unless +Jason calls it. #1503 stays open until Jason rules on "who is waiting on me". `packages/ledger` is implemented: read-only local refactor subjects, one Gitea issue request, repo seats' user messages, two tables and JSON. Ledger diff --git a/docs/plans/DEFERRED.md b/docs/plans/DEFERRED.md index 392ae00a..e0072241 100644 --- a/docs/plans/DEFERRED.md +++ b/docs/plans/DEFERRED.md @@ -55,13 +55,12 @@ at every gate. Started 2026-09-12 during the control board MVP. ## Queue (Jason's order) -1. Ledger (piece 3, in progress, Gate D). -2. WebUI on Dewey's Console design absorbs the board as its first screen - (MOSAIC-STACK-D-002). +1. WebUI on Dewey's Console design absorbs the board as its first screen + (piece 4, MOSAIC-STACK-D-002, Gate E on Monday 2026-09-14). 3. Orchestrator seat: assigns tasks through `mosaic seat task`, closes the "set by" gap. 4. Fleet launch through `mosaic launch`: the stress test. ## Done -- (none yet) +- Ledger (piece 3, #1506): shipped cd0aa5fb, Gate D written 2026-09-12 (18.9 human messages per closed issue).