โ€บNavigation
Dashboard โ€บ Rotation-Orthogonal-Probe Campaign โ€บ iter 3

iter 3 โ€” A1: metamorphic invariants (the loop attacks its own fix)

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

Claim under attack

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.

ATTACK v1 โ€” 256 raw hits, then honest triage

ClassHitsTriage
F2 monotone (2x+7 only; xยณ zero hits)174UNSOUND 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-exactness22UNSOUND 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 crossing1INVALID 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 line3REAL DEFECT โ€” see below.

The real defect: near-line votes decided by row order

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.

DEFENSE โ€” content-addressed tie-break (mechanism only, bands untouched)

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

ATTACK v2 (sound oracles) โ€” proof the defense closes the gap

CheckResult
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 changeA5 substrate validity 7/7 ยท A7 null calibration 0 breaches ยท ยงB declaration self-test PASS

Evidence (every claim above cites these)

FileWhat
a1_metamorphic_attack.py / a1_results.jsonv1 attack + raw 256 hits (preserved โ€” including the 3 real F1b crossings).
a1_metamorphic_attack_v2.py / a1_v2_results.jsonSound-oracle re-run post-defense: 0 breaches, per-cell ฮ” table, broke-v1 recheck.
a1_stderr.log ยท a1_v2_stderr.logRun logs under the 2 CPU / 2 GB scope.
regression_tests/test_a1_metamorphic.shPermanent regression test โ€” re-runs v2, asserts SURVIVES.

Consequence

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.

Open threads

iter 3 ยท attack A1 ยท verdict BREAKS โ†’ DEFENDED โ†’ CLOSED ยท one atomic commit: iter 3: A1 metamorphic invariants โ€” BREAKSโ†’DEFENDED ยท append-only.