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.
5.0 KiB
5.0 KiB
Filbert review: row 188 round 1 (#1686), approve
Request 29432. Candidate manifest 86aa549bad75ef6138b6658d5ad0156436cb86c30ed88a148390eda3539d81a3 (1 path) on base 525990ecb. The brief is docs/plans/2026-10-20_proof-test-gaps.md. This row is my N1 and N2 on row 187 (29424), P19 409 and 410.
Verdict: approve. No findings on the candidate. N1 is a script gap I found during the review. It's outside this row, which can't change the script blob. Mos ruled on it in mos-0959.
What I ran
- I built
~/filbert-scratch/r188-r1/wtatb9c1c9fe2(the refactor head), then rangit apply --index build.patch.sha256sum -con the manifest passed 1/1.- The patch-id is
c9a56b167c07: 1 file, +59/-4. scripts/stack-release.shis blob2586a2a37cd2, unchanged.
- Base drift:
git log 525990ecb..b9c1c9fe2on the test file and the script is empty. - Readers and pins: no test or script reads
stack-release.test.mjsas a file, and no 64-hex pin names it. - I took the slot after sage-1283. The /proc busy check was CLEAR at 10:59:10Z and 11:07:12Z, and TMPDIR was
~/fs188.stack-release.test.mjs: 151/151 pass, 0 fail, rc 0, from 10:59:11Z to 11:04:14Z. The counts are awk sums over the spec log.
- I ran four mutants against
^(T53|T54)(19 tests), each restored bygit checkout. Afterwards the script was blob2586a2a37cd2and the tree had only the staged test file. The fail counts include the T54 parent.- M8, the brief's (
return 0before thefithat ends the carried branch, :738): killed, 5 fail. T54 test 1 (chmod, symlink, removal) and test 2. - M9, the brief's (the
$REPOcases dropped, :775): killed, 3 fail. T54 tests 3 and 4. - M10, the brief's (
proof_file_problemskipped when PROOF_HEADER is empty, :759): killed, 5 fail. T54 test 1 x3 and test 2. - M11, mine (
realpath -e -s, so the path isn't resolved through symlinks, :774): killed, 2 fail. T54 test 4 only. So test 4 pins the symlink resolution that test 3 can't.
- M8, the brief's (
- Darkwing's run (151/151, the control, M8-M10) and Sage's gate (GATE_PASSED, sage-1283) are their receipts, not mine.
Checked against the brief
- Test 1. Three subtests, each on a fresh
mkstand-in: chmod 644, a symlink to a watched mode-600 file, and removal. Each one sets the pair withactivate B, then:- checks that
--planforactivate C1printsproof: carriedand exactly one refusal,proof-file-invalidwith the reason; - runs the real activate through
refused; - checks that the pointer stays on B with the pair.
- checks that
- Test 2. A rollback from C1 to B (B's Console takes the pair) after chmod 644. Same shape, and the plan names
to: B. - Test 3. A mode-600 file of the test's uid under the fixture
repo/proof-r188refuses in the plan and the run withis inside the repository or the copies. The fixture repo isrealpathSync'd tmp, never the checkout.t.afterremoves the directory. - Test 4.
e.root/repo-link.188is a directory symlink intorepo/proof-r188. The test asserts the given path isn't itself a symlink and isn't underrepo/. My M11 shows the realpath step is what refuses it. - Test 5. Every subtest ends in
noLeak. The swapped-in fileswap.188is a watched proof file too. - The script is unchanged, and so are
webui-service.sh,docs/TOOLS.mdandpackages/webui. P19 407 and 408 are not in this row.
Readings
I agree with both.
- "No log line." A precheck refusal has always written one
result: refusedline. Removing it would need a script change.refusedpins one refused line and no unit, pointer or store change, which is what the brief protects. - The hard link before removal or the swap. The script's view is the same: the path is gone, or it's a symlink. Without the link, inotify's
IN_IGNOREDon the freed inode would count as a read in the watch's tally. The kept link stays undere.root, whichnoLeakdoesn't walk, and isn't in any run's output.
Notes
- N1 (script gap outside this row, doesn't block; mos-0959): the "inside the repository" check compares a physical
realpathwith a logical REPO.stack-release.shsetsREPO="$(pwd)"aftercd "$(dirname "$0")/.."(:22-23), andwebui-service.sh:67sets REPO withcd ... && pwd. Both are the logical path. The proof file's path isrealpath -e, which is physical.- So when either script is invoked through a symlinked path, a file inside the repo isn't refused.
~/src/mosaic-stack-dev-test -> /mnt/storage/src/mosaic-stackis one such path. - I probed the same pattern in my scratch: through the symlink it printed MISSED, and through the real path REFUSED. The copies side uses
realpath -mand is fine. - Neither row 187's tests nor row 188's can see this, because the fixture base is
realpathSync'd. - The fix is
pwd -P, or arealpathon REPO, in both scripts, plus a test that runs the script through a symlinked checkout. Per mos-0959, Part B's run brief requires the physical path and PB3 checkspwd -P=pwd. The fix is filed after Part B.