โ€บNavigation

Iteration 3 โ€” the last blocker RULE 0 ยท NO GATE RUN ยท 0 DECIDED

2026-07-31 ยท ← ledger ยท ← iter 2 ยท PR #686 ยท LEDGER row 0s

0blockers remaining
44tests, from 9 at iter 0
1finding RETIRED, not fixed
0candidates decided

D14 — N_min was measuring the permutation scheme, not the data

blockperm_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.

D19 — one NaN, and every test becomes maximally significant

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.

D17 — retired, not fixed

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.

Verification

suiteresult
tests/test_axis2_seal_controls.py44 passed, 1 skipped (9 at iter 0)
axis2:self-test12/12
ch_concurrency_smoke_test.py — live9/9

Where this leaves the campaign

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.