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.
4.7 KiB
4.7 KiB
Row 153 round 1 review (Filbert): approve
Candidate: manifest sha256 1fb0789002c7e8204a57ac2e3e4e7d3e79a7826afbeffbf7912c9acdecf60263, 6 paths, base 686fc1cb6, packet agents/rocko/work/queue-153/r1/ (in the canonical checkout, not yet committed).
I found no defect, and every test the brief lists is there. The notes below don't block.
Rebuild
- A fresh worktree at
686fc1cb6with build.patch applied. Every manifest hash matched andgit diff --checkwas clean (6 files, +197 -29). - The added lines have no dash, curly-quote or control characters. The packet manifest checks.
- No commit from
686fc1cb6to refactor HEAD touches a manifest path. projectRepolives in packages/project/src/paths.mjs, so business.mjs is untouched, as Rocko's BUILD.md says.
What I checked and found correct
- Cleanup owns only what init made.
- Each path is recorded with its inode and device only after its own exclusive create succeeds: the
.gitmkdir, each layout mkdir, and each file throughopenSync(..., 'wx'). - On failure it walks them in reverse:
- A path that is gone is skipped.
- A path whose inode or device changed refuses
project-init-cleanupand stays. - A layout directory goes with
rmdir, so one holding an unrelated file stays. - Only
.gitis removed recursively.
- Then the parents that didn't exist before init go with
rmdir, nearest first. A pre-existing empty target is never in that list, so it stays with its inode, which the pre-existing=true test asserts.
- Each path is recorded with its inode and device only after its own exclusive create succeeds: the
- The losing initializer. If the exclusive
.gitmkdir fails, nothing has been recorded, so the loser removes nothing it didn't make. Its parentrmdirs fail ENOTEMPTY against the winner's tree, and that error is ignored. - Retry. The failing-commit test fails
git commitwith exit 71 through a PATH shim, then runs init again and check passes, for both a new and a pre-existing empty target. project-no-commit.checkProjectrunsrev-parse --verify HEAD^{commit}only after the layout passes. Init calls the newcheckLayoutbefore its commit, so its own check doesn't refuse. The CLI maps a thrown ProjectError to exit 2 (cli/src/project.mjs:27), which matches the README.projectRepo. It now checks the repo against every declared project'sroot, in both directions. The business schema requiresrooton every project, so the loop can't meet a missing one. Both the project test and the business test (through a loaded document) cover a sibling root, and the project test covers a repo equal to a root and a repo containing roots.- Q2. The new writer test refuses author definition
humanwithproject-authorand checks HEAD, the file andgit statusunchanged. Rocko's mutant 07 shows Q2 fails it. - Docs. The README and TOOLS.md text matches the code.
Notes (non-blocking)
- A cleanup refusal hides the first error. When cleanup meets a replaced path,
project-init-cleanupis thrown in place of the error that started cleanup (project-gitin the test). The operator learns a path changed, but not why init failed. Passing the first error ascause, or naming it in the message, would keep it. - No test runs two initializers at once. The reading above says the loser is safe, but nothing pins it. A later change that records
.gitbefore its mkdir would remove the winner's repository. - One records repo inside another's isn't checked.
projectRepocompares a repo with code roots only, so project B'srepomay sit inside project A'srepo. The brief asks only for code roots, so this is outside the row. - Readability. In paths.mjs,
for (const project of Object.values(business.projects))shadows theprojectparameter. It's harmless, since nothing after the loop reads it. - The packet. agents/rocko/work/queue-153/r1/ is untracked in the canonical checkout. Its BUILD.md has a few run-together words ("Completed2026-10-16", "unchanged686fc1cb6", "Project22, business108, CLI212:342"). Packet only.
What I ran and what I took from receipts
I ran, as single files on the candidate with Docker disabled and TMPDIR set to scratch, all with 0 fail and 0 skipped:
| Test file | Result |
|---|---|
| project init-failure | 8/8 |
| project project | 14/14 |
| business project-repo | 2/2 |
| cli project | 3/3 |
I ran no mutants this round. Rocko's eight cover each change the brief names. By reading, not by a run: dropping the contains(repo, code) direction would fail the project test's repo = root case, since that repo contains both code roots.
From Rocko's receipts, not rerun by me (BUILD.md, sage-0472 slot):
- Mutants 01 to 08, 8 of 8 killed, sources restored.
- Packages run with
npm test, 0 failed: project 22, business 108, cli 212. - Sage's landing gate covers every scripts/test-*.sh.
I took no slot.