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.7 KiB
3.7 KiB
Filbert review: row 177 round 2 (#1675), approve
Request 29350. Candidate manifest 3251f94d9e7e2a23e3e3e3ca5afc9b802bfce694ed3e400be31db96d5f185854 on base c49de08e8 (candidate commit e097915d9). This re-reviews my round 1 changes verdict (29347).
Verdict: approve. F1, F2 and F3 are fixed. No new findings. N1, N2 and the tester talk --thread row stay follow-ups, as BUILD.md lists.
What I ran
- Built
~/filbert-scratch/r177-r2/wt:c49de08e8, thengit apply --index build.patch.sha256sum -con the manifest: 16/16 OK, and the manifest file hashes to3251f94d...5f185854.- The cached diff's patch-id
15f9c7bba807equals that ofgit diff c49de08e8 e097915d9.
- Base drift:
git log c49de08e8..refactor(c0d6bc7d5) on the 16 paths is empty. git diff 1971683e1 e097915d9: 4 files, +50/-7, the four BUILD.md names (bus README, broker.mjs, tester-threads.test.mjs, tester-writes.test.mjs). The other 12 paths are what I reviewed and ran in round 1.- Tests, one file at a time, TMPDIR
~/fs177, slot grant sage-1168 after my /proc CLEAR: bus tester-threads 11, tester-writes 8, tester 14, messaging 13. 46/46 pass, 0 fail, 0 skip, every rc 0 (03:13:16Z-03:13:23Z), awk sums over the spec logs. The webui and cli files are unchanged since round 1, when I ran them (66/66). - My round 1 probe, unchanged except that it catches the refusal: the tester-thread run's gated
task.createraise now printsREFUSED tester-thread-human,DECISIONS 0, and the human'sinboxis[]before and after. In round 1 the same probe stored a decision routed to the human. - My own M15: deleted the
if (route === 'human' && this.#testerThread(s)) fail('tester-thread-human');line (broker.mjs:1676). tester-threads exited rc 1, failing only T8a ("a tester-thread run never raises a decision to the human; a human-thread run still does"). Restored; the tree was back to the 16 staged paths. - Dewey's M1-M15, bus 447/447, webui 257/258 (1 skip), conversation 182/182, cli 396/396 and the ten scripts (340/0) are their receipts, not mine.
F1
- broker.mjs:623-627
#testerThread(s)is the round 1 inline test, unchanged in meaning (!!s.threadfors.thread), and message.send now calls it (:1858). - broker.mjs:1676 refuses when
route === 'human', right after :1673 computesroute. That covers an uncited gated raise, a hard wait, and an arbitrated raise whose arbiter is the raiser. It runs before the messaging check, the supersede withdrawal insert (:1686) and the decision insert (:1696), so a refusal stores nothing (T8a checksdecisionsis 0). - A raise routed to the chief stays allowed (T8b,
route_to 'chief', human inbox[]). That's the chief reach the README already names. - BUILD.md's table of human-target inserts: the message inserts are at :999, :1806, :1894, :2377, :2518, :2565 and :2596, and the decision insert at :1696, as listed. I checked the review.request guard (:2005,
a.tomust be a key ofb.roles) and the arbiter check (:256). I didn't re-derive every row's reachability argument; the ones I read hold. - README :614 now says the run's
decision.raiserefuses the same way and a raise routed to the chief stays allowed. Deviation 7 records that DESIGN.md:82-84 was wrong.
F2 and F3
- F2: the dispatch comment (:1300-1302) names
name.set,project.createand the five row 177 verbs, and says each write recordstester. Accurate:thread.messagesis the one read among them. - F3: tester-writes.test.mjs:3 points to tester-threads.test.mjs for the thread verbs, and :60 says "each of the six reads", matching the six-entry READS.
Pins and readers
No 64-hex pin in packages//tests or scripts/test-.sh names the four changed files, and no test reads packages/bus/README.md (the same grep as round 1, unchanged paths).