Repository navigation
recurring_failure_mode: a check and its subject removed in one edit, so nothing remains to object - #11304
Merged
Conversation
… subject
DESIGN section 4b obliges a row per newly discovered error class, and this one was found by being on
both ends of it: I wrote the removal, three readers reviewed it, and the assertion it deleted was noticed
only while re-making the claim somewhere else.
THE INVALID STATE, and it is the absence that makes it its own class: a change removes a field, a
declaration or an arm, and the SAME change removes the assertion that read it -- because that assertion no
longer compiles without it. Nothing false survives and nothing executable survives. The removal presents
as the removal of the SUBJECT, which is what appears in the diff and what the change is described as; the
wall leaves with it and appears nowhere as a loss. A conjunction cannot object to its own deletion.
WHY IT SURVIVES REVIEW, AND IT IS NOT INATTENTION: the question a reviewer asks about a removed field is
whether the FACT is still carried somewhere. That is the right question, and in the specimen it was asked
and correctly answered - the grounding survived, structurally, as an input to a content hash. The question
nobody asks is whether anything was ASSERTING the field. A field can be redundant as DATA and load-bearing
as a SUBJECT, and the two are answered by different questions.
RECOGNITION RULE, diff-grain and mechanical: for any change removing a field, declaration or arm, read
the DELETED lines of the same change for a predicate over the removed name. If they contain one, a wall
left with it, and the change is not complete until that claim is re-made at whatever carrier the fact
moved to.
SPECIMEN: gunbc-private#102 with public gunbc#11194. PermittedJurisdictionsEnumerated landed without the
`basis` field a private consumer constructed it with; population_is_the_clearance_roster ended with a
declaration_ref_eq over that basis, so dropping the field dropped a check while `dropping basis loses
nothing` was the stated justification. The claim was re-made WIDER than the one deleted -
a_ruling_change_changes_the_revision tests the BINDING rather than the presence of a field and, with the
existing clearance conjunct, covers both inputs to posture_revision_hash where the deleted assertion
covered one. Its red is measured, not argued.
RUNG 1, MITIGATABLE, honestly: nothing in the corpus detects it and it is silent wherever nobody re-reads.
CEILING 2, DERIVED: whether a change's deleted lines assert over a name the same change removes is
decidable from the diff alone, both halves being present in one artifact. It does not reach 3 or 4 because
the substrate does not tie an assertion to its subject, so the state stays writable and the wall is a
census rather than a construction.
TRIGGER, NAMED AS THE CAPABILITY: a diff-grain census enumerating, for every removed declaration, field or
arm, the removed expressions that referenced it, AND refusing a change where such an assertion disappears
without a replacement naming the carrier the fact moved to. Hand-authoring one census for one subject
discharges nothing.
BOUNDED AGAINST FOUR NEIGHBOURS BY READING THEIR INVALID STATES, not their names, because filing into a
row whose invalid state a receipt does not exhibit is what gunbc#11245 was refused for earlier today:
executed_conjunct_discriminates_nothing has a conjunct that EXISTS, executes and is gated on, and in its
own words `deletes cleanly: remove it and every witness stays green`. There is an execution to inspect,
a mutation that exposes it, and a fixture that retires it. Here there is no conjunct: nothing to
mutate, and no fixture can retire what does not exist.
dissolution_trigger_cites_a_mechanism_that_is_later_deleted is the exact INVERSE - the citation SURVIVES
its referent and becomes a false artifact that still reads as tracked, so something stale exists to be
found. Here both die together, nothing false is left, and that is why the recognition rule must read
the DELETED lines rather than the surviving text.
a_positive_control_certifies_the_defect_it_exists_to_catch is a control present and inverted; this one is
absent. unbacked_execution_claim is a claim whose referent never existed; this is an assertion that
existed, was true, and was removed with what it read.
NO SWEEP FOR SIBLINGS IS CLAIMED, and the boundary is declared rather than implied: one specimen, and the
recognition rule is cheap enough to apply to any field removal, but this row says nothing about the
population of such removals in the corpus.
MEASURED: gunbc compile over the row's closure rc=0, one file emitted, 96 advisory diagnostics, 0 blocking
- on a binary built from this tree and proven the right vintage first, by compiling a public file that a
pre-#10850 binary refuses (rc=0, zero unparseable refusals). Membership in this ledger is the directory, so
no roster edit accompanies this; the receipts are consumed by the existing `authored` fold.
CHECKED BEFORE FILING, because a near-duplicate face is what this ledger exists to avoid: no row in main
carries this class, and of the twenty NEW rows across eighty open PRs the two whose names mention a check
are an unreached entry body never typechecked and a precondition check downstream of its effect - a check
that exists and is misplaced, not one that is gone.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WqUFCjC1JF3yREmbwUTJKh
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.
One new
recurring_failure_moderow. No code, no other files, no roster edit — membership in this ledger is the directory, and thereceiptsare consumed by the existingauthoredfold.The class
A check and the thing it checked are removed in one edit, so nothing remains to object. A change removes a field, a declaration or an arm, and the same change removes the assertion that read it — because that assertion no longer compiles without it. No artifact survives that is false; no execution survives that can be inspected. The removal presents as the removal of the subject, which is what appears in the diff and what the change is described as. The wall leaves with it and appears nowhere as a loss.
Why it survives review, and it is not inattention. The question a reviewer asks about a removed field is whether the fact is still carried somewhere. That is the right question, and in the specimen it was asked and correctly answered — the grounding survived structurally, as an input to a content hash. The question nobody asks is whether anything was asserting the field. A field can be redundant as data and load-bearing as a subject, and the two are answered by different questions.
Recognition rule, diff-grain: for any change removing a field, declaration or arm, read the deleted lines of the same change for a predicate over the removed name. If they contain one, a wall left with it, and the change is not complete until that claim is re-made at whatever carrier the fact moved to.
Specimen
gunbc-private#102 with public #11194.
PermittedJurisdictionsEnumeratedlanded without abasisfield a private consumer constructed it with;population_is_the_clearance_rosterended with adeclaration_ref_eqover that basis, so dropping the field dropped a check while "dropping basis loses nothing" was the stated justification. Three readers asked the fact question; none asked the subject question. The loss was found while re-making the claim elsewhere, not while reviewing the removal.The claim was re-made wider than the one deleted:
a_ruling_change_changes_the_revisiontests the binding rather than a field's presence and, with the existing clearance conjunct, covers both inputs toposture_revision_hashwhere the deleted assertion covered one. Its red is measured, not argued.Rung, ceiling, trigger
Bounded against its neighbours, by reading their invalid states
Filing into a row whose invalid state a receipt does not exhibit is what #11245 was refused for earlier today, so these were read rather than recalled:
executed_conjunct_discriminates_nothingdissolution_trigger_cites_a_mechanism_that_is_later_deleteda_positive_control_certifies_the_defect_it_exists_to_catchunbacked_execution_claimNo sibling sweep is claimed — one specimen, and the row says nothing about the population of such removals in the corpus.
Verification
gunbc compileover the row's closure:rc=0,compiled: 1 files emitted, 96 advisory diagnostics, 0 blocking — on a binary built from this tree and proven the right vintage first by compiling a public file that a pre-#10850 binary refuses (rc=0, zero unparseable refusals). That control exists because staleness bit in both directions today: a stale binary refusing 82 current public files, and a current binary rejecting an older tree'sfuncform. Both surface asrc=1and neither names which side is stale.Checked before filing, since a near-duplicate face is what this ledger exists to avoid: no row in main carries this class, and of the 20 new rows across 80 open PRs the two whose names mention a check are an unreached entry body never typechecked and a precondition check downstream of its effect — a check that exists and is misplaced, not one that is gone.
🤖 Generated with Claude Code
https://claude.ai/code/session_01WqUFCjC1JF3yREmbwUTJKh