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.
1 line
5.9 KiB
JSON
1 line
5.9 KiB
JSON
{"body":"**Filbert: row 134 round 1, approve.**\n\nCandidate: manifest digest `8977d90723db6745eef85b72658129f393036d8aa7390b8d49697b0939a7ad60` (11 paths), row134.patch sha256 `843fdee91ccc220715e2e8d681fb888b71d8d8eda66c8eb1a61475d0d923aa24`. I applied the patch with `--index` to d58c9c5cd in my own worktree, and the manifest matched 11/11 with a name set equal to the cached diff (+181 -35). HEAD ed045ac84 has no change on any manifest path since d58c9c5cd, and `git apply --cached --check` is clean on HEAD.\n\nThis was a static review. I ran no tests or mutants. The suite counts (singles 133/0, node 697/0, scripts 422/0, mutants M1-M7 killed) come from Researcher's BUILD.md and Sage's message, not from a run of mine.\n\n**Brief checks**\n\n1. Mechanism A, a read verb. `organization.revision` takes no arguments. `keys(args, [])` at `packages/bus/src/broker.mjs:1235` refuses any key with `invalid-request` before the file is read. The verb goes through the same `#checkAuthority(s, \"organization.change\")` as `organization.set` (:1249-1252). The result is `{ revision }` built from the human's `limits` read (:1256), so limits, models, instances and tokens never reach the caller. `#secretCheck` still runs on it (:1273).\n2. The read spends no grant: `#consumeAuthority` runs only `if (role && !revisionRead)` (:1272). The runtime's `limits` callback ignores the actor, so the read writes no receipt.\n3. A session without the grant gets nothing: `#agent` refuses the human (`agent-required`), a reader (`read-only`), a tester (`tester-refused`) and a non-holder. `#authorityFor` refuses any role whose file doesn't list the action within-role (`decision-required`). The test at `packages/bus/tests/chief-of-staff.test.mjs:325` covers pm, coder, assistant, human, reader and tester, and asserts that the file was never read and nothing was allowed.\n4. Tests for both cases: :293 (revision alone, two calls logged with the chief's actor, no `action.allowed` before or between writes, the grant still spent once per `organization.set`, keyed args refused before any read, a writer failure passes on as `outcome-unknown`), and :414 (the real writer: read equals the file's sha256 and the human's `limits` revision, the file and `changes.jsonl` untouched, `organization.set` with it lands, a human change makes it stale with `revision-conflict`, and a second read lands the change). Mutant receipts M1-M5 cover each broker check.\n5. Out of scope held: `limits`, `limits.set`, `plugins`, `instances` and `routes` stay human-only (:325 asserts `human-required` for the chief on all four reads). `organization.set` keys and refusals are unchanged. No `roles/*.json`, migration or schema path is in the manifest.\n\n**Sage's items**\n\n1. The three owned sentences are fixed and nothing else in those files changed. `roles/chief-of-staff.md:39-40` reads \"Read the revision with `organization_revision` before each change.\" `docs/TOOLS.md:688-689` names the tool. The third owned location, `packages/business/README.md:419-421`, is fixed too. Business `chief-of-staff.test.mjs:138` reads the contract only for `main (agent|point of interaction)`, `Jason` and `never talk to the user`, and the edit touches none of these.\n2. `packages/harness/src/tools.mjs:176` describes the read accurately: 64 hex, nothing else from the file, send it as `change_organization`'s revision, re-read on `revision-conflict`, and reading spends no grant. The tool is offered under the same `organization.change` grant and takes an empty, closed object. `change_organization` at :177 now points at it. `tools.test.mjs` asserts the verb, the action, the empty schema, `additionalProperties: false`, the order before `change_organization` and the absence of \"human gave it\". `runner.test.mjs` shows the tool reaches the broker and answers only the revision (`c` x64 from a `limits` reply that also carries limits and tokens), and that an unknown key is `invalid-request`.\n3. Cross-role limitation: the `packages/bus/README.md:196` row says a role whose only classification is cross-role gets `decision-required`, and that no shipped role is cross-role. That matches `#authorityFor`: the read takes no arguments, so it can never present a decision. `organization.set` has the same limit, because `decision` isn't one of its keys either.\n4. No `roles/*.json` change and no schema change. Confirmed.\n\nHash pins: three test files hold a 64-hex string and name a manifest file. `packages/bus/tests/thread-migration.test.mjs:11` only imports `../src/broker.mjs`, and `packages/discord/tests/setspark.test.mjs:14` imports discord's own `tools.mjs`. The third, `packages/queue/tests/fixtures/queue-marked.md`, matched the grep by name only. None pins a manifest file's hash. No test reads `docs/TOOLS.md` or the bus, harness or business READMEs.\n\n**Notes (non-blocking)**\n\n- Follow-up for Sage, outside the brief's owned files: `packages/cli/README.md:880-881` still says \"until row 134 gives it a read, the revision comes from the human.\" The brief limits the owned stale sentences to three files, so Researcher couldn't fix this one in this row. It becomes false once the row lands. `packages/cli/tests/host.test.mjs:826` reads that README, but only for a unit file name, so a one-line fix needs no test change. A brief amendment or a small doc row would cover it.\n- The `packages/bus/README.md:196` refusal list names `decision-required` only for the cross-role case. A role that doesn't list `organization.change` at all (pm, coder, assistant) also gets `decision-required`, as the :325 test asserts. \"Needs `organization.change`\" implies this, but the code isn't named.\n- No test has a role holding `organization.change` cross-role. The BUILD.md and README text state the limitation and no shipped role has it, so I'm not asking for one.\n- The BUILD.md runner row says the tool \"reaches the broker as `limits`\". The broker verb is `organization.revision`; `limits` is the writer callback's verb underneath. The test is right; only the wording is loose.\n"} |