2026-07-31 ยท ← ledger ยท ← iter 2 ยท PR #686 ยท LEDGER row 0s
N_min was measuring the permutation scheme, not the datablockperm_pvalue returns (1 + cnt)/(B + 1), and the identity ordering always counts — it reproduces the observed statistic exactly. A window of nb blocks admits only nb! orderings, so identity recurs about B/nb! times and
E[p] >= (1 + B/nb!) / (B + 1)
Requiring that floor to sit at or below α derives the condition — no constant chosen anywhere:
nb! >= B / (alpha*(B+1) - 1) at B=99, alpha=0.05 -> nb! >= 24.75 -> nb >= 5
4! = 24 does not clear it, and that is not a rounding quibble. Measured on a perfect signal — |ic| = 1.000, as strong as an effect can be:
L=300 nb=2 p=0.590 undetected L=200 nb=3 p=0.240 undetected L=150 nb=4 p=0.090 undetected <- the intuitive floor lands HERE, and is blind L=120 nb=5 p=0.010 DETECTED L=100 nb=6 p=0.010 DETECTED
The handoff note from iter 2 guessed nb ≥ 4. Deriving beat guessing by exactly one block, and that block is the difference between a gate that works and one that reports zero power for a reason unrelated to power.
Sub-floor grid points are now refused before the permutation budget is spent — the honest answer is “cannot be measured here”, not a zero bought with 99 draws per window — and the artifact carries grid_points_refused_for_block_orderings and smallest_measurable_n, because an N_min from a partly-unmeasurable grid is a different claim from one fully explored.
With a NaN anywhere, obs is NaN and NaN >= NaN is False, so cnt = 0 on every draw and the p-value collapses to its floor. Measured on a genuinely independent pair:
clean p = 0.590 correctly does not fire one NaN injected p = 0.010 FIRES, and ic itself is NaN
The failure direction is toward false positives, reported beside an effect size of NaN, in an append-only ledger. run_c3_and_power masked its inputs; run_c2 and choose_block_length did not — and the harness manufactures NaNs of its own, in the Y_delta residual and in known_positive's division.
Guarded fail-closed at the single choke point every fire decision passes through. A side effect worth stating: this makes D20 surface loudly instead of silently while it waits its turn.
The adversarial audit's highest-confidence crash prediction was Code 207 AMBIGUOUS_COLUMN_NAME from the unqualified ORDER BY tiebreak in the two-alias join, plus a KeyError storm from qualified TabSeparatedWithNames headers. Measured against the real warehouse:
headers come back UNQUALIFIED symbol / close / label_fwd_3s_roundtrip_cost_bps unqualified tiebreak EXECUTES no ambiguity error
It is also semantically harmless, because the join condition forces b.first_agg_trade_id = l.first_agg_trade_id, so either resolution yields the same order. No change made. Fixing a non-defect adds risk and buries the measurement that cleared it.
Recorded prominently so nobody re-opens it. An audit finding is a claim until it reproduces — the same standard that made D12, D13, D24 and D19 land as real.
| suite | result |
|---|---|
tests/test_axis2_seal_controls.py | 44 passed, 1 skipped (9 at iter 0) |
axis2:self-test | 12/12 |
ch_concurrency_smoke_test.py — live | 9/9 |
All five blockers are closed. 27 defects found, 9 resolved, 1 retired, 17 open — none of them blocking. Next are D20/D21/D22: Y_delta applied to rows excluded from its own fit; known_positive's unrecorded fallback to the target itself; and C3 passing on one detection out of eighteen.
SEAL′ still does not fire, and now for an honest reason rather than a broken one: the 2.5 GiB ceiling is enforced (iter 2) but not yet validated — nobody has shown the worst cell survives at it. That is attention A2, and the runner refuses until a sweep artifact is committed.
A consequence worth watching: MIN_WINDOWS_FOR_POWER = 20 caps window size from above while D14's floor caps it from below. At the smaller thresholds those bounds squeeze the usable power grid hard, which may make amendment 30a's pre-registered “a whole threshold may be undecidable” concrete rather than hypothetical. It will now be visible in the artifact instead of hiding as a floored number.