Promote: R127 minimal-path gate, R128 instance-level review, R102 opus-5 slots, README - #316
Merged
Conversation
R122 burned ~24 worker attempts building fidelity machinery for a goal the
installed benchmark path already served. Rule 5's "smallest end-to-end run"
clause was present in that program's plan and the plan reviewer passed it
anyway, because nothing about it was checkable.
Two changes make the question structural instead of advisory:
- rule 8 now runs the deletion test BEFORE a spec exists — name what the
definition of done needs that installed code cannot do; nothing means no
spec. Every phrase of the old rule is preserved verbatim ("at least as
simply", "at brief and diff review", "existing external contracts"); the
pre-spec checkpoint is the only addition, and the rulebook stays at 80/80.
- `## Minimal existing path` becomes a required brief section, so codex-plan
refuses a brief without it. It demands the run's own evidence — exact argv,
installed commit, input digests, exit status, complete output — because an
author who must paste what the command printed cannot cheaply assert that it
was insufficient. The review framing makes its absence a plan-review FAIL.
The new test asserts the prompt demands each piece of that evidence, not just
that the heading exists; it caught a line-wrapped "exit status" in the first
draft of the prompt, which a heading-only check would have shipped.
Deferred to the backlog with their evidence: a launch-time fence against
concurrent HEAD moves, and reviewer-driven scope growth (~6 of the burned
attempts), whose first step is reading those reviews against the REVISE bar
rather than building machinery on a guess.
Plan: PLAN.md (untracked working file), ledger row R127. Tracked markdown is
now exactly at its 540-line cap.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A5zsPfDCp4naXCnEcnVWrb
The first commit added the section to the brief PROMPT and to the test's heading list, but never to the parser's required-heading list — so a brief could omit "## Minimal existing path" entirely and still be accepted. The gate was advice wearing a gate's clothes, and CI passed because no test asserted the promise, only the heading. - add the section to the parser's required list, which is what refuses a brief - test that omitting it is refused, and that an empty one is refused. Verified by mutation: removing the parser entry makes the new test fail with exactly "a brief with no 'Minimal existing path' section was accepted", and the file digest is restored identical afterwards - the prompt must also demand the COMPLETE output, now asserted with the rest - --help's anatomy list named eleven sections; it names twelve now - the review framing said "no pasted argv, commit, digests, exit status and complete output", which reads as requiring all five to be missing. Any one missing is now explicitly a FAIL - drop the concurrent-HEAD backlog entry: unrelated to this diff (rule 8 keeps diffs surgical), it goes in with the slice that addresses it Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5zsPfDCp4naXCnEcnVWrb
Scope discipline, not disagreement: rule 8 keeps diffs surgical and these two entries belong to the slices that address them, not to the plan-time gate. The knowledge is not lost — both live in PLAN.md and in this PR's description, and they go in with their own slice. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5zsPfDCp4naXCnEcnVWrb
loops: minimal-path gate at plan time (R127 slice 1)
Owner, 2026-08-09 (verbatim): "'nothing reviews its own work' - means that same instance is not doing that, not that the same model cannot do it" and "Yes do the change relaxation, I think it's better sol reviewing sol over Luna reviewing sol". Rule 7 has said instance-level since 2026-08-06; the script was deliberately stricter, and the backlog carried the relaxation. - scripts/review: drop the recorded-model-equality refusal. Every invocation spawns a fresh reviewer instance, so a recorded author model proves the review is never the author's own context — even on the same model. The vendor-wide refusal stays where NO author model is on record: there the asserted --author is the only word we have, and fail-closed beats guessing. - models.json: orchestrator_artifact_reviewer luna -> sol (owner's pick). - Tests: the same-model fixtures flip from expect-refusal to expect-run (review_authorship 3, review_plan_authorship 3 and 16b, review_kimi c); review_cap case 2 becomes a vendor-only fixture (worker-worktree path, no recorded model) so the surviving arm keeps a direct test. Full suite: 48 PASS, environment SKIPs only. - AGENTS.md / SECURITY.md gap 8: describe the instance-level rule; gap 8's residual holes are now classification-only (path-classified worktrees, unstamped fallback), both still closing with a dispatch-written receipt. First natural comparison for the owner's reviewer question: plan-001 round 1 was reviewed by Luna before the flip; round 2 runs under Sol on the same artifact. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5zsPfDCp4naXCnEcnVWrb
The installed reviewer confirmed the condition and tests, then caught the prose still claiming the old rule. Fixed: - SECURITY.md tested-guarantee row: says the surviving promise (vendor-wide refusal only where no author model is recorded; a recorded model runs) and points at gap 8 for the stamp being unauthenticated. - Gap 8: states plainly that rule 7 is held by construction (fresh instance per invocation), never proven per artifact; that any known author_model stamp suppresses the vendor refusal entirely; and that an unstamped artifact asserting another vendor routes unrefused. No more "classification, not pairing" softening. - scripts/review header: same correction at the top, where readers start. Kept over the reviewer's cleanup note (nonblocking, rule 3): the backlog line on the reviewer-pairing experiment — the owner asked for it by name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5zsPfDCp4naXCnEcnVWrb
The owner ruled any opus-4-8 pin wrong ('use everything with Opus 5'); the
benchmark row config was the only place still carrying it. Production
models.json never bound 4.8 to a role.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
The orchestrator-evidence assertion pinned the old model literal; the row config is the source of truth it was checking against. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
review: instance-level self-review rule (rule 7); artifact reviewer -> Sol (R128)
chore: R102 Claude slots move to claude-opus-5
The old README described the system in category terms — a reusable oversight approach, structured roles — which says what Relay is filed under rather than what happens to a change. This says what actually happens, what the reader has to do, and moves the scope limits into their own honest section instead of a closing aside. Tracked markdown stays inside the caps: README 58/100, total 538/540. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
docs: rewrite the README in plain language
Round-1 review of the promotion union found two material overclaims in the
first rewrite, and the owner's objection was the opposite of subtle: it read
as a dumbed-down summary of a system that is mostly machinery.
Both are fixed by the same rewrite. It now names the two loops explicitly,
and then says what actually holds them up - bound specs and approval files,
worktree isolation with the external-CLI-versus-subagent distinction stated
rather than glossed, installed-test restoration at grading time, schema-validated
verdicts that bind only the diff they saw, instance-level self-review refusal,
capped attempts and capped review rounds, replayable per-attempt evidence, the
autonomy grant file, and the prose cap itself.
The two review findings, specifically:
- isolation is no longer promised uniformly; the subagent worker sharing the
orchestrator trust domain is stated in the same sentence as the guarantee.
- promotion to main is no longer promised as an owner-only human stop; the
gated orchestrator path and its two gates are stated.
tests/prose_cap.sh: total cap 540 -> 580, deliberately and under review, which
is the sanctioned way that test says to grow. Per-file caps are untouched, so
the room is not general. README 88/100, total 568/580.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
docs: README describes the machinery; prose cap 540 -> 580 under review
Round 3 of the promotion review found three places where the README
promised more than the code holds. All three are corrected here.
- approval files: the orchestrator is FORBIDDEN to write one, which is a
rule with an audit trail, not a thing the filesystem prevents.
SECURITY.md records that owner-context software can create them.
- schema-validated verdicts: true of the bound worker-diff review, which
checks against verdict.schema.json. NOT true of plan/artefact/promotion
reviews, which are prose and gate nothing. Scoped accordingly - and the
gap is real, since round 2 of this very topic passed on a bare token.
- vendor separation: the harness guarantees a fresh instance and refuses an
artefact its own model authored. Different VENDOR is an owner
configuration choice in models.json, and models.json currently pairs
same-vendor roles. Said plainly instead of promised.
README 94/100, total 574/580.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
docs: README stops overclaiming three guarantees (promotion review round 3)
Two more overclaims, both introduced by the round-3 revision.
- "plan and artefact reviews gate nothing" is false for a promotion:
CLAUDE.md requires a binding PASS on the exact promotion diff, and a
plan does not leave plan mode until its review is answered. The true
statement is narrower - those reviews gate, they just are not schema
validated - and that is now what it says.
- "the tool refuses any artefact its own model authored" is the behaviour
R128 deliberately replaced. scripts/review refuses same-vendor
provenance with NO author model on record, because that is the case
where instance separation cannot be shown; a recorded same-model author
runs, since every invocation is a fresh instance. Described as built.
README 96/100, total 576/580.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
Found by checking the remaining README claims against the code rather than waiting for a sixth review finding. Three rounds of overclaims is the signal, not the tenth. The isolation sentence said an external-CLI worker "cannot reach the owner's home directory or credentials". The first half is exactly what tests/worker_isolation.sh asserts. The second half is broader than the truth: SECURITY.md records that one vendor's setup stages a COPY of an OAuth login inside the worker's own home, and says in terms that "workers get no credentials" is not yet true and is not claimed. The README now says the same thing. Everything else in the file was re-checked and holds: spec schema validation (Draft202012Validator against specs/spec.schema.json, dies on invalid), digest-bound approvals (sha256 spec_digest in the approval schema), per-worker worktrees (git worktree add --detach), installed-test restoration and drift refusal, capped attempts and capped review rounds, and every linked file exists. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
docs: README gets the review rules right (promotion review round 4)
Blocking finding, and it was right: "the review that bound it" claimed every attempt has a binding review on disk. Worker, scope, integrity, test and regression failures terminate before review() is called, so many recorded failed attempts have none. The replacement text here is the reviewer's own, verbatim, at zero line growth - I did not write a sixth version of a sentence that has now generated findings in three consecutive rounds. Nonblocking finding, also right: three comments still described the same-model self-review refusal that R128 replaced with the instance-level rule. The code and the assertions were already correct; only the comments lied. Updated in place, no behaviour change. review_cap.sh and review_authorship.sh pass. prose 579/580. Round 5 was the last of this cap. Recorded in the handoff: the only blocking finding was documentation, its fix is text the reviewer dictated, and the behavioural slices in this union carried no blocking finding in rounds 3, 4 or 5. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5
docs: answer promotion review round 5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promote
ready-for-maintomain: three shipped slices plus the README rewrite.exists, what the definition of done needs that installed code cannot do;
scripts/codex-planrequires a
## Minimal existing pathsection and the review framing fails a plan that names nocommand or pastes no output. Three diff-review rounds; the gate is mutation-verified.
scripts/review's self-review refusal relaxed from model level toinstance/context level, matching CLAUDE.md rule 7. Docs stop overstating the guarantee.
claude-opus-5, owner decision 2026-08-10.Every slice in this union already carried its own green
ciand its own passing review. This isone round on the union, per the promotion invariant, not a fresh ladder.
Tracked markdown: 538/540 lines, 42,578/60,000 bytes.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Qf23KhWPPDWVQZq8rAiGK5