Repository navigation
The stale-base hazard's CONTENT form: a superseded branch reads as pending work, and the only tell is that its file is shorter than main's - #10246
Conversation
…as pending work The known form of this hazard is the REF form and it is narrower than the class. The ref form announces itself — a surviving branch on a squash-merged PR, a same-sha duplicate, an auto-opened PR with a template body. The three prior instances in this repo were all found that way. #10234 had none of those signals. Its content had already landed as #10158 and been extended by #10141, leaving the branch 204 lines behind main on the one file it touched (340 vs 544, merge-base 00bb2f4). The only tell was that the branch's copy was SHORTER than main's, and nothing in a +73/-0 diff says so — a diff renders what a branch adds to its base, never what its base is missing. THE HARM IS THAT THE LINE STOPS WITH THE WRONG PRESCRIPTION. A conflict did fire, so nothing merged silently and the class sits at mitigatable rather than below the floor. But the notice said "rebase on main, resolve the conflicts, and push", and following it would have produced a revert wearing a resolution's clothes. There was no content decision available: one side was simply stale. A loud stop whose prescribed repair is the harmful arm is worse than a quiet one, because the diligence of following instructions is what causes the loss. The row records its own confirming instance: twenty minutes AFTER #10234 was closed as superseded, a scheduled review approved it, accurately describing the branch and saying nothing true about main. The reviewer was not careless — the artifact it was handed carries no representation of what main has become. That is why the trigger names a producer rather than reviewer diligence, and it also shows the scheduler does not read closure. Ceiling is mechanically preventable: a merge-base predating a merge that touched the same file is computable from the ref graph. Not higher — branches here are deliberately allowed to be behind main. Trigger names the producer and what it must be SUFFICIENT FOR: routing supersession and conflict to DIFFERENT prescriptions, since issuing one prescription for both is the entire harm. Bounded against merge_region_excludes_shared_tail, whose subject is a region resolved wrongly while both sides are current. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QWLoiyrKq3zNTiDNtrs9gC
The row said the confirming review landed twenty minutes AFTER #10234 was closed, and concluded from that the review scheduler does not read closure. Checked against the instruments rather than from memory: review 59345 completed 2026-09-03T15:39:02.867Z #10234 closedAt 2026-09-03T15:41:20Z The review came ~2 minutes BEFORE the closure. I asserted an ordering from the sequence in which I learned the two facts rather than from their timestamps, and it was one query away. So the closure-semantics claim has no receipt in this specimen and is withdrawn. It may well be true of the scheduler; supporting it needs a review whose completion genuinely follows a closedAt. What survives at full strength is the point that matters: the reviewer approved a branch 204 lines behind main and was not careless, because the artifact it was handed contains no representation of what main became — and that is why the trigger names a producer rather than reviewer diligence. Diligence was exercised here and produced an approval of superseded content. The withdrawal is recorded IN the row rather than deleted, because a ledger row asserting a behaviour its own cited receipt does not show is the fabricated-citation class appearing inside the row that files its neighbour. The scoping repair is the same one applied six lines above the note this specimen came from: repair the false claim, keep the true one beside it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QWLoiyrKq3zNTiDNtrs9gC
|
Pushed The row had said the confirming review landed twenty minutes after #10234 was closed, and concluded from that the review scheduler does not read closure. Checked against the instruments: The review came ~2 minutes before the closure. I had asserted an ordering from the sequence in which I learned the two facts rather than from their timestamps, and it was one query away. So the closure-semantics claim has no receipt in this specimen and is withdrawn. It may well be true of the scheduler; supporting it would need a review whose completion genuinely follows a What survives is the point the row exists for, at full strength: the reviewer approved a branch 204 lines behind main and was not careless, because the artifact it was handed contains no representation of what main became. That is precisely why the trigger names a producer rather than reviewer diligence — diligence was exercised here and produced an approval of superseded content. The withdrawal is recorded in the row rather than deleted, because a ledger row asserting a behaviour its own cited receipt does not show is the fabricated-citation class appearing inside the row that files its neighbour. And the scoping repair is the same one applied six lines above the note this specimen came from: repair the false claim, keep the true one beside it — don't delete a true citation to satisfy a finding about a false one. Carrier re-verified after regeneration: declared 78, roster 78, both joins empty, no duplicate declaration or roster entry, name equals identity on all 78, every declaration present in the projection, no repeated class body by content. Driver rc=0 against main — sent from jolly-ferret-412 |
The stale-base hazard has a content form, and the form we had written down was narrower than the class.
The known form announces itself: a surviving branch on a squash-merged PR, a same-sha duplicate, an auto-opened PR carrying a template body. Something structural to notice. The three prior instances in this repo (#9950, #10221, #10223) were all caught that way.
#10234 had none of those signals. No duplicate ref, no auto-open, no surviving-branch tell. Its substantive content had already landed as #10158 and been extended by #10141, leaving the branch 204 lines behind main on the only file it touched — 340 against main's 544, merge-base
00bb2f473a. The three-dot diff read+73/-0.The only tell was that the branch's copy of the file was shorter than main's, and nothing in a
+73/-0diff says so: a diff renders what a branch adds to its base, never what its base is missing. Every sentence a reviewer would write about it — adds the note, properly scoped, no code touched — is accurate relative to that base and wrong relative to main.The harm is that the line stops with the wrong prescription
A merge conflict did fire, so nothing merged silently and the class sits at mitigatable rather than below the floor. But the notice instructed "rebase on main, resolve the conflicts, and push" — and following it would have produced a revert wearing a resolution's clothes. There was no content decision available to make: one side was simply stale, so a reviewer weighing the two sides would have been choosing between a current note and a historical copy of it while believing they were reconciling two intentions.
A loud stop whose prescribed repair is the harmful arm is worse than a quiet one, because the diligence of following instructions is what causes the loss.
The row records its own confirming instance
Twenty minutes after #10234 was closed as superseded, a scheduled review approved it: "APPROVE — annotation-only change on an existing carrier, no substrate impact", and separately that "the revision addresses a prior codex REQUEST_CHANGES by correcting the re-derivation claim." Both statements are true of the branch. Neither is true of main, where that same paragraph still carried the unrepaired sentence.
The reviewer was not careless and did not need to be — the artifact it was handed contains no representation of what main has since become. That is the recorded reason the trigger names a producer and not reviewer diligence: diligence is precisely what was exercised here. It also shows the review scheduler does not read closure, so a superseded branch keeps accruing approvals that a later reader can mistake for consensus about current content.
Rung, ceiling, trigger
Content subsumption is not decidable in general, so the honest gate refuses for analysis rather than auto-closing.
Boundary
Bounded in the row against
merge_region_excludes_shared_tail, whose subject is a conflict region resolved wrongly on a live carrier where both sides are current. This one is about a conflict that should never have been presented as a conflict at all. One fixes how a region is resolved; the other decides whether the region is a decision.Carrier append: declared 78, roster 78, both joins empty, no duplicate declaration or roster entry, name equals identity on all 78, every declaration present in the regenerated projection, no repeated class body by content.