Rule 10: a PR goes Open when the rounds stop, whoever calls the stop - #22
Merged
Merged
Conversation
Petra's decision, and it makes two clauses of rule 10 false. It said a PR "goes Open once a round comes back satisfied" and that "the flip is the human's to make, not the agent's". Neither holds: the trigger is the rounds ENDING, and a human calling enough ends them as surely as a satisfied round does. Both places said it -- the rule's headline at the top of the file and the two-signals bullet below -- which is rule 5's enumerate-the-class, run before committing rather than after. Nothing else in the tree repeats it. The substance behind the change is worth more than the wording. Measured across the two pull requests that ran five rounds each: fourteen findings about behaviour in rounds one and two, NONE in rounds three to five, which produced nineteen findings between them, every one about a claim rather than about what the code does. Those sustain themselves, because each fix to a comment is a new comment the next round finds slightly off -- and one number could not converge at all, since the run measuring it always postdated the sentence quoting it. The cause is structural. When most of a diff is commentary -- one of those two was ~305 changed lines of a workflow, nearly all comments -- the rounds review the commentary, and a reviewer told to verify every factual claim will always find something in that much prose. So the satisfied sentence is not always reachable, which is exactly why it cannot be the only way the rounds end. Two instructions follow and are written down: scope each round to what changed since the last one, and skip the round when that is comments only. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CGAGAib517Ae1kg8SCdcEt
Peeja
pushed a commit
that referenced
this pull request
Sep 22, 2026
…n main Petra's reframing settled the schedule question and it was better than my answer. I argued for keeping a nightly so an upstream release could not silently break us; her point is that the question worth asking is whether the release in THIS pull request breaks compat, and that answer goes stale on its own. A schedule on main answers a different question badly, since main is not deployed and a red there has no decision attached. compat.yml now triggers on a release/* pull request and carries no schedule. compat-refresh.yml carries the schedule and re-runs each open release PR's own compat run -- re-running rather than dispatching, because a re-run stays attached to the pull request and so puts the fresh answer where the merge decision is made. One bug caught by testing rather than reading, and the same class as the || true removed from compat-window.sh: mapfile < <(gh ...) discards the subshell's status, so an unreachable API read as "nothing to refresh" and went green. #22 merged as 4611cbc, so rule 10 now says a PR goes Open when the rounds stop whoever calls the stop, and a round is skipped when the push was comments only. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CGAGAib517Ae1kg8SCdcEt
Peeja
pushed a commit
that referenced
this pull request
Sep 22, 2026
Two findings, both a correct piece of code defended by a false premise --
the refresher's concurrency group ("it only ever runs from the default
branch": only `schedule:` is) and the age diagnosis ("the refusal whose
cause the API error never names": GitHub names it, and gh forwards the
message on the whole-run path). Neither changed behaviour; both would have
misled whoever touched the code next.
The fixing push is comments only, which is rule 10's skip condition as #22
amended it, so seven is the last round. #18 stays Open on 1691b59.
Also records what made rounds six and seven productive after five that had
stopped finding things: each was scoped to a single push rather than the
whole PR, and each push contained shell that was executed rather than read.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGAGAib517Ae1kg8SCdcEt
This was referenced Sep 23, 2026
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.
Checks a reviewer can merge without waiting for
All of them. One file,
AGENTS.md, markdown only — nothing compiles, parses or executes it. Every reference to it in the tree is a prose mention inside a comment:What it costs if that is wrong: the ignored checks still run, and a red one after merge leaves
mainred.Two clauses of rule 10 became false when Petra decided a pull request should go Open as soon as the rounds are done. It said a PR "goes Open once a round comes back satisfied" and that "the flip is the human's to make, not the agent's". The trigger is the rounds ending, and a human calling enough ends them as surely as a satisfied round does.
Both places said it — the rule's one-line form in the numbered list, and the two-signals bullet in the section below — so the enumeration ran before committing rather than after. Nothing else in the tree repeats it:
Why a satisfied round cannot be the only way they end
This is the part worth reading; the wording change follows from it.
Measured across #18 and #19, which ran five rounds each:
Fourteen findings about behaviour in the first two rounds, none in the last three — which still produced nineteen findings, every one about a claim: a comment, a count, a pull request body.
Those sustain themselves, because each fix to a comment is a new comment the next round finds slightly off. One number could not converge at all: the run that measured
plan's duration always postdated the sentence quoting it, so a single figure was the slowest sample, the range that replaced it was stale by its own next push, and only deleting the number fixed it.The cause is structural rather than anyone's carelessness.
release.yml's diff on #19 was ~305 changed lines and nearly all of it comments, so the rounds reviewed the commentary — and a reviewer briefed to verify every factual claim against the tree will always find something in that much prose.Two instructions follow, and are now written down:
Deliberately no review round on this one
By the rule it adds. This is a prose-only change to a prose file — precisely the case where the rounds have been shown not to converge — so running one would be the behaviour this pull request exists to stop. Flagging it rather than doing it quietly.
🤖 Generated with Claude Code
https://claude.ai/code/session_01CGAGAib517Ae1kg8SCdcEt
Generated by Claude Code