{"id":28333,"html_url":"https://git.mosaicstack.dev/mosaicstack/stack/issues/1603#issuecomment-28333","pull_request_url":"","issue_url":"https://git.mosaicstack.dev/mosaicstack/stack/issues/1603","user":{"id":103,"login":"filbert","login_name":"","source_id":0,"full_name":"Mosaic fleet seat filbert","email":"103+filbert@noreply.git.mosaicstack.dev","avatar_url":"https://git.mosaicstack.dev/avatars/833ed4bade42095803be133d8ab240ee","html_url":"https://git.mosaicstack.dev/filbert","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-09-04T20:14:33Z","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"filbert"},"original_author":"","original_author_id":0,"body":"## Filbert review: row 109 round 3 (#1603): approve\n\nCandidate manifest sha256 `0a62225ee6adcff0b2f581758e873fa135073d9ad900a2a835ff2bad9248ec16` (11 files). I rebuilt it in my own worktree at BASE 02fe2d9d5 with `row109.patch` from packet 875c515e9. All 11 hashes match, `git diff --check` is clean, and no manifest path has drifted from 02fe2d9d5 to HEAD. The added lines have no dashes, bidi or control characters.\n\n### What changed since round 2\n\nI applied the round 2 patch (55c6cec73) to the same base in a second worktree and diffed the two trees. Five files differ, and only in these places:\n\n- `broker.mjs`: the N1 comment now reads \"role, reader and human sessions\". The code is unchanged.\n- `state.test.mjs`: two N2 tests. One checks that a human read deep-equals the role's read, with cap 50 and total 52. The other counts the rows in every table before and after a `state` read by a role, a reader and a human session, after a revoke and two snapshots so `events` and `task_snapshots` aren't empty, and requires the counts to be unchanged.\n- `seat/tests/session.test.mjs:229` and `cli/tests/launcher.test.mjs:242`: B1 is fixed. Both now anchor the whole reply: `^echo:`, the block with `never switched` and `Open tasks: 0`, the header with this message's id and `sent`, then `hello$`. The session test matches the stored `at` exactly. The launcher test captures `sent` and checks it falls between just before the send and now.\n- `seat/tests/sandbox.test.mjs:218`: `adapter.sh` now drops lines through the `Message ...:` header, then the blank line after it. Under the round 2 patch this file fails 2 of 7 in my run, both confined-shell tests, so the fix is needed. It's a test fixture only.\n\n`broker.mjs` code, `runner.mjs`, the fixture, both READMEs and `pm.md` are byte-identical to round 2. My round 2 findings on Sage's five checks still hold.\n\n### The consumer grep\n\nI ran build.md's `grep -rIn MOSAIC_REQUEST packages scripts adapters src | grep -v node_modules | grep -v '^packages/harness/'` in the rebuilt tree. It lists exactly what build.md says: the sandbox test, the three adapters, `adapters/README.md` and `src/run-agent.sh`. The mock adapter only checks that the variable is set, and pi and claude pass the whole text as the prompt. None parses the body. Inside `packages/harness/`, the hits are the runner, the fake adapter, and `pi-session.test.mjs` and `claude-session.test.mjs`, which give the real adapters a literal request rather than going through the runner.\n\nA wider sweep of the whole repo (minus v1, agents and docs) adds only `README.md:129` and `tasks/foundation-phase2-source-facts.json`, both prose. I also grepped every package for assertions on the old reply or header shape (`echo: Message`, `, class REQUEST:`). Only `turnRequest` unit tests and the pi-session literals remain, and neither goes through a runner turn.\n\n### Note (not blocking)\n\n- **N1.** The sandbox fixture's `sed '1,/^Message .*:$/d'` looks for the end of the range from line 2. A request whose header was on line 1, with no block above it, would lose everything through the next `Message ...:` line. Every runner request now starts with the block, so this can't happen today. It would only matter if the fixture were reused for a runner path without the block.\n\n### What I ran (single files, no slot)\n\n`bus/tests/state.test.mjs` 8/8, `harness/tests/runner.test.mjs` 20/20, `seat/tests/session.test.mjs` 9/9, `seat/tests/sandbox.test.mjs` 7/7 (5/7 under the round 2 patch), `cli/tests/launcher.test.mjs` 17/17, `bus/tests/broker.test.mjs` 15/15. I didn't rerun the mutants or the full package suites, and relied on the packet receipts for those. Both worktrees are removed and no process is left in them.\n\nVerdict: **approve**.\n","assets":[],"created_at":"2026-10-13T23:52:17Z","updated_at":"2026-10-13T23:52:17Z"}