Files

5.8 KiB

Row 137 round 3 review (Filbert): approve

Candidate: manifest sha256 0fae2b6fa41f1cbcf2117b637a2f7a89cb2af209bf32647f0afc1612a9a34e16, 31 paths, base 63c82f1c4, packet agents/darkwing/work/queue-137/ r3/ (request comment 28798). Brief: blob 6805904555dc, including the second-lander items at lines 319-330 and 460-468.

I found no defect. Both carry items are present and tested. B1 and B2 from round 1 are unchanged from round 2. One note doesn't block.

Rebuild

  • A fresh worktree at 63c82f1c4. I applied r3/build.patch with git apply --index.
  • All 31 manifest hashes matched, and git diff --cached --check was clean (+2115 -255).
  • The added lines have no dash, curly-quote or control characters.
  • Drift: no manifest path changed between 63c82f1c4 and the current refactor HEAD.

Interdiff, round 2 to round 3

I rebuilt r2 at 7a2987cf5 too and compared each path whose manifest hash changed. Ten hashes changed. packages/harness/README.md has no change in its own diff; it differs only because row 139 changed the base. That leaves the nine content changes BUILD.md "Round 3" names: the bus README, broker.mjs, landing.mjs, land.test.mjs, the cli README, git-socket.test.mjs (a comment), launcher.test.mjs, bundle.mjs and bundle.test.mjs. I found nothing else.

The two carry items, each found

  • The REQ-LAND-1 gated refusal. checkLand and recordLand pass the class from #checkAuthority/#authorityFor into #landFacts, which refuses not-authorized for gated before it reads the landing. The REQ-LAND-1 test in land.test.mjs: the coder raises a cited merge decision, it routes gated to pm, pm approves, and the land refuses not-authorized; readLanding with arbiter: true still refuses not-human, and landHeld is false. An uncited raise routes to the human, the human approves, and it still refuses not-authorized. This is the test the brief asks for.
  • The host op accepts an arbiter-resolved merge. readLanding takes { arbiter } and accepts a resolution that is either the human's CLI answer or, with arbiter, a cross-role decision not routed to the human, resolved via: 'broker' with no human answer. #landFacts passes arbiter: true. The REQ-DEC-2 test: merge-gate's raise routes cross-role to pm, pm-run resolves it via the broker, readLanding without arbiter refuses not-human, checkLand returns the facts with by pm-run, recordLand writes class cross-role, and the decision is spent once. This is the brief's "an arbiter-resolved merge decision raised by merge-gate lands through the host op".
  • land-work stays human-only. scripts/land-work/read.mjs still calls readLanding with { into: 'refactor' } and no arbiter, so it refuses any resolution that isn't the human's.

What I checked and found correct

  • Only the arbiter can resolve via the broker. decision.resolve sends a human-routed decision to the human path and requires s.role === d.route_to for any other, else not-resolver. via is cli only for the human session. So arbitrated can only be true for the role the raise routed to.
  • merge-gate as its own arbiter. The raise routes to the human, pm's resolve is refused human-required, and the human's answer lands. The test pins it.
  • landHeld counts only a cross-role decision raised on the record's thread.
  • The bundle prompt line names land_work once the merge decision is approved, and bundle.test asserts it.

Note (non-blocking)

  1. A within-role merge grant isn't covered, and a land.test comment says it can't happen. role.mjs refuses only GATED_ONLY actions in authority.withinRole, and git.merge.protected isn't in that set after row 139, so a role file may list it within-role. No shipped role does (no file under roles/ names it). If one did, the land would still refuse: with no decision, readLanding refuses decision-not-found; with a decision, the raise auto-resolves via the broker, and readLanding refuses not-human because the class isn't cross-role. So the outcome is safe, but the comment above the checkLand codes test (land.test.mjs, "not-human can't reach checkLand: a gated decision refuses not-authorized first, and the broker resolves a cross-role one the two ways readLanding takes") misses this case, and no test pins it. A follow-up could make #landFacts refuse every class but cross-role with not-authorized, or correct the comment and add the test. Whether a within-role merge grant should load at all is a policy call for Sage.

What I ran and what I took from receipts

I ran, on the slot Sage granted (sage-0580), from 2026-10-16T19:56:41Z to 19:57:02Z, as single files on the candidate with Docker disabled and TMPDIR set to scratch. These are the untouched tests BUILD.md lists as reading changed sources but not run on 63c82f1c4, plus two touched files as a spot check. All had 0 fail and 0 skipped:

Test file Pass
cli tester 7
cli launch-limits 1
cli cli 12
harness runner 24
harness claude-gate 3
harness claude-session 8
harness mcp-server 5
harness pi-session 8
bus land 10
harness bundle 22

I ran no mutants, no suite and no gate.

From Darkwing's receipts, not rerun by me (BUILD.md "Round 3", r3/gate-run.log): a round from 19:43:51Z to 19:45:35Z ending ROUND_PASSED. bus land 10, bus hard-waits 12, bus project-runtime 3, seat landing 8, seat working 26, harness bundle 22, harness git-tools 5, harness tools 19, cli git-socket 23, cli launcher 19, cli thread-launch 8, test-land-work 86, the bus suite 316 and the seat suite 150. Seven mutants, all killed: B1, B2, the gated refusal, the arbiter path, cross-role-only, the arbiter default and landHeld cross-role. It ran no other package suite, no other scripts/test-*.sh and no Docker. Sage's landing gate covers the rest.