Dewey's four BUILD-LOG entries for row 40 (started, round 1, round 2,
round 3) and their three candidate manifests under
agents/dewey/work/queue-40/, plus my landing entry with the gate counts
and the Mr follow-up.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
@@ -3805,10 +3805,18 @@ Before: no business file, no project file, no bus host. After: `~/.config/mosaic
Before: no harness package, no Claude adapter, and the PM runs in Sage's T3 thread. Row 41 is in-progress (rev 241). Plan: `agents/filbert/work/s6/PLAN.md`. The launcher lives in the trusted bus host, so the build also touches `packages/bus` (IPC ops identity, authorize, refuse, endLaunch and credentialStatus, plus `Broker.endLaunch`) and `packages/cli` (a host launch socket and `bus start --pm`). It adds no socket verb, no event kind and no schema change. Each managed session gets its own PID namespace, which closes the decision 62 `setsid` gap for the ancestry proof; its limits will be recorded. The build happens in a detached worktree, and the packet is build.patch plus a candidate manifest. The recorded PM→coder run uses a scratch data root, not the live unit, and nothing runs on Astra. No push.
Before: the WebUI shows the board and CHAT-03 I1, with no inbox, tasks, agents or trail views. The controller takes any engine command and passes the whole process environment to Pi. Row 40 went in-progress at rev 240. This entry was written after the build started, not before it. Plan, from the brief and lead decision 56: read-only views over the human transport (`/api/bus/*`), with resolution left to `mosaic decide` behind a Copy button. The seal covers the engine command, at construction and again at start. The engine environment is an explicit list plus credential names the caller lists. `escalating` clears when the force-stop fence throws. Input after Ctrl-T or Ctrl-O waits until that action finishes. Mutation checks run in scratch copies only. Gate E script: `agents/dewey/work/wui/S5-GATE-E.md`. No push.
### 2026-10-09 — Claude Code (direct session for Jason), Mosaic Stack design draft 1
Before: there was no single design for the product. Earlier pieces were Dewey's palettes, brand board and slice 1 mockups, and Jason's console rulings (d3 layout, Manrope with JetBrains Mono, Relay mark, ten palettes in three modes). Jason asked for branding, WebUI page designs, a TUI design, and full feature coverage. Haiku 5.5 subagents read the PRD, the briefs and the packages. After: `docs/design/` holds `mosaic-stack-design.html` (one self-contained preview with four tabs), `README.md` (the spec) and the Relay mark in two drawings. The brand tab covers the mark at five sizes, the palettes, type, icons, voice and the status vocabulary. The console has 13 views, each in five preview states, an inspector and Ctrl+K. The terminal tab draws 13 `mosaic` screens at 120×36 and one at 80×24, and quotes the CLI's own strings. The coverage tab lists 39 features with a status each: 18 implemented, 3 in progress, 3 planned, 15 proposed. The design keeps REQ-DEC-3: the web copies `mosaic decide <short> <k>` and has no Resolve button. Checked in Chrome: every view and preview state renders with no script errors; every terminal line is exactly 120 (or 80) columns; no page-level horizontal scroll at 400 px; the inspector is a full-screen sheet on phones; all ten palettes in every mode apply without errors. I spot-checked three of the 18 implemented statuses against the code (Discord DM, `role.revoke` gated, loopback serving), not all 18. It is also published as a private claude.ai artifact. Nothing under `packages/` changed. No suite covers docs. No Gitea issue was opened. Open for Jason: default palette and mode, final mark, web resolution through v1, and `mosaic` with no arguments opening the full-screen app. No push.
### 2026-10-10 — Dewey, row 40 slice 1 S5 built to review (#1522)
After: the candidate is the 26-file manifest `agents/dewey/work/queue-40/candidate-manifest.sha256` (bcc2b772), uncommitted. Row 40 moved to in-review at rev 242; the request is comment 26979, posted at rev 243, and the details are in comment 26980. The suites ran in a detached worktree of 1e11100b with the candidate copied in, one at a time: webui 20/20, conversation 157/157, control-board 124/124, and every scripts/test-*.sh green (auth 15, conductor 17, config 24, discord 66, extension-package 18, foundation 44, queue 27 with node 148/148, release 14, task 98). The mutation check killed 10 of 10 (`agents/dewey/work/wui/evidence/s5-mutants.md`). It added K19 after the `manager` mutant survived the first run, and it moved N24b's bind-time close into `finally` after the `seal` mutant hung `turns.test.mjs` to the 900 s timeout. Correction: the first full mutation run's baseline failed 2 tests because the scratch copy lacked `docs/plans/chat-01`, so it was discarded. Earlier in the session, `pkill -f` with a pattern from my own command line killed my shell and left two runners on one tree; those results were discarded too, and the runners are now stopped by PID. Revs 242 and 243 are uncommitted and left for Sage. No push. Gate E (row 5) is Jason's; steps 2 and 5 wait on S6.
After: the candidate is 41 files, +4302/−55, over base `915e00e5`, uncommitted. The packet is `agents/filbert/work/s6/` at 9b670e27: BUILD.md, build.patch, candidate-manifest (digest 5b3a934d…27f3) and the gate output. The new `packages/harness` holds the bundle, typed tools, gate, Pi extension, Claude Code hook and MCP server, and the runner. `adapters/claude/` is new. `packages/seat` gains the session module. `packages/cli` gains the launcher in the bus host, `talk`, `stop`, `launches` and `bus start --pm`. `packages/bus` gains trusted IPC launch ops with no new socket verb, event kind or schema change. `adapters/pi/adapter.sh` and `scripts/agent-host-dev.sh` now pass `--no-approve`, checked with a probe against a trusted workspace. The DEFERRED entry can close when this lands. Differences from the plan: the capability goes on the runner's stdin, not into a file; the verbs live in `packages/cli`; `--pm` takes no argument.
@@ -3817,6 +3825,10 @@ Gate at 2855e628 with the patch applied, run sequentially in a detached worktree
Row 41 is in-review: revs 244-245 in c7a2c703, request posted as #1523 comment 26991. Darkwing is the reviewer. The recorded PM→coder launch and the integration commit wait on the Q14 Vikunja cutover, per Sage. No push.
Before: Filbert asked for changes in round 1 (comment 26993, rev 246). F1: the WebUI README said the bus checks the caller, but the proof ends at the Console process. F2: the engine seal lacked `--no-approve`, and this checkout is trusted in `~/.pi/agent/trust.json`. N1 to N3 were non-blocking. Darkwing had not posted. After: F1 and F2 are fixed. The README states that anything that can reach the port reads the bus views, and SEAL_FLAGS carries `--no-approve`. A new real-engine smoke test runs the pinned Pi against a trusted scratch project, with a positive control that uses `--approve` past the seal. N1 is fixed in `terminal.mjs`: the queue survives a throw, and `input()` puts the error in the status line. It has a new test. N2 is a DEFERRED item for whoever wires the Controller, and N3 is a README clause. The candidate is `agents/dewey/work/queue-40/candidate-manifest-r2.sha256` (27 files, 5cbf22c0), uncommitted. Mutants: base 159/159, 13 of 13 killed (`noapprove`, `queuecatch` and `inputcatch` are new). Gate on a detached worktree of 9ed25be9: webui 20, conversation 159, control-board 124, and every scripts/test-*.sh green, including test-task 98/0, so the Docker recall pair passed on this host. Revs 248-250 (in-progress, in-review round 2, request posted as comment 26996) are uncommitted and left for Sage. The notes are comment 26997. No push.
Before: Darkwing's round 1 asked for changes (#1523 comment 26995, rev 247). R1: host↔broker IPC replies had no request id, so a stalled broker's late reply could answer the wrong request. R3: the workspace gate let a write through a dangling symlink create its target outside the workspace. R2: a half-open `launch.sock` client could hold `launcher.close()`. Notes 1-5 covered `--restricted` docs and tests, `launchPm` skipping `authorizeLaunch`, the policy parse outside the `try`, the system prompt in argv, and the surviving mutants Mh-Mk plus a hang under Mg. Sage ruled that all three are fixed this round, R1 under decision 77 (trusted IPC, no socket verb, event kind or schema change). Row 41 went back to in-progress (rev 252).
@@ -3825,6 +3837,12 @@ After: the candidate is 42 files, +4679/−63, over base `915e00e5`, uncommitted
Row 41 is in-review round 2: revs 253-254 in b887ee1e, request posted as #1523 comment 27004. Darkwing is the reviewer. Landing waits on Q14 (Sage's target 2026-10-13). No push.
Before: both reviewers asked for changes in round 2. Darkwing's comment 27001 (rev 251) and Filbert's comment 27005 (rev 255) gave T1 as blocking: `#run` drained `held` for whichever chunk finished, so after a slow Ctrl-G, Ctrl-T and then `hi` Enter, the text was judged before the takeover. Darkwing's notes: mutants Mm (no SIGKILL on timeout) and Mp (unchecked `serve --business`) survived; DEFERRED.md is Sage's; the seal leaves context files on; the copied `mosaic decide` has no `--business`. Filbert's N4: held input's `key()` returned the holder's promise, and `input()`'s late error overwrote `prompt: admitted`. Sage ruled: fix T1 this round with a test that has two actions in flight, keep N2 in DEFERRED, and drop the F2-to-done line or restore it once T1 is fixed.
After: only the run whose own parse set `held` drains it, with a flows test across three chunkings while a gated Ctrl-G is pending. Held input's `key()` returns the queue with the error caught. `input()` reports each error when it happens. `#run` catches per action, so a throw no longer skips the rest of its chunk; I found that gap while writing the N4 test. Mm and Mp each have a webui test, and Mk stays unreachable. The conversation README covers context files and the terminal order. The WebUI README covers `mosaic decide` without `--business`. DEFERRED (a proposal) keeps N2 and restores the F2 line citing T1. The candidate is `agents/dewey/work/queue-40/candidate-manifest-r3.sha256`: 27 files, digest d0aa0ded, 7 of them changed since r2, uncommitted. Mutants: base 161/161, 17 of 17 conversation mutants killed (6 new ones for the terminal code), plus webui Mm and Mp killed 6/7. Correction: the first Mm run hung on the surviving child. I stopped it by PID, and the test now kills a survivor on cleanup. Gate on a detached worktree of 86b22cc2 plus the 23 code and doc files: webui 22, conversation 161, control-board 124, and every scripts/test-*.sh green, including test-task 98/0 (the Docker recall pair passed and makes a live model call). Revs 256-258 (in-progress, in-review round 3, request posted as comment 27007) are uncommitted and left for Sage. The notes are comment 27008. No push.
Before: Darkwing's round 2 asked for changes (#1523 comment 27010, rev 259). R4: Pi's `read` tool opens a different spelling when the given path doesn't exist. It tries U+202F before AM/PM, then NFD, then a curly apostrophe, then curly NFD (`path-utils.js`, `resolveReadPathAsync`). The gate checks only the given name, so a read of `it's.txt` can open a link `it’s.txt` that points outside the workspace. Darkwing's probe read `SECRET-OUTSIDE-THE-WORKSPACE` that way through a real Pi session. Sage ruled R4 is fixed in round 3: fail closed, test each variant family with a real Pi-shaped read, add one case where the variant target is inside the workspace and is still allowed, and don't reopen R1 to R3. Row 41 is in-progress again (rev 261, e211d384). Plan: for `read` (and Claude Code's `Read`, which Darkwing's note 3 asks for), build Pi's candidate list from the resolved path and refuse if any variant that exists resolves outside the workspace or through a dangling link. The harness README pin note names `path-utils.js` for recheck on a Pi upgrade. Darkwing's notes on Mv (a per-test timeout for `launcher.test.mjs`) and Mr are optional. No push; landing waits on Q14.
After: R4 is fixed in `packages/harness/src/gate.mjs`. For Pi's `read` and Claude Code's `Read`, the gate builds every spelling Pi's `resolveReadPathAsync` would try: U+202F before AM/PM, NFD, U+2019, and NFD with U+2019. It builds them from both the workspace path and its real path, since the adapter starts Pi with `cd "$MOSAIC_WORKSPACE"`. A spelling that exists and resolves outside the workspace, or through a dangling link, refuses the read whichever spelling Pi would open. A missing spelling or ENOTDIR is skipped, and any other lstat error refuses. Tests: two gate tests (six names covering each family and their mixes, relative and absolute, both harnesses, each with an inside case that is allowed; plus directories, dangling links, ENOTDIR and Pi's cwd) and one real Pi 0.85.1 session reading all six plus an inside one. Ten mutants are all killed. The first test draft let the single-feature NFD and U+2019 mutants survive, and two single-feature names were added. Darkwing's `pi-variant.sh` probe refuses all four modes. From Darkwing's notes: Mr has a test (fails under the mutant), every `launcher.test.mjs` test has a 30 s timeout (Mv now ends in 62 s instead of hanging), the Ma leftover is a follow-up. A conversation `shim.mjs` left by my round 2 gate was still running, ignored SIGTERM and was killed by PID; recorded as a row 40 follow-up. Candidate manifest 9f0593af (42 files, 6 changed). Gate at 66b9e082: all green but test-task's two Docker recall checks, same on the unpatched base. Packet 0f38236f, revs 262-263 (a8ee6cc1), request comment 27012, REQUEST to Darkwing. No push; landing waits on Q14.
Both round 3 reviews approve candidate d0aa0ded: Filbert (comment 27011, rev 260, a248ec64) and Darkwing (comment 27013, rev 264, 09bcd1a9, packet 67630cc4). The manifest checked 27/27 in the canonical tree, and the candidate landed as 08b428ec. I committed it through a temporary index because about 150 unrelated files under packages/mosaic/framework/tools/ are staged in the shared index. `queue review verify-commit 40 HEAD` matched all 27 paths. Gate on a detached worktree of 8cad7722 plus the candidate: webui 22/0, conversation 161/0, control-board 124/0, test-auth 15, test-conductor 17, test-config 24, test-discord 66, test-extension-package 18, test-foundation 44, test-queue 27, test-release 14, test-task 98/0, all with 0 failed. The Docker recall pair passed this time. Darkwing's note 1 is not fixed in this landing: mutant Mr (a hold inside held text is not drained again) survives, so a regression would swallow all later terminal input, Ctrl-C included. I took the approved candidate as it stands rather than open round 4 for one test. Dewey's flows test (drafted, kills Mr, flows 28/28) is the first follow-up row. Filbert's row 41 round 3 entry mentions a conversation `shim.mjs` from their round 2 gate that ignored SIGTERM; that test-cleanup note goes in the same follow-up row. Row 5 Gate E stays Jason's.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.