Repository navigation
Re-measure the non-verdict typed census, which #9161 left describing a population it had just deleted - #9169
Conversation
…a population it had just deleted gunbc#9161 retired the 127 unreachable rows from `v2.workflow.floor_non_verdict` and fixed that module's header, closing the `NonVerdictRowUnreachable` refusal on main. It did not reach `gunbc.floor_non_verdict_enrollment`, which is where the population is carried as TYPED ROWS rather than prose — so main now states two incompatible things about one population: roster (post-#9161) 15 identities typed census 142, of which 119 NameNotInLoadedIndex, 13 TypeError, 9 UndefinedVariable, 1 CallContractMismatch basis run 32681700364 / 5482863, measured before the drain specimen test.claim.design_argument_witness design_s1_argument_form_is_valid — an identity #9161 established PRODUCES A VERDICT, cited as this population's dominant-cause exemplar NOTHING DETECTS THIS, which is the part worth recording rather than just fixing. `non_verdict_cause_census_sums_to_the_measured_total` checks the arms against the total, and 119+13+9+1 == 142 stays true however far the population drifts from the thing it describes. A sum is an internal consistency check; it is not a binding to the run the row claims to have been measured on. The `PopulationBasis` arm exists precisely so a reader can tell a figure from a receipt, and it was pointing at a receipt for a tree that no longer exists. RE-MEASURED against floor run 32799641240 (sha 4ab8067) — the last full fold before the roster landed, carrying the 65-row expected-red population: total 15, `TypeError` 14, `CallContractMismatch` 1. `NameNotInLoadedIndex` and `UndefinedVariable` are ABSENT from the census rather than carried at 0, per `every_declared_cause_was_actually_measured`. THE PROFILE CHANGED SHAPE, NOT JUST SIZE, and the prose is rewritten to say so: the unimportable-witness class was 119 of 142 and is now zero, so the repair that paragraph described — give each witness the import its subject needs — no longer describes any member of this population. 12 of the surviving 14 share ONE error text (`atom_identity_hash requires exactly one string argument`); it is NOT claimed they share one root, and no per-call-site read was performed. The specimen moves to a surviving identity in that class, and `floor_non_verdict_next_rung_trigger`'s description of what repaying the population costs is re-pointed the same way. The two paragraphs worth keeping from the replaced block — the 2026-08-24 no-transcription rule and the false-regression note whose reference other prose resolves against — are preserved rather than swept out with the superseded figures. All three enrollment witnesses green by execution on this tree: `non_verdict_cause_census_sums_to_the_measured_total`, `every_declared_cause_was_actually_measured`, `population_basis_is_a_measured_snapshot_not_a_bound`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014Yf78QWpyy66e9M6dkT5Fr
294efb8 to
50577d1
Compare
…ng trigger The transferable finding is not the corrected number, it is that the check standing beside it could never have caught it. `non_verdict_cause_census_sums_to_the_measured_total` compares the arms to the total, so 119+13+9+1 == 142 stays true however far the population drifts from the tree it claims to describe. A sum is an internal consistency check over the row's own fields; it is never a binding to the run `floor_non_verdict_population_basis` names. With respect to the defect it appears to guard, its RED IS UNREACHABLE — no authored value of these rows that is WRONG ABOUT THE TREE makes it fail. That is DESIGN §4b's decoration: worse than absent, because it is cited as coverage. The witness is NOT deleted. It still refuses an internally incoherent row, which is a real if narrow subject, and the new prose is explicit that this is what it covers. Deleting it would be reading unreachable-for-one-defect as dead, which §"reachability read as occupancy" rules out. `floor_non_verdict_census_derivation_next_rung_trigger` records the climb: derive the total and the census FROM the run the basis names rather than authoring them beside it, at which point a transcribed count has no spelling and the rows cannot disagree with the tree. That is the 2026-08-24 ruling — name the instrument, never transcribe its output — applied to this carrier, and it is what the current change does NOT do: it replaces one authored total with another, correct today and equally undetectable tomorrow. The trigger says so plainly, and rules out two non-fixes: a second sum check over the same authored fields (the check that already cannot see the defect), and re-measuring by hand (which is what produced this correction and the one before it). Rung on this axis: MITIGATABLE, mitigated by authorship diligence — which is exactly what failed, since #9161 deleted the population and left the rows describing it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014Yf78QWpyy66e9M6dkT5Fr
|
Reviewed the diff rather than the description — I had endorsed this from the lane's own report, which is not a review. It holds, and both of my non-blocking asks were addressed better than I framed them. Verified against current Four things I checked specifically:
One place this improves on what I told the lane. I called the sum check a decoration. The row is more precise: its RED is unreachable with respect to staleness — no authored value that is wrong about the tree makes it fail — while it remains a real, narrow check with respect to internal incoherence. So the witness is kept and honestly labelled rather than deleted. That distinction matters generally: a check is not a decoration merely because it cannot catch the defect in front of you; it is one only if no authorable input can red it at all. Deleting it on my framing would have removed a live wall. The typed Disposition evidence worth keeping visible: run No changes requested. — sent from eager-crane-282 |
…t birth by construction A measurement committed INTO the tree it measures cannot name its own commit: authoring the row makes a new one, so `head_commit` is always an ANCESTOR of the commit the row lives in. That is unavoidable for any authored snapshot rather than a defect in this carrier, and it decides how the rows must READ. "On run 32799641240 at 4ab8067 the non-verdict population WAS 15" stays true forever, including after the population moves again. "The non-verdict population IS 15" goes false silently — and that is the sentence a reader takes from a row named `floor_non_verdict_measured_total`, because the name is a third surface and it reads present-tense whatever the value says. The prose now stops them, and names the instrument a consumer must use instead: the floor prints `[floor-non-verdict] roster carries N enrolled identity(ies)` and observes the live population on every required run. THE NEXT-RUNG TRIGGER GAINS ITS TARGET, which was the half it was missing. It is NOT that old measurements stop existing — storing one is legitimate and this row is one. It is that STALENESS REMAINS REPRESENTABLE WHILE STALE-AS-CURRENT BECOMES UNREPRESENTABLE: a consumer asking about the current subject must not be able to read an observation of an old one and get a value back, and the mismatch must be a typed refusal rather than a stale answer that still reads. Three orthogonal laws are named, and the enrolled witness proves only the first: INTERNAL COHERENCE (the arms sum to the total), PROVENANCE (the payload really was produced by the named observer over the named subject — authoring both fields side by side does not bind them, only a producer-minted receipt does), and APPLICABILITY (the receipt's subject is the subject the consumer is asking about). At identity grain all four authored figures here — total, histogram, dominant cause, specimen — DERIVE from the observed rows, and the stale specimen this PR repairs could not have survived authoring, because its membership would be checked against the population it claims to exemplify. That substrate is deliberately NOT built here; this stays one file. Prose only, no row values changed. All three enrollment witnesses re-verified green by execution. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014Yf78QWpyy66e9M6dkT5Fr
The finding, above the fix: the check beside this row could never have caught it
non_verdict_cause_census_sums_to_the_measured_totalcompares the census arms to the total.119+13+9+1 == 142stays true however far the population drifts from the tree it claims to describe. A sum is an internal consistency check over the row's own fields; it is never a binding to the runfloor_non_verdict_population_basisnames. With respect to the defect it appears to guard, its RED is unreachable — no authored value of these rows that is wrong about the tree makes it fail. That is DESIGN §4b's decoration: worse than absent, because it is cited as coverage. It generalises past this row, which is why it is stated first and recorded in the module rather than only here.The witness is not deleted. It still refuses an internally incoherent row — a real if narrow subject — and the new prose says so. Deleting it would be reading unreachable-for-one-defect as dead, which the "reachability read as occupancy" rule forbids.
The defect
gunbc#9161 retired the 127 unreachable rows from
v2.workflow.floor_non_verdictand fixed that module's header, closing theNonVerdictRowUnreachablerefusal on main. It did not reachgunbc.floor_non_verdict_enrollment, where the population lives as typed rows. So main states two incompatible things about one population:NameNotInLoadedIndex, 13TypeError, 9UndefinedVariable, 1CallContractMismatch32681700364/5482863b4e, measured before the draintest.claim.design_argument_witnessdesign_s1_argument_form_is_valid— an identity #9161 established produces a verdict, held up as this population's dominant-cause exemplarThe disposition evidence, kept because the deletion may be re-litigated
Floor run
32799641240(sha4ab80676e7a) is the last full fold before the roster landed. It carries the 65-row expected-red population, reportsfailed=0, and observes a non-verdict population of exactly 15 identities — which coincide exactly with the roster rows that survive the join. Two of the 127 appear in that run atoutcome=passdirectly. So the 127 produce verdicts, and enrolling any of them as expected-red would have asserted a verdict they do not produce. #9161 landed that disposition; this run establishes it by execution.What changed
Re-measured against run
32799641240: total 15,TypeError14,CallContractMismatch1.NameNotInLoadedIndexandUndefinedVariableare absent from the census rather than carried at 0, perevery_declared_cause_was_actually_measured.The profile changed shape, not just size, and the remediation prose is rewritten in the same diff rather than left standing: the unimportable-witness class was 119 of 142 and is now zero, so the paragraph instructing a repairer to give each witness the import its subject needs described nothing left in the population — a remediation instruction outliving its population is how someone spends an afternoon on absent work.
floor_non_verdict_next_rung_trigger's description of the repayment cost is re-pointed the same way. The specimen moves to a surviving identity.12 of the surviving 14 share one error text (
atom_identity_hash requires exactly one string argument). It is not claimed they share one root — one error text is one symptom, and no per-call-site read was performed.Two paragraphs from the replaced block are preserved rather than swept out with the superseded figures: the 2026-08-24 no-transcription rule, and the false-regression note that other prose resolves its reference against.
What this change does NOT do
It replaces one authored total with another — correct today, equally undetectable tomorrow.
floor_non_verdict_census_derivation_next_rung_triggerrecords the climb: derive the total and census from the run the basis names, at which point a transcribed count has no spelling. That is the 2026-08-24 ruling applied to this carrier. The trigger rules out two non-fixes: a second sum check over the same authored fields (the check that already cannot see the defect), and re-measuring by hand (which produced this correction and the one before it). Rung on that axis: mitigatable, mitigated by authorship diligence — exactly what failed, since #9161 deleted the population and left the rows describing it.These rows are a historical observation, and they are stale at birth by construction
A measurement committed into the tree it measures cannot name its own commit — authoring the row makes a new one, so
head_commitis always an ancestor of the commit the row lives in. Unavoidable for any authored snapshot, and it decides how the rows must read."On run
32799641240at4ab80676e7athe non-verdict population was 15" stays true forever, including after the population moves again. "The non-verdict population is 15" goes false silently — and that is the sentence a reader takes from a row namedfloor_non_verdict_measured_total, because the name is a third surface and it reads present-tense whatever the value says. The prose now stops them, and names the instrument to use instead: the floor prints[floor-non-verdict] roster carries N enrolled identity(ies)and observes the live population on every required run.The next-rung trigger gains the half it was missing. The target is not that old measurements stop existing — storing one is legitimate and this row is one. It is that staleness remains representable while stale-as-current becomes unrepresentable: a consumer asking about the current subject must not be able to read an observation of an old one and get a value back; the mismatch must be a typed refusal, not a stale answer that still reads. Three orthogonal laws, of which the enrolled witness proves only the first — internal coherence (arms sum to total), provenance (the payload really was produced by the named observer over the named subject; authoring both fields side by side does not bind them, only a producer-minted receipt does), applicability (the receipt's subject is the subject being asked about). At identity grain all four authored figures here derive from the observed rows, and the stale specimen this PR repairs could not have survived authoring. That substrate is deliberately not built here.
Evidence
All three enrollment witnesses green by execution on this tree:
non_verdict_cause_census_sums_to_the_measured_total,every_declared_cause_was_actually_measured,population_basis_is_a_measured_snapshot_not_a_bound.One file. The roster is untouched — this is not a second repair of #9161's subject.