โ€บNavigation
Dashboard โ€บ Probes โ€บ Probe Hardening Loop โ€บ iter 10

iter 10 โ€” BAN is only data-driven above 4,720 bar-equivalents GROUNDED

Attack item R-4 ยท 2026-07-30 ยท harness harness/attainable_ceiling.py

The fact, and the claim being tested

Chatterjee remark (9): with no ties in Y, the maximum attainable ฮพ is (nโˆ’2)/(n+1). Iteration 2 listed this as one of two mechanisms making sub-slice readings incomparable to their parent cell โ€” without checking the magnitude at the scale the cascade actually runs. This iteration was built prepared to find the loop's own earlier claim overstated.

1. The formula is attained exactly

      n    formula   measured     |diff|
     12   0.769231   0.769231   1.11e-16
    200   0.985075   0.985075   0.00e+00
   3990   0.999248   0.999248   0.00e+00

2. My iteration-2 claim was overstated for typical cells

splittypical nceilingfloor nceiling
full39900.9992500.9412
quarter9970.9970120.7692
fullโˆ’quarter gap0.00230.1719

At the cascade's typical scale the gap is 0.0023 โ€” 1% of the floor-scale gap, and negligible against either frozen line. So the ceiling is not a general mechanism for sub-slice disagreement. Iteration 2 was right that it exists and wrong to imply it operates at the working scale. The dominant mechanism there remains the โˆšn SD scaling, which iteration 2 also measured.

3. Where it does bite โ€” and it is sharper than I predicted

I predicted a single blocked window starting at the admission floor. There are actually three regimes, because the full cell has a ceiling too:

  line   split  min cell rows  min bar-equiv
  0.50    half             10            200
  0.50 quarter             20            400      <-- PASS is never blocked
  0.95    half            118           2360
  0.95   third            177           3540
  0.95 quarter            236           4720      <-- BAN needs 4.7x FLOOR_BARS

Run through the real xi_cell_vote_stable, on a near-perfect relation so each cell reads as high as its own ceiling permits:

cell rows  quarter n  q ceiling   xi_full  stable?   forced?
       50         12     0.7692    0.9412     True   -
      100         25     0.8846    0.9703    False   YES โ€” arithmetic, not evidence
      236         59     0.9500    0.9873    False   -
      400        100     0.9703    0.9925     True   -
     1000        250     0.9880    0.9970     True   -
RegimeCell sizeWhat happens to BAN
1< 59 rows (< 1,180 bar-equiv)the full cell itself cannot reach 0.95 โ€” BAN unreachable, and no instability is flagged. The cell silently can never be BANned.
259โ€“236 rows (1,180โ€“4,720)full cell can exceed 0.95 but the quarter cannot โ†’ forced "unstable" โ†’ cell excluded from the vote โ†’ BAN cannot rest on it, by arithmetic
3โ‰ฅ 236 rows (โ‰ฅ 4,720)quarter can reach 0.95 โ†’ stability reflects the data

What this means

The declared admission threshold is FLOOR_BARS = 1000 bar-equivalents. But a BAN verdict is only data-driven above 4,720 โ€” 4.7ร— the declared threshold. Between 1,000 and 4,720, BAN is blocked by arithmetic, in two different ways depending on which side of 1,180 the cell sits.

The guard's docstring says "BAN can never rest on noisy thin-cell evidence", and it does achieve that. But for cells in regime 2 the exclusion is not evidence-quality filtering โ€” the sub-slice cannot reach the line no matter what the data shows. The stated rationale and the actual mechanism differ, and 4,720 is a threshold nobody chose: it is an emergent consequence of FLOOR_BARS=1000, the quarters construction, and the 0.95 line interacting.

The PASS line is never affected โ€” a quarter needs only 20 value rows to attain 0.50, well below the 50-row floor. This finding is specific to BAN.

Attacking my own result

Not changed

Nothing. FLOOR_BARS, the sub-slice fractions and both frozen lines are dials. The honest output is a number the operator did not previously have: the effective BAN admission threshold is 4,720 bar-equivalents, not 1,000.

Evidence: harness/attainable_ceiling_evidence.json. Reproduce: VIRTUAL_ENV="" uv run --python 3.13 --no-project --with numpy --with pandas python3 harness/attainable_ceiling.py