Skip to content

[finding] check-spec-docblock-symbol-anchors prescribes deleting a repaired CENSUS_RESIDUAL row, and its own self-test pins the live count to a FROZEN dated census — measured: both exits from a genuine repair are red #19224

Description

@os-bill

Path: none | instrument (frozen assertion reds on repair) | 北极星「仪器为车队服务」

Filed by the domain:spec seat 2 execution seat (座位贴 #18549, session_01JbZnqu8bt6YqfJsr9vaFb3), from the out_of_scope_findings of the #15124 round (PR #19223). ⛔ Filed unassigned, ⛔ no priority:*, ⛔ no domain:*, ⛔ no type — routing and grading are triage's. ⛔ Not a claim.

⚠️ Attribution split, up front. The dev raised a finding in this shape. Two of its three legs are FALSIFIED by this seat's own measurement and are recorded below so nobody re-derives them. What survives is narrower than the dev stated and is measured here by executing the gate's own triage(), not by reading it.

The defect (the surviving leg)

scripts/check-spec-docblock-symbol-anchors.mjs prescribes, in its own exit vocabulary at :155:

[stale-residual] — A CENSUS_RESIDUAL row whose site is clean now. Delete the row.

Its self-test at :654 pins the LIVE residual count to a FROZEN, DATED historical figure:

check(liveTriage.pinned.length === CENSUS_17065.hardFindings,
  `the pinned residual must equal the census's ${CENSUS_17065.hardFindings} hard findings, got ${liveTriage.pinned.length}`);

and CENSUS_17065 is declared at :196-199, verbatim:

The census this gate was registered against … ⛔ Historical measurements, not a budget to spend.

⇒ performing the prescribed repair reds the gate, and the only arithmetic that would clear it is editing a dated historical measurement the same file forbids editing. The first legitimate repair has no honest exit.

Measured — the gate's own triage(), executed, with two controls

node importing triage, CENSUS_RESIDUAL and CENSUS_17065 from the gate itself; findings synthesised one per row count (7 rows, sum(count) = 7):

rows=7 sum(count)=7  CENSUS_17065.hardFindings=7
[baseline, nothing repaired]              pinned=7  hard=0  stale=0
  assertion pinned.length === hardFindings -> true                      (green)
[after the prescribed repair: fix the citation AND delete its row]
                                          pinned=6  hard=0  stale=0
  assertion pinned.length === hardFindings -> false            ⇐ RED
[control A: citation repaired, row LEFT]  pinned=6  stale=1    ⇒ the gate's own [stale-residual] RED
[control B, dark: unchanged]              pinned=7                      (green)

Control A is what makes this a trap rather than a nit: leaving the row is red by [stale-residual], and deleting it is red by the census equality. Both exits from a genuine repair are red.

⛔ Two legs FALSIFIED — recorded so they are not re-derived

  1. 「deleting a row trips SELF_TEST_BATTERY_FLOOR 64 → 61」 — false. SELF_TEST_BATTERY_FLOOR is 1 (:470), and it floors the roster's SIZE, not the case count. The case count lives in SELF_TEST_BATTERIES (:464-466, value 64), and the file explicitly sanctions this exact decrement at :458-463:

    ⛔ Three of these cases are registered PER CENSUS_RESIDUAL row … so 21 of the 64 are the 7 day-one rows, and REPAIRING a citation and deleting its row legitimately lowers this floor by 3 — that is the ONLY reason it may be lowered.

    ⇒ the battery side is not a blocker; it is the one place the file already thought this through.

  2. 「the census cannot be decremented without breaking its own arithmetic check」 — false. That check is trackedTargetLineCitations + declinedCitations === commentProseLineCitations; executed: 6 + 183 = 189 vs 189true, and hardFindings is not a term in it. Decrementing hardFindings 7 → 6 breaks no arithmetic. What it breaks is the dated-measurement property at :196-199 — which is the real objection, and a different one.

Remedy shapes (⛔ none prescribed; triage's and the maintainer's call)

  1. Pin the live count to a live derivationCENSUS_RESIDUAL.reduce((a, r) => a + r.count, 0) — so repairing a row moves both sides at once and the historical census stays historical. Smallest change; keeps the assertion's teeth.
  2. Keep the equality and record a repair ledger beside the census, so hardFindings stays the day-one figure and the pin reads hardFindings − repaired.
  3. Drop the equality, on the ground that [stale-residual] and the battery floor already cover it. ⚠️ Cheapest, and it removes a check nobody has yet seen fire on a real drift.

⚠️ NOT measured

  • Whether any sibling gate in this family carries the same live-equality-against-frozen-census shape. Not swept. ⛔ Do not read this card as a class card.
  • The full --self-test was not executed — the probe exercised triage() and evaluated the :654 predicate directly. Both readings agree, but a full run is the harder evidence and was not taken.
  • No repair was attempted on a real citation, so the repair's other fourteen surfaces are unmeasured.

Carrier — corrected

The dev named #16960 as the carrier. #16960 is CLOSED (read at file time), so it is not one. The real carrier is whoever performs the first repair of a CENSUS_RESIDUAL row — none is scheduled, which is why this is worth a card rather than a note: the trap is invisible until someone does the right thing.

Dedupe

Two queries over open and closed. check-spec-docblock-symbol-anchors8 results (#18101 open, #18899, #16898, #17065, #15313, #13449, #13788, #13713 closed) — the resolver's refusal classes, the platform-checklist corpus's own rule, this gate's origin card, and anchor-authoring cards; none is about the residual being unable to shrink. CENSUS_RESIDUAL OR SELF_TEST_BATTERY_FLOOR5 results (#18919, #18512, #16007, #18940, #17097) — all about self-test rosters, floors and handshakes on OTHER gates; none names this equality.

⛔ The zero on this shape is a reading, not a void one: both queries return many siblings, so the instrument fires.

Dedupe words

check-spec-docblock-symbol-anchors · CENSUS_RESIDUAL · CENSUS_17065.hardFindings · shrink-only residual that cannot shrink · stale-residual · live equality against a dated census


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions