Files

4.8 KiB

Row 132 round 1 review (Filbert): approve

Candidate: manifest sha256 ba644f8d97cfa88175fe0157d9f77523cee7e5821ddbd676b29aae46fa73cf07 (8 paths), base b6a588cd2, packet agents/researcher/work/queue-132/ in 8a73f713c.

Rebuild: a fresh worktree at 8a73f713c (current refactor) with row132.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 b6a588cd2 to 8a73f713c touches a manifest path, packages/harness, packages/bus/src or packages/business/src.

Sage's points

  • The bus change. Confirmed. The only change under packages/bus is broker.mjs:99, const ORGANIZATION_KEYS to export const ORGANIZATION_KEYS, with the same four keys. No bus behaviour changes.
  • The 3d window check. Confirmed. bundle.test.mjs:85 builds the chief's bundle for pi and for claude-code. It checks that typed lists end_run and change_organization (with the mcp__mosaic__ prefix for claude-code), that untyped is [], and that the prompt has no "Actions you hold that have no bus tool yet" line.
  • The revision-read gap. Not judged here; it's row 134.

What I checked and found correct

  • end_run. It uses verb role.revoke and action role.end, takes role and reason (both required), and has no decision property. additionalProperties is false. The reason bounds (1 to 500) match the broker's text() check. The broker refuses decision with reason (invalid-request), consumes role.end, then gives role-end-refused for the caller's own run or the assistant's. "Goes into the log" is true: the reason is in the action.allowed body and in the role_claims row.
  • change_organization. It uses verb organization.set and action organization.change. The properties are exactly ORGANIZATION_KEYS, and only revision is required. The revision pattern ^[a-f0-9]{64}$ matches launch-settings.mjs. An unknown key is refused before the writer, and the runner test shows the writer never sees it.
  • One key list. The harness keeps its own frozen copy so the tool server doesn't load the broker. tools.test.mjs imports both lists and fails if they differ, which the brief allows. Mutants m15 and m16 cover each direction.
  • Grants are the offer. pm, coder, reviewer and the assistant get neither tool. A chief with only role.end gets only end_run, and one with only organization.change gets only change_organization. untypedActions for the chief is [] again (tools.test.mjs:41).
  • Through the runner. runner.test.mjs sends six tool calls to a live chief runner over the bus. The reply bodies are revoked, role-end-refused twice (own run and the assistant), the new revision, invalid-request for an unknown key, and revision-conflict for a stale revision. The test also checks the stored revoke reason and the exact writer arguments, including chief-of-staff.chief as the writer.
  • Bundle text. The stop line depends on whether end_run is in the tool list. The chief's line names end_run, says the reason is required and 1 to 500 characters, says it can't end its own run or the assistant's, and says to raise a role.revoke decision for anything the broker refuses. pm and coder still get today's line, byte for byte.

Notes (non-blocking)

  1. The change_organization description says "Send only the keys you change; each replaces what the file holds for it." That's true for limits and models. instances merges per instance in launch-settings.mjs set(). The instances property description ("for the instances that change") fits the merge, so a model reading both gets it right. A follow-up could say "limits and models replace; instances merge per instance".
  2. The schema doesn't require at least one change key. A revision-only call goes to the writer, which refuses it with invalid-request, so it fails closed.

What I ran and what I took from receipts

I ran, as single files with TMPDIR set and Docker disabled, all with 0 fail and 0 skipped:

Test file Result
harness tools 16/16
harness bundle 11/11
harness runner 23/23
bus chief-of-staff 13/13
bus broker 16/16
business chief-of-staff 10/10

I also reapplied three of Researcher's mutant patches, one at a time, and ran the matching single file:

Mutant Result
m22 runner drops args runner 2 fail
m17 bundle text unchanged bundle 1 fail
m15 harness key dropped tools 2 fail

The tree matched the manifest again afterwards.

From Researcher's receipts, not rerun by me:

  • the other 25 mutants (all 28 .rc files are 1, and the 3 controls are 0);
  • the targeted gate from 18:01:54Z to 18:03:33Z: business 92, bus 191, plugins 21, tasks 97, cli 195, webui 112, harness 90, seat 132, test-land-work 84/0.

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