Unclaimed files left in the canonical checkout. Inventory: canonical-cleanup-inventory.md (commit-as-evidence groups). detect-secrets scan clean on 2026-11-02: hits are sha256 pins, git object ids, test sentinels already in tracked tests and unit-file lines.
3.2 KiB
Filbert review: row 130 round 1 (#1625): approve
Candidate manifest sha256 9a5de54d85d1f956586d779aad0a0f86f1572e179886b29c9806c32326b38b8b (4 files), as named in request 28519. I rebuilt it in my own worktree at BASE c6570f142 with build.patch from packet 21e8f64ea. All 4 hashes match, and git diff --check is clean. No manifest path has drifted from c6570f142 to HEAD. The patch's added lines have no dashes, bidi or control characters.
The brief, item by item
- README. The
--testerbullet now says it works only from the tree the bus runs from and points to "One pinned copy". That section gains a paragraph covering the path-bound proofs,mosaicon PATH on a pinned host, exit 3 withhuman-requiredortester-requiredfrom the checkout, the extra line verbatim, and queue writes staying on the checkout'sscripts/mosaic. - TOOLS.md. One sentence in "Pinned stack update" says the same and links
../packages/cli/README.md#one-pinned-copy-row-85-1579. That slug matches the heading### One pinned copy (row 85, #1579). - The extra line. The entry now calls an exported
run(argv, io, deps). On aCliErrorit writesmosaic: <message>as before, then writes the hint only whenerror.codeishuman-requiredortester-required.transport.mjssetserror.codefrom the bus reply, and both codes map to exit 3. The message itself stays the bare code, so thee.message === e.codechecks inapp.mjs(lines 354 and 377) still hold. The hint has no path, and the fourth test pins that.
The entry is otherwise unchanged. A non-CliError is still rethrown from the top-level await. A clean return leaves process.exitCode alone, as before. I checked the real entry: CLAUDECODE=1 node packages/cli/src/cli.mjs inbox --business demo prints the agent refusal with no hint and exits 3, and an unknown verb exits 4. webui/src/reads.mjs imports only readNotifyConfig, and app.mjs imports only resolveDecision. Defining run has no import-time effect for either.
Acceptance
- Tests 1 and 2 run the real
humanTransportand tester path with a stubbed spawn. Each asserts exit 3 and stderr equal to the code line plus the hint. Test 3 assertstester-offgets no hint, and so does the no-code agent-check refusal. - I read
mutants.pyandmutants/mutant-m1-drop-other-tree-line.log. It removes the hint line, which occurs once, and restores the file from.origwith a sha256 check. Both positive tests fail: 189 pass, 2 fail. - Darkwing's gate log shows cli 191/0 and webui reads/views/pinned-copy 23/0,
GATE_PASSED.
Notes, no change needed
packages/cli/src/index.mjsexportsmain, notrun, so a programmatic caller gets no hint. The brief only asks for the CLI.- In the
--testerbullet, the line "talk --testertext must start with" now wraps short. It's cosmetic.
What I ran
I ran the rebuild and the checks above. In my own worktree, with DOCKER_HOST pointing at a dead socket, I ran node --test packages/cli/tests/other-tree.test.mjs: 4 of 4 passed. I also ran the two entry-point calls above. I did not rerun the mutant, the cli package suite or the webui files. Those counts are Darkwing's receipts.
Verdict: approve.