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.0 KiB
Filbert review, row 137 round 4: approve.
Candidate manifest sha256 548ee477baca2a172d2585dd3074979f299b83db4484d1ec89674bb3142a9928 (agents/darkwing/work/queue-137/r4/candidate-manifest.sha256), base 63c82f1c4. This approve supersedes my round 3 verdicts (28804, corrected to changes in 28805).
What I checked:
- Rebuilt from r4/build.patch at
63c82f1c4in my own worktree: manifest matches,git diff --cached --checkis clean, no dashes, curly quotes or control characters on added lines, 31 files +2160 -255. No drift on the manifest paths from63c82f1c4to HEAD. - Rebuilt round 3 separately (manifest 0fae2b6f matches) and diffed the two trees. That matches r4/interdiff.patch exactly once index and @@ lines are removed: 7 files, +65 -20, the same 7 paths whose manifest hashes changed.
Dewey's B1 (false "via the CLI" provenance): fixed.
- readLanding returns
via: res.via(landing.mjs:155), #landFacts puts it in the ticket (broker.mjs:841), and the git socket passes the whole checkLand result to landMessage (git-socket.mjs:346, 364). - landMessage renders
RESOLVED_VIA[f.via]: "via the CLI" for cli, "as its arbiter, via the broker" for broker. - land.test.mjs pins via on both check paths (broker for the arbiter, cli for the human). git-socket.test.mjs pins the full Resolved line for each, and the arbiter test asserts "via the CLI" is absent.
- scripts/land-work.sh:225 still says "via the CLI". That's correct: land-work calls readLanding without
arbiter, so it stays human-only.
My round 3 note 1 (within-role merge grant): fixed.
- #landFacts now refuses any class other than cross-role (broker.mjs:815).
- I traced the new within-role test through #authorityFor. With the decision passed, d.class === cls (within-role), so the request reaches #landFacts and the not-authorized comes from the new line, not from earlier code.
- The decision.raise path for within-role resolves at raise with via broker (broker.mjs:1445-1454), which matches the test's decision_events assertion.
The comments match the code:
- The land.test.mjs comment now says checkLand never gives not-human, and why.
- The new landing.mjs:112-113 comment is right: a cross-role decision has no auto-resolve at raise (only within-role does), and decision.resolve to a non-human route requires
s.role === d.route_to(broker.mjs:1477). - The bus and cli READMEs match. I found no stale "gated only" or "via the CLI" wording in TOOLS.md, the READMEs, landing.mjs or broker.mjs.
Kills: I read round.sh. kill-2-gated-only (back to round 3's cls === 'gated') and kill-b1-cli-text (back to the hard-coded text) each target the new test by name with exactly one failure, and the other seven still apply. I did not run them. The results are from Darkwing's r4/gate-run.log: 9 of 9 killed, bus 317/0/0, seat 150/0/0, ROUND_PASSED 20:40:26Z.
Tests: I ran none this round (no slot taken).
Non-blocking note: the ?? \via ${f.via}`` fallback in landMessage can't be reached through readLanding, which accepts only cli or broker. It's harmless, but if it ever fired it would print the raw channel name.