BREAKS โ DEFENDED โ CLOSED 2026-07-10 ยท attack A1 ยท 62/62 cells ร 7 pairs ยท one REAL defect (row-order-dependent near-line votes, introduced by iter 2's own fix) + three unsound v1 oracles corrected ยท clean 0/3
The estimator's invariance laws hold on the probe substrate โ including after iter 2's tie-break hardening: results don't depend on row order, are invariant to strictly increasing transforms, and degenerate inputs yield NaN. The sharpest edge is aimed at iter 2's own fix: its tie-break keys attach to row positions, so re-ordering the same rows could change verdicts.
| Class | Hits | Triage |
|---|---|---|
| F2 monotone (2x+7 only; xยณ zero hits) | 174 | UNSOUND ORACLE โ 2x+7 is not strictly monotone in float64: adding 7 wipes the resolution of tiny-magnitude columns (kyle_lambda ~1e-8), silently merging distinct values. Harness error, not probe error. |
| F1a "continuous" perm non-exactness | 22 | UNSOUND ORACLE โ the class tolerated โค0.1% ties; ANY tie engages the tie-break, so bit-exactness may only be demanded of ZERO-tie pairs. |
| F3 sign-flip crossing | 1 | INVALID MR โ ฮพ is invariant to strictly increasing transforms only; โy is decreasing. (The law does hold for |ฯ| and is tested exactly in v2.) |
| F1b joint-permutation crosses frozen line | 3 | REAL DEFECT โ see below. |
LINKUSDT@100 ยท price_impact|sell_volume sits at ฮพ = 0.5068 โ just above the frozen 0.50
breadth line. Re-ordering the same paired rows (a joint permutation โ zero information change) moved it to
0.4931 / 0.4968 / 0.4988: across the line, all three draws. Cause: iter 2's scattered tie-break keys are
computed from arange(n) โ the row's position โ so any re-ordering (or any fetch shift that
displaces rows by one) reassigns every key and jitters ฮพ by ~0.01. A breadth vote near the line was being decided
by an arbitrary implementation artifact, not by data.
+ row_identity_keys(ids): Knuth-hash of close_time_us # travels WITH the row + chatterjee_xi(x, y, tiebreak=None) # optional identity keys; default = iter-2 positional + xi_max_pair(x, y, tiebreak=None) # forwards to both directions + aggregate_worst_cell: tb = row_identity_keys(close_time_us[idx]); xi_max_pair(..., tiebreak=tb)
The key is derived from the row's stable identity (timestamp), hashed โ so it is y-independent,
time-decorrelated (iter 2's fix preserved), and invariant to row order. Applied in lockstep to both
probe files; the ยงB aggregate_worst_cell promotion path is wired.
| Check | Result |
|---|---|
| F1 joint-perm WITH identity keys โ ALL 62 cells ร 7 pairs ร 3 perms | ฮฮพ = 0.0 exactly (bit-exact) |
Broke-v1 cell recheck (LINKUSDT@100 price_impact|sell_volume) | ฮพ = 0.4982 with keys ยท max perm ฮ = 0.0 โ un-crossable by re-ordering |
| F1d default positional path, zero-tie pairs (6 pair-cells) | ฮฮพ = 0.0 exactly |
| F2 fp-exact monotone transforms (ร4, xยณ, either side) | ฮฮพ = 0.0 ยท ฮฯ = 0.0 exactly |
| F3 sign-flip law for |ฯ| | ฮ = 0.0 exactly (ฮพ sign-flip asymmetry โค 0.0062 โ documented finite-sample property, not a law) |
| F4 degenerate inputs (n<5, constant real column) | NaN in all three checks |
| Regressions after the code change | A5 substrate validity 7/7 ยท A7 null calibration 0 breaches ยท ยงB declaration self-test PASS |
| File | What |
|---|---|
| a1_metamorphic_attack.py / a1_results.json | v1 attack + raw 256 hits (preserved โ including the 3 real F1b crossings). |
| a1_metamorphic_attack_v2.py / a1_v2_results.json | Sound-oracle re-run post-defense: 0 breaches, per-cell ฮ table, broke-v1 recheck. |
| a1_stderr.log ยท a1_v2_stderr.log | Run logs under the 2 CPU / 2 GB scope. |
| regression_tests/test_a1_metamorphic.sh | Permanent regression test โ re-runs v2, asserts SURVIVES. |
Iter 2's fix removed a bias but introduced an order-dependence; iter 3 caught it by attacking the fix itself and replaced it with a strictly better mechanism (content-addressed keys: unbiased AND order-invariant, provably bit-exact under re-ordering). Honest accounting: 3 of my own v1 oracles were unsound and are corrected in v2 โ a false alarm is as damaging to a gate as a false pass. Clean rounds: 0 of 3.
evaluate_pooled (advisory ฮพ CI path) still uses the positional default โ pooled rows lack a
single identity column; needs identity plumbing if it ever becomes binding. Open thread.iter 3 ยท attack A1 ยท verdict BREAKS โ DEFENDED โ CLOSED ยท one atomic commit:
iter 3: A1 metamorphic invariants โ BREAKSโDEFENDED ยท append-only.