Volume-honesty invariant + distinct-evidence audit — 21 of 25 ratified deduction bands are short (Phase B) #117
Loading…
Reference in a new issue
No description provided.
Delete branch "test/volume-honesty-invariant"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase B of the curriculum-license-loop arc. Stacked on #116 — that PR merges first, then this one. Merge-commit, not squash.
The invariant
conservative_flooris a one-sided Wilson lower bound, and Wilson assumes independent trials. CORE's pipeline is deterministic — that is the founding property — so replaying an identical case is not a second trial; it is the same trial with a guaranteed outcome. Two identical cases in a practice ledger are perfectly correlated and contribute one trial's worth of evidence between them.So a ledger's
committedcount is an upper bound on its evidence, and the defensible figure is its distinct-decision count.Phase B was a precaution. It found the exposure already live.
This unit was scoped to gate a curriculum producer that does not exist yet. Running the instrument against the producers that do exist:
Note the
claimedcolumn: identical for all 25, because every band commits 720 with a perfect record. The gate sees 25 indistinguishable passes while honest floors span 0.8084–0.9909.The mechanism is a single constant —
CASES_PER_BAND = 720applied uniformly to bands whose template × vocabulary space is as small as 28 distinct instances. The producer fills the quota by cycling. That it is one constant is part of why it went unnoticed.This is a regression from an established standard, not an architectural gap
The
estimationproducer (ADR-0175) is clean: 660 committed, 660 distinct, zero repeats —CASES_PER_CLASS = 660evidently chosen just above the 657 a perfect record needs. The GSM8K practice corpus is 150/150. So the standard was already set and met before ADR-0256's producer. That is asserted as a test (test_estimation_producer_has_no_inflation), because it is the existence proof that the invariant is satisfiable.NOT repaired — deliberately
The ledger is SHA-sealed, ratified, and gating a live flag. Re-sealing it is Shay's ratification, not a test's. This PR measures it, pins it in both directions, and writes it down.
wrong = 0still holds — no band answered anything incorrectly, and no pinned lane was wrong about an answer it gave. What is not established is reliability at the volume claimed: a band that decided 28 distinct questions correctly has earned the floor for 28 (0.8084), not for 720 (0.9909). Nor does this establish that the bands cannot reach 657 distinct — most plainly can, by widening template vocabulary asen_conditional_chainalready does. The remedy looks mechanical; the authority to re-seal a ratified ledger is what is not.What landed
core/reliability_gate/evidence.py— pure measurement, imported by no serving path.volume_for_theta()derives 657 fromconservative_floorrather than restating it, so aWILSON_Zchange cannot leave a stale literal behind in a docstring or test.tests/test_volume_honesty.py— 13 tests.AUDIT_SOURCESis checked againstCAPABILITY_LEDGERS, so a licensed capability cannot ship unaudited; thecurriculum_serveentry is a declaredNonethat fails the moment its ledger exists. That is Phase C's forcing function against repeating this pattern.docs/research/distinct-evidence-audit-2026-07-25.md— full audit plus the open ruling below.The decision key is case text, deliberately: a tighter key (the normalized atom) would collapse spelling variants and report more inflation, so text-identity under-reports and every number above is a floor on the real gap.
Open ruling for you — outcome mix
Deliberately not pinned here.
ClassTallyhas no verdict axis (correct/wrongonly), so a correct UNKNOWN is indistinguishable from a correct ENTAILED and mix can only be enforced at the producer. The deduction producer already balances 240/240/240 by construction, andgold.pysays why.The open question is whether each verdict class needs its own volume. A SERVE license covers entailed, refuted and unknown alike, yet the smallest per-band verdict-class count is 120 (
en_atomic) — every class in every band is below 657. Imposing a per-class floor would retroactively fail all 25 bands on a criterion no ADR has ratified, so this audit does not do it. Recorded with numbers instead; probably wants answering once alongside the ADR-0199 per-class-vs-Wilson-floor question.[Verification]:
uv sync --lockedon canonical CPython 3.12.13; in-worktree smoke 569 passed (556 baseline + 13), deductive 285 passed. Registered in thesmokecurated suite — not left tofull, which gates nothing. Mutation-checked: doublingCASES_PER_BAND→ 2 failed; reportingcommittedasdistinct→ 4 failed; gating onclaimedinstead ofhonest→ 3 failed; tree restores to 13 passed.