Files

4.3 KiB

Row 120 round 2 review (Filbert): approve

Candidate: manifest sha256 ae7515b97bb92fdde63e9d2e6fd8473700d3e0c12d9e70fff67e06129fbac1a9 (6 paths), base 66ea40580 (row 122 landed), packet agents/researcher/work/queue-120/ in f758a8e92.

Rebuild: a fresh worktree at 66ea40580 with f758a8e92's row120.patch applied. Every manifest hash matched and git diff --check was clean. The added lines have no dash, curly-quote or control characters. No commit from 66ea40580 to HEAD touches a candidate path.

F1 (round 1): fixed under ruling 28540, option (a)

  • review.request calls #checkMessaging(s, a.to) after the commit checks and before the message id, the review.requested event and #reviewMessage.
  • review.verdict calls #checkMessaging(s, r.from) after verdict-exists, at the same point before anything is recorded.
  • #consumeAuthority runs earlier in both cases, but inside the request transaction, so a refusal rolls it back. Test 1 confirms this: two identical refusals, then the decision is still usable, and the action.allowed count is unchanged.
  • #reviewMessage is untouched. The three message inserts in broker.mjs are the decision close (948), message.send (1017) and #reviewMessage (1385). The last two are now checked.
  • The new tests cover both directions after a human approval, and a coder-to-reviewer pair with no lists still works. In the mutant log, m16 and m17 each fail exactly their own test.

The round 2 changes don't overlap row 122's organization argument or limits block.

The DECISION follow-up wording (Doc-only, follow-up)

build.md's "Noted follow-up" says: "Today the assistant holds no decision authority and its crossRole is [], so it can't be the raiser or the target of one." The first half is wrong. The assistant can raise decisions; test 1 has it raise one for review.request. The follow-up still holds today, but for this reason:

  • A decision the assistant raises is gated (it routes to the human) or within its role (it routes to itself). With crossRole: [] it never routes to an arbiter. So a DECISION close reaches the assistant only from the human or its own role.
  • Suggested text: "The assistant can raise decisions, but with crossRole [] they close only by the human or within its own role, so the DECISION close message reaches it only from the human. Gate that insert if a role with messaging lists gets crossRole actions or is named an arbiter."

This is decision 137 doc-only: grep -rlF build.md packages/*/tests scripts/test-*.sh finds no file.

For the follow-up row (non-blocking): the arbiter path

The decision close also sends in the other direction: the closer sends to the raiser. Nothing stops a business file from naming the assistant as an arbiter; business.mjs:157 only requires that the role exists. I probed this on the candidate:

  1. Business with arbiters.delivery: assistant and a coder with crossRole: ["git.push.working"].
  2. The assistant's message.send to the coder: refused, message-recipient-refused.
  3. The coder raises a delivery decision. It routes to the assistant, which resolves it with a free-text note.
  4. A DECISION message from the assistant to the coder is stored, with the note in its body.

So REQ-ASSIST-2 holds today only because the arbiters are other roles; the example names pm and cto. I missed this in round 1, where I said the follow-up holds because of crossRole: [] alone.

It's the same decision-close insert that Sage ruled out of scope (28540), and reaching it needs a human edit of the business file, so I'm not blocking on it. The follow-up row should cover both directions of that insert. Alternatively, the validator could refuse a role with messaging lists as an arbiter.

What I ran and what I took from receipts

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

Test file Result
bus messaging 12/12
bus review 8/8
business role 14/14
business assistant 8/8

I also ran the arbiter probe above.

From Researcher's receipts, not rerun by me:

  • the eight package suites (business 88, bus 171, harness 84, cli 195, webui 112, tasks 92, conversation 182, seat 132) and test-task.sh 98/0 on the rebased tree;
  • 21 of 21 mutants caught with 3 controls, including m16 and m17.

I took no slot. The landing gate at the landing target is still Sage's.