docs(tooling): keep the read-seam rule's repaired #8845 exhibit as history and record the blind-spot measurement - #9032
Merged
os-project-manager merged 1 commit intoAug 16, 2026
Conversation
…ecord the blind-spot measurement (#9004) The "Measured and DELIBERATELY NOT added" block cited `cascadeDeleteRelations` in the present tense as a live fail-open instance. That seam was repaired by #8895, so the header taught a fixed defect as current — and a reader who went to look would find it repaired and could conclude the whole measurement was stale. Comment-only; the gate's behaviour, vocabulary and baselines are untouched. - The exhibit is kept as history with its tense made true, not deleted: it is the evidence for a decision still in force. - Every census number is left at its measured value. The block already anchors them to `origin/main` @ 8664a2c, and that anchor is checkable — the gate answers 66 read seams there and 67 today. Decrementing by hand would be arithmetic standing in for a census. - Each named exhibit was re-read individually rather than assumed to have moved together: `searchAll`, `findReferencesToMeta` and `checkGovernance` (#8906) are unchanged and still live. - Records the two-direction measurement: the gate's output is byte-identical before and after #8895, and planting a valued return in the same catch turns it red — so the seam sits in the census throughout and only the shape of the exit decides visibility. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011RB4waLuNbdruCo6X9oobm
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
This was referenced Aug 16, 2026
os-project-manager
marked this pull request as ready for review
August 16, 2026 07:21
os-project-manager
enabled auto-merge
August 16, 2026 07:21
os-project-manager
deleted the
claude/issue-9004-stale-failopen-example
branch
August 16, 2026 07:33
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.
Fixes #9004
Comment-only change to
scripts/check-durability-degradation-log-level.mjs. The gate's behaviour, vocabulary, scan roots and baselines are untouched — the diff is 53 added / 6 removed lines, every one of them a comment line.The problem
The header block "Measured and DELIBERATELY NOT added — the FALL-THROUGH / empty-accumulator criterion (#8845)" named
cascadeDeleteRelationsin the present tense, twice, as a live fail-open instance. That seam was repaired by #8895 (a751f7d4f), so the block taught a repaired defect as a current one.Both failure modes were live:
So the exhibit is kept as history, with its tense made true.
Does the measurement's conclusion survive? Yes — and #8895 strengthens it
Checked leg by leg. The conclusion ("this shape does not need a looser invention criterion; it needs a declared failure-propagation vocabulary") rests on six supporting arguments. Five are untouched by #8895. The sixth — the jump-only narrowing that "buys its number by exempting three REAL instances" — needs at least one genuine instance to stand, and still has two.
Two ways #8895 is evidence for the conclusion, both now recorded in the block:
67 read seam(s) … (7 … discriminated) (1 pass … through) (1 baselined)on both trees. Measured by ablating the repair back to its pre-ObjectQL.cascadeDeleteRelations fails OPEN: a failed dependents probe skips therestrictguard entirely, so a delete that should be refused succeeds silently #8895catch { continue }and re-running, with the ablation's diff scope proven to be the single intended hunk.isMissingTableError) rather than a hand-rolled code test. That is the "declared, checkable fact" the block asks for, applied by hand at one seam because no gate could ask for it.I went one step past the filed measurement: planting a
return []in that same catch turns the gate red, namingengine.ts:10084 (in cascadeDeleteRelations()). So the seam sits in the census throughout — reported clean while it was broken, and reported clean now that it is repaired. What decides visibility is the shape of the exit, never whether the seam is correct. Surveyed, cleared, harmful: the #6116 shape a fourth time.The number question — anchored, not decremented
No census number is changed. The block already anchors every count to
origin/main@8664a2c, and I verified that anchor is real rather than decorative: the gate answers 66 read seams at8664a2cand 67 on today'smain. The extra seam was gained after that commit, and is not from #8895 — the ablation moves nothing.Decrementing by hand would have been arithmetic standing in for a census. Re-deriving the whole census against today's tree would have swapped a reproducible number for an undated one, and re-done #8845's work inside a documentation-accuracy card. Instead the anchoring is made explicit and load-bearing, so the numbers stay checkable by anyone who runs the gate at that commit.
Each exhibit verified independently
Not assumed to have moved together with #8895:
cascadeDeleteRelations(objectql)searchAll(metadata-protocol)continuefindReferencesToMeta(metadata-protocol)returncheckGovernance(objectql lifecycle)Verification
Union re-run after the final commit, at
80fdecc9d, clean tree:pnpm check:durability-log-level— pass, including its 35-case read-seam self-test. Its output is identical to the pre-edit baseline, which is the direct proof the change is inert.pnpm check:cross-package-test-inputs— pass. Not named in my dispatch prompt; picked up by re-derivingnode scripts/pm/dispatch-gates.mjsagainst the actual changed path.node scripts/check-nul-bytes.mjs— pass, plus a control-character self-scan over the edited file, since the change discusses code shapes.skip-changeset:scripts/-only and comment-only, so nothing user-visible is released.Out of scope
collectLoggedLevelsonly recognises a logger named logger/log/console, so a catch that reports through an injected logger reads as silent to BOTH rules #8897 (pm:on-hold) names this file as its restart trigger. Its three-way is answered on that card: declined here and re-held on the same trigger, with the hold's premise re-verified (the one live injected-logger seam still invents no answer, so the misclassification remains unreachable). It is not addressed in this PR.nextCounts, losing the next sweep's growth baseline too (split from #8896) #8906 remains open. Neither is touched here.Generated by Claude Code