backlog: close #1222 -- the fix shipped in ddee5c1d and the banner outlived it - #340
Merged
Conversation
…banner outlived it #1222's banner still parsed OPEN while its fix was on main. That is a status field outliving the code, the same shape as #1106, and it costs a dispatched lane: an incoming session reading the ledger would conclude main is still red on the recursion test and could rebuild a shipped fix. Verified rather than assumed, because a commit REFERENCING an item is not a discharge of it: ddee5c1 is an ancestor of origin/main the replacement test is present on main the item's OWN proof condition holds -- it demands the replacement still FAIL if decode_frame's `except RecursionError` is narrowed to `except ValueError`. The shipped test injects a RecursionError and asserts SandboxCodecError, so narrowing lets it escape as RecursionError and the test reddens. Closed IN PLACE, not archived: origin/main's live ledger already carries 69 items with a CLOSED banner, so archival is a separate sweep. Convention measured, not guessed. The original filed blockquote is preserved below the new banner rather than deleted -- it carries the measurement that the trigger was environment-dependent by a factor of at least six, and the explicit DO NOT FIX THIS BY RAISING THE DEPTH ruling, both of which stay useful after the close. #1152 deliberately stays OPEN and was checked in the same pass. Its open banner is a ruling, not staleness: Identity.allowed_channels is still None, the item's body requires both halves, the ASVS scorecard carrying the 8.2.2 verdict is outside this repo, and ADR 0134 Amendment A records that only the second clause of release exit criterion 12 is satisfied. A STALE BANNER AND A DELIBERATELY OPEN ONE ARE INDISTINGUISHABLE FROM THE LEDGER ALONE -- the discriminator is the item's own proof condition, not whether a commit mentioned it. Verified with the parser, never a hand scan: scripts/docs/backlog_status_check.py OK, 496 backlog items, each declaring exactly one status docs/BACKLOG.md 260, docs/archive/backlog/BACKLOG-CLOSED.md 236
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.
#1222's banner still parsed OPEN while its fix was already onmain. That is a status field outliving the code -- the same shape as#1106-- and it costs a dispatched lane: an incoming session reading the ledger would concludemainis still red on the recursion test and could rebuild a shipped fix.Verified, not assumed
A commit referencing an item is not a discharge of it, so the check was against the item's own terms:
ddee5c1dis an ancestor oforigin/mainmain#1222demands that the replacement still FAIL ifdecode_frame'sexcept RecursionErroris narrowed toexcept ValueError. The shipped test injects aRecursionErrorand assertsSandboxCodecError, so narrowing lets it escape asRecursionErrorand the test reddens.The original trigger was a real depth-100000 nesting, which made the test measure the runner rather than the contract -- environment-dependent by a factor of at least six across images. It was fixed by removing the dependence, not by tuning around it; the depth was never raised.
Closed in place, not archived
Convention measured rather than guessed:
origin/main's live ledger already carries 69 items with a closed banner, so archival is a separate sweep.The original filed blockquote is preserved below the new banner rather than deleted. It carries the environment-dependence measurement and the explicit do not fix this by raising the depth ruling, both of which stay useful after the close.
#1152was checked in the same pass and deliberately stays OPENIts open banner is a ruling, not staleness:
Identity.allowed_channelsis stillNone, the item's body requires both halves, the ASVS scorecard carrying the 8.2.2 verdict is outside this repo, and ADR 0134 Amendment A records that only the second clause of release exit criterion 12 is satisfied.Worth stating because the two look identical from the ledger: a stale banner and a deliberately open one are indistinguishable from status alone. Both parsed open, both had a fix land, and only one was wrong. The discriminator is the item's own proof condition.
Verification
Checked with the parser, never a hand scan, since the banner alphabet is machine-parsed and a hand-rolled scan is a second definition of it:
Found by the backlog-clearing session while refreshing its handoffs; verified, closed and opened by the coordinator.