Commit Graph
415 Commits
Author SHA1 Message Date
darkwing b023841c8a docs: publish reviewed CHAT-01C private readback contracts (#1507) 2026-09-13 00:48:26 -05:00
jason.woltje 28d4e98ad8 docs: publish reviewed CHAT-01 draft contracts and fixtures (#1507) 2026-09-12 23:48:03 -05:00
jason.woltje 370823b354 docs: pin CHAT-00 protocol research and synthetic checks (#1507) 2026-09-12 20:43:35 -05:00
jason.woltje 4c436f4ce4 plan: confirm all-seat WebUI session chat and gated delivery (#1507) 2026-09-12 20:28:22 -05:00
jason.woltjeandClaude Fable 5.1 0e77cfd10a Plan page for #1508: queue as data, pieces A-E, Gate G; QUEUE rows 9-13 link to it
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 19:45:14 -05:00
jason.woltjeandClaude Fable 5.1 cbf24b01b0 QUEUE rows 9-13 (#1508): process becomes data, one writer, ledger checks; AGENTS.md cadence reads QUEUE.md first
Jason: the process goes off the rails every time because the entry point is
prose. Rows 9-13 are marked required and cannot be parked.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 19:41:56 -05:00
jason.woltje 11659cf2a1 records: hand Console to Jason for Gate E after publication (#1507) 2026-09-12 19:39:14 -05:00
jason.woltje ea00ec66d9 webui: serve the Console first screen from the control board (#1507) 2026-09-12 19:37:35 -05:00
jason.woltjeandClaude Fable 5.1 7c8e530add QUEUE.md: one task table; CURRENT and DEFERRED point at it
Jason could not find what is next without reading the prose plans. QUEUE.md
is one row per piece with owner, issue, state, gate and brief location.
CURRENT.md becomes the narrative log; DEFERRED.md keeps only gaps.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 19:33:59 -05:00
jason.woltjeandClaude Fable 5.1 355b4308c3 CURRENT points at the piece 5 brief; DEFERRED: shared-checkout hazard (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 19:26:19 -05:00
jason.woltjeandClaude Fable 5.1 f80404f541 brief for piece 5, darkwing on point, with Gate F (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 19:25:53 -05:00
jason.woltje fab40f25f8 records: close ledger and seat registration after owner acceptance (#1506, #1504) 2026-09-12 19:18:47 -05:00
jason.woltjeandClaude Fable 5.1 b7f8d1cc35 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]>
2026-09-12 19:05:44 -05:00
jason.woltje cd0aa5fbb3 ledger: count issue-tagged commits and repo seat messages (#1506) 2026-09-12 12:04:15 -05:00
jason.woltjeandClaude Fable 5.1 db0d784bd8 plans: add DEFERRED.md, the one list of gaps found and not yet handled (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:53:24 -05:00
jason.woltjeandClaude Fable 5.1 889d87500f CURRENT: next action is piece 3, the ledger, per Jason's go (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:42:56 -05:00
jason.woltjeandClaude Fable 5.1 0334026e13 control board: brief for piece 3, the ledger, with Gate D (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:42:28 -05:00
jason.woltjeandClaude Fable 5.1 c90ce3a836 control board: Gate C passed, #1505 closed, next action waits for the ledger brief (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:39:23 -05:00
jason.woltjeandClaude Fable 5.1 4f83068097 control board: log Gate C pass for reply-from-board (#1505)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:38:55 -05:00
jason.woltjeandClaude Fable 5.1 867619dca2 control board: reply from the board through agent-send.sh (#1505)
Piece 2 of the MVP (#1503). A one-line reply box and Send in the detail
of rows with a live registration; POST /api/reply runs
tools/tmux/agent-send.sh -s <session> -S <host>:control-board
[-L <socket>] -m <text> once for one seat and returns the exit code,
stdout and stderr. The page shows delivered or failed with the tool's
stderr; other rows say "reply needs a registered seat". No send-keys,
queue, retries, history or broadcast; packages/seat and agent-send.sh
untouched. Every message ends with a fixed trailer telling the seat to
answer in its own session (Jason's refinement after the first Gate C
exchange; the board has no pane). Board suite 98/98.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:30:30 -05:00
jason.woltjeandClaude Fable 5.1 a62ca1904f control board: brief for piece 2, reply-from-board, with Gate C (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:17:28 -05:00
jason.woltjeandClaude Fable 5.1 0bed9ba3db control board: show the model each seat is running (#1503)
Jason asked for the running model (sonnet, opus, gpt-6-astra) on the
board. readSession keeps model and provider from the log's latest
model_change entry or assistant turn, whichever is later, so a /model
switch shows on the next scan; scanAgent exposes both; the page shows the
model under the agent name with the provider in the hover and a Model
detail row. Blank when the log names none.

Live check on a scratch board against the real data root: all 42 rows
carried a model. Board 91/91. Sonnet review caught a double-escaped hover
title; fixed.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:13:32 -05:00
jason.woltjeandClaude Fable 5.1 d0fb5b0f20 control board: log Gate B pass, seat registration shown on the board (#1504)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:13:05 -05:00
jason.woltjeandClaude Fable 5.1 17153fe140 control board: stale registrations and a launch-test leak (#1504)
Two defects in 69f99323, reported by the professor session and verified.

The darkwing launch test's flock-contention spawn ran without the fixture
config, so launch.sh re-entered scripts/mosaic against the real data root
and wrote fixture records for darkwing, dewey and filbert there. That
spawn now names the fixture config, and both launch test files set
MOSAIC_CONFIG to a nonexistent path and clear MOSAIC_LAUNCH_REGISTERED
process-wide, so a spawn that forgets fails instead of polluting.

A registration is written before the launch script's own checks, so a
refused launch left a record with a dead pid that the board honoured. The
scanner now probes the recorded pid (pidAlive, signal 0); a gone pid makes
the record stale: still on the Registered line with alive false, derived
task, project and workspace win, index gains registrationStale, CLI
summary gains a stale count.

Fleet launchers marked not planned per Jason. Board 90/90, seat 15/15,
launch scripts 5/5. Sonnet review APPROVED.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 11:04:49 -05:00
jason.woltjeandClaude Fable 5.1 69f99323c7 Add mosaic launch <seat> with seat registration for the control board (#1504)
New package packages/seat and wrapper scripts/mosaic. `launch <seat>` writes
<dataRoot>/seats/<layout>/<seat>/registration.json and then execs the seat's
launch.sh unchanged; `seat task <seat> <text>` edits the task only. The board
reads registrations, matches by sessions directory, and lets a registered
task, project or workspace override the derived value with a source tag.
The four repository launch scripts register themselves unless already
registered or run with --check. Fleet launchers untouched; one-liner on the
plan page.

Review found the record path keyed by seat name alone (repo and fleet
"darkwing" would collide); fixed by keying on layout. Also: the Pi pin
refusal now names installed and required versions.

Tests: seat 15, control-board 89, launch scripts 5, registry 69, config 24.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 10:56:17 -05:00
jason.woltjeandClaude Fable 5.1 01d9a19612 control board: record Jason's selection of Dewey design 3 (Console) for the WebUI (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 10:39:54 -05:00
jason.woltjeandClaude Fable 5.1 4a7e16c3ec Show task, active project and workspace per control board row (#1503)
Gate A fix asked by the professor session on Jason's behalf. Each row
now carries three derived fields, shown as "unknown" when the log and
tmux do not hold them:

- task: the session's first user message (pi logs have no task envelope)
- workspace: the live pane path of the pane running pi, else session cwd
- activeProject: basename of the nearest git checkout above the workspace

tmuxInspect replaces the bare liveness call in the CLI and returns
{ alive, workspace }; tmuxIsAlive stays as a wrapper. The grouping column
and seen.json keys are unchanged. Fixture test per field, tmux parse
tests, page test; missing launcher signals are recorded in the plan page.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 09:52:45 -05:00
jason.woltjeandClaude Fable 5.1 6ec253de20 Pin the mid-tool-call rule in the control board scanner (#1503)
Acceptance rule (plan page, bf641e22): a seat mid-tool-call is working,
never waiting. The scanner already met it through pi's stopReason values;
deriveState now also checks the content for a toolCall block (working),
after the error stop reasons and before "stop" (waiting). Thinking blocks
do not keep a text turn from being waiting. Three JSONL fixture tests and
three state-table cases pin the rule. Live check on the real board:
orch-01 and rev-code-01 mid-tool-call are working, velma's finished
text-only turn is waiting. Sonnet review: APPROVED.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 09:29:19 -05:00
jason.woltjeandClaude Fable 5.1 bf641e220a control board: park D05/registry-3/new seats and add the mid-tool-call working rule (#1503)
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 09:25:32 -05:00
jason.woltjeandClaude Fable 5.1 bf1391a424 Show "shown of total" in control board project headers while rows are hidden (#1503)
A project header now reads "fleet (13 of 38)" while Hide offline or Hide
seen hides at least one row, and "fleet (38)" when nothing is hidden. The
note under the table still says which filter hid how many. Numbers only,
so nothing new needs escaping. Static test pins the expression and the
removal of the raw-length header. Sonnet review: APPROVED, no findings.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 09:00:21 -05:00
jason.woltjeandClaude Fable 5.1 e90d15dd70 Add a per-project "Hide seen" checkbox to the control board page (#1503)
Each project table now has "Hide seen" beside "Hide offline", both on by
default, with a note saying how many rows each one hides. The choice
survives the 10-second refresh. Static test pins the markup, the filter,
the persistence guard, and the change handler. Sonnet review: APPROVED.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 08:55:22 -05:00
jason.woltjeandClaude Fable 5.1 b70749219f Add a collapsed "Seen" section to the control board page (#1503)
Jason asked for a way to recall rows he marked Seen. The page now lists
them under a collapsed "Seen (N)" section between "Waiting on you" and
"By project", each with Unsee. Open/closed state survives the 10-second
refresh because only the section body is re-rendered. Page-only change
plus one static test. Tests: control-board 64/64, registry 69/69.
Review APPROVED, no findings.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 08:45:51 -05:00
jason.woltjeandClaude Fable 5.1 88d21defde Check pi liveness per tmux pane and add "Seen" marks to the control board (#1503)
First step-3 refinement from Jason's daily use. Liveness now lists the
panes of the agent's tmux session and counts it alive only if a pane runs
pi, so killed pi sessions whose tmux session still exists show offline
instead of waiting. A "Seen" button on waiting and error rows stores the
row's lastActivity in <dataRoot>/board/seen.json (clicks only, never
rewritten by a scan, fail closed if corrupt) and drops the row from
"Waiting on you" until the agent writes anything newer; "Unsee" reverses
it. New POST /api/seen route: JSON only, 4 KB limit, 400 on bad input.

Tests: control-board 63/63 (30 new), registry 69/69. Review APPROVED;
receipt docs/plans/reviews/2026-09-12_control-board-step3-seen-marks.md.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 08:24:49 -05:00
jason.woltjeandClaude Fable 5.1 ebedd1281e Add control board web page and local server (#1503)
Step 2 of the control board MVP (MOSAIC-STACK-D-001): `serve` command starts
a loopback-only local server that serves one self-contained page and re-runs
the status scanner on each /api/board request. The page lists sessions
waiting on Jason first (errors on top), then one table per project with
plain-word states, ages, last messages, expandable detail rows, per-project
hide-offline, and a 10-second auto-refresh with pause.

Tests: control-board 33/33 (10 new: loopback rules, host refusal, all routes,
per-request rescan, 500 path, CLI refusals, live serve, page escaping guard);
registry 69/69 unchanged. Receipt:
docs/plans/reviews/2026-09-12_control-board-step2-review.md.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 07:58:38 -05:00
jason.woltjeandClaude Fable 5.1 b9f59a5903 Add control board status scanner and MVP plan (#1503)
Step 1 of the control board MVP (decision MOSAIC-STACK-D-001): a plan page,
Gitea #1503, and packages/control-board, which reads each agent's newest pi
session log plus tmux liveness and writes one status file per agent under
<dataRoot>/board/. 23/23 tests; independent review approved after three
fixes (length stopReason as error, unknown liveness state, secrets-boundary
test). CURRENT.md now points at step 2, the page.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 07:26:03 -05:00
jason.woltjeandClaude Fable 5.1 1993039c76 Record owner acceptance and closure of #1500 fixture increment
Jason reran the two-test fixture demonstration on the canonical checkout
at 5abbabb7 (2/2 pass). Records-only: acceptance receipt, BUILD-LOG,
SESSIONS and CURRENT.md next action (MVP re-plan). No source change.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-12 06:47:24 -05:00
jason.woltje 5abbabb74b Record fixture increment review, publication and owner test gate (#1500) 2026-09-10 20:23:37 -05:00
jason.woltje 3daee5ad89 Add fixture-only execution materialization and refresh (#1500) 2026-09-10 20:20:44 -05:00
jason.woltje 27e4873acc Record reviewed prerequisite correction and separate next approval gate (#1500) 2026-09-10 16:41:36 -05:00
jason.woltje 6335342873 Correct registry validation and contain metadata reads (#1500) 2026-09-10 16:40:16 -05:00
jason.woltje b3fa221060 Record owner acceptance of increment 1 (#1499) 2026-09-10 16:17:22 -05:00
jason.woltje 5446097483 Record increment 1 approval after contamination fix (#1499) 2026-09-10 15:23:58 -05:00
jason.woltje e6e30b6f55 Record increment 1 review request (#1499) 2026-09-10 15:18:27 -05:00
jason.woltje 54c1231280 Draft M20 increment 1 charter for owner approval (#1499) 2026-09-10 15:10:20 -05:00
jason.woltje 21461c8674 Register completed registry gate 7 closure 2026-09-10 15:08:58 -05:00
jason.woltje 86e009dde5 Close registry gate 7 with owner-approved refresh mechanism 2026-09-10 15:08:40 -05:00
jason.woltje 224147eccc Record owner rulings resolving registry review gates 2026-09-10 14:42:31 -05:00
jason.woltje d5307d2b0a Register completed registry alignment records 2026-09-10 14:28:07 -05:00
jason.woltje b8008eda5d Record owner account-selection rulings and registry draft revision 2026-09-10 14:27:47 -05:00
jason.woltje 50d2a2eba9 Record independent verification and completion of skill repair (#1498) 2026-09-08 18:13:46 -05:00