Files

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, then git apply --index build.patch.
    • sha256sum -c on the manifest: 16/16 OK, and the manifest file hashes to 3251f94d...5f185854.
    • The cached diff's patch-id 15f9c7bba807 equals that of git 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.create raise now prints REFUSED tester-thread-human, DECISIONS 0, and the human's inbox is [] 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.thread for s.thread), and message.send now calls it (:1858).
  • broker.mjs:1676 refuses when route === 'human', right after :1673 computes route. 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 checks decisions is 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.to must be a key of b.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.raise refuses 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.create and the five row 177 verbs, and says each write records tester. Accurate: thread.messages is 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).