Skip to content

recurring_failure_mode: a check and its subject removed in one edit, so nothing remains to object - #11304

Merged
gunbai-bot[bot] merged 1 commit into
mainfrom
rfm/check-deleted-with-its-subject
Sep 13, 2026
Merged

gunbai-bot[bot] merged 1 commit into
mainfrom
rfm/check-deleted-with-its-subject

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 13, 2026 •

Copy link
Copy Markdown
Contributor

One new recurring_failure_mode row. No code, no other files, no roster edit — membership in this ledger is the directory, and the receipts are consumed by the existing authored fold.

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. PermittedJurisdictionsEnumerated landed without a 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. 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_revision tests the binding rather than a field's presence 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, ceiling, trigger

  • Rung 1, mitigatable, honestly: nothing in the corpus detects it; it is silent wherever nobody re-reads.
  • Ceiling 2, derived: whether a change's deleted lines assert over a name that the same change removes is decidable from the diff alone — both halves are 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/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 (§4b(3)).

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:

row why this is not it
executed_conjunct_discriminates_nothing its conjunct exists, executes, is gated on — "deletes cleanly: remove it and every witness stays green". There is an execution to inspect, a mutation that exposes it, a fixture that retires it. Here there is no conjunct: nothing to mutate, and no fixture retires what does not exist.
dissolution_trigger_cites_a_mechanism_that_is_later_deleted the exact inverse — the citation survives its referent and becomes a false artifact still reading as tracked. Here both die together, nothing false is left, which is why the rule must read the deleted lines.
a_positive_control_certifies_the_defect_it_exists_to_catch a control present and inverted; this one is absent.
unbacked_execution_claim a claim whose referent never existed; this is an assertion that existed, was true, and was removed with what it read.

No sibling sweep is claimed — one specimen, and the row says nothing about the population of such removals in the corpus.

Verification

gunbc compile over 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's func form. Both surface as rc=1 and 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

… 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
@gunbai-bot gunbai-bot Bot changed the title Author the data map as typed proposal rows and resolve data_handling_profile to it recurring_failure_mode: a check and its subject removed in one edit, so nothing remains to object Sep 13, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review September 13, 2026 19:25
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 13, 2026
Merged via the queue into main with commit d6197a0 Sep 13, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the rfm/check-deleted-with-its-subject branch September 13, 2026 21:39
@briansrls
briansrls restored the rfm/check-deleted-with-its-subject branch September 13, 2026 21:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants