Files

3.4 KiB

Row 133 round 1 review (Filbert): approve

Candidate: manifest sha256 edb43aed618ef11af55effeb161060c398c300ad0c3dd6ae90c22d7552f4ddd4 (6 paths), base e6e5b41bf, packet agents/dewey/work/queue-133/r1/ in ebbbf62da.

Rebuild: a fresh worktree at ebbbf62da (current refactor) with build.patch applied. Every manifest hash matched and git diff --check was clean. The added lines have no dash, curly-quote or control characters. The packet manifest checks. No commit from e6e5b41bf to ebbbf62da touches a manifest path.

What I checked and found correct

  • #checkMessaging refactor. For a role sender, name(from) is the instance's definition, as sender was before. For the human or a tester, there's still no outbound list. #sender(s) passes s.role for an agent. So message.send, review.request and review.verdict check the same pairs as before, and messaging.test.mjs passes unedited.
  • Raise check. It runs once the route is final, so a cross-role raise whose arbiter is the raiser is checked with the human as sender. It runs before the supersede withdrawal and every insert, and the request transaction rolls back the authority consumption. Within-role raises are exempt, and they close inside the same call.
  • Who closes. I read the close path. A role-routed decision is resolved only by s.role === d.route_to, and a human-routed one only by the human, so the raise check names the real sender of the close message in both cases. The one other closer is the human withdrawing an arbiter-routed decision. BUILD.md names it, the close comment names it, and Sage made it a follow-up (sage-0341).
  • Validator. checkRoles resolves every instance's definition first, so definitions[definition] always exists. The refusal names the kind, instance and definition. At ebbbf62da, roles/assistant.json is the only shipped role file that declares messaging, so pm, cto and chief can still be arbiters.
  • Open decisions at upgrade. The close insert stays unchecked, so a decision raised before this lands can still be closed.
  • Tests against the brief. Each kind is refused, including an instance name that differs from the definition. The shipped example and an arbiter without lists are accepted. Cross-role and gated refusals store nothing and log the code. The warden and scribe raisers make a reversed check fail in both directions. The assistant's within-role and gated raises still work.
  • Mutants. The table covers the brief's four, plus the route code.
  • Row 120 correction. BUILD.md quotes my 28548 replacement text exactly.

Notes (non-blocking)

  • Rows 123 and 121 also touch broker.mjs and business.mjs. This candidate sits on e6e5b41bf without them. Per the brief, whichever lands second rebases and reruns its gate.

What I ran and what I took from receipts

I ran, as single files with TMPDIR set and Docker disabled:

Test file Result
bus decision-route 5/5
bus messaging 12/12
bus review 8/8
bus decision-close 8/8
bus decisions 7/7
bus human 4/4
bus broker 16/16
business assistant 10/10
business business 15/15
business role 14/14
business chief-of-staff 10/10

From Dewey's receipts, not rerun by me:

  • the targeted gate in gate-run.log: business 94, bus 176, tasks 92, webui 112, cli 195;
  • controls 2/2 and 5 of 5 mutants killed in MUTANTS.md.

I took no slot. Sage's full gate at the landing target is still part of the row's gate.