Navigation
DashboardRotation-Orthogonal-Probe Campaign › iter 6

iter 6 — A4: cross-symbol bootstrap stitching (and what re-attacking the fix found)

BREAKSDEFENDED ×2 → CLOSED  2026-07-10 · attack A4 (KB §3; the probe's own documented H3 residual) · two defenses landed in one iteration, each proven by re-attack · clean 0/3

Claim under attack — the probe's own documentation

aggregate_worst_regime documented its pooled bootstrap's cross-symbol stitching as a benign residual: "H3, ~1% bound shift … conservative (bias to WATCH/PENDING), never a false PASS." A documented magnitude claim is a falsifiable claim — so it was attacked.

ATTACK v1 — the "~1%" claim is false

Stitched (current) vs boundary-respecting within-symbol bootstrap (KB §3: "within-symbol block bootstrap, then combine"), identical hash-derived uniforms so the ONLY difference is boundary respect; the probe's own _boot_ci + ci_gated_redundant (B=400, |Spearman| binding) on 18 pooled regimes × 7 pairs.

FalsifierResult
F1 — any verdict flip stitched vs within0 of 126 (not verdict-material today)
F2 — any bound shift > 0.02 (2× the documented "~1%")4 hits — shifts up to 0.036 (>3× documented), all on bar_dispersion_entropy|trade_intensity in high-vol/thin regimes; stitched CIs consistently WIDER (conservative in direction, wasteful in power, and the documented number simply false)

DEFENSE #1 — eliminate the residual, don't re-document it

+ stationary_bootstrap_idx_segmented(n, seed, segments)   # per-symbol segments resampled
                                                           # independently; blocks never
                                                           # cross a symbol boundary
+ _boot_ci(..., segments=None)                             # plumbed through
+ evaluate_pooled: passes per-symbol segment offsets       # H3 residual ELIMINATED
- "known_limitations: … H3, ~1% bound shift …"             # false claim removed from docs

ATTACK v2 — re-attacking defense #1 found a second defect

G1 (mechanical boundary respect): 900/900 resamples clean. But G2 exposed a knife-edge combo: high|asian|flat · price_impact|volume, whose CI lower bound straddles the frozen 0.95 BAN line by ±0.001 — lo = 0.9489 (WATCH) under one uniform source, 0.9506 (BAN) under another. A frozen-line verdict decided by Monte Carlo noise — the stochastic sibling of iter 3's order-dependence finding, and it would flip between two seeds of the same sampler.

DEFENSE #2 — replicate-and-agree MC gating

+ boot_verdict_replicated(fn, …, replicates=3)   # 3 independent seed streams
      all 3 verdicts agree  → that verdict
      any disagreement      → WATCH              # noise can force caution,
                                                 # never a noise-BAN / noise-PASS

Fixed construction (R=3 — same spirit as iter 4's k∈{2,3,4} sub-slice guard); bands untouched; wired into evaluate_pooled for both the binding ρ gate and the advisory ξ gate.

ATTACK v3 — proof both defenses hold

CheckResult
G1 — boundary respect (900 resamples over real segment structures)0 crossings
G2′ — verdict invariance across THREE estimator flavors (rng / shifted-seed / hash uniforms), 126 combos126/126 identical; the knife-edge combo resolves to WATCH under all flavors (replicate-disagreement detected exactly there, as designed)
A3 block-length regression (exercises the modified _boot_ci)PASS
§B declaration self-testPASS

Evidence

FileWhat
a4_stitching_attack.py / a4_results.jsonv1 — stitched vs within comparison; the 4 F2 magnitude breaches.
a4_stitching_attack_v2.py / a4_v2_results.jsonv2 — re-attack of defense #1; the knife-edge MC flip (1 breach).
a4_stitching_attack_v3.py / a4_v3_results.jsonv3 — both defenses under re-attack; 0 breaches (final).
a4_stderr.log · a4_v2_stderr.log · a4_v3_stderr.logRun logs under the 2 CPU / 2 GB scope.
regression_tests/test_a4_stitching.shPermanent regression test — re-runs v3, asserts SURVIVES.

Consequence

The pooled CI path no longer stitches across symbols (residual eliminated, false doc claim removed) and no frozen-line verdict can be decided by Monte Carlo noise (knife-edges resolve to WATCH). Two real mechanism defects found and closed in one iteration — the second one only visible because the loop re-attacks its own fixes. Clean rounds: 0 of 3 (reset).

Open threads

iter 6 · attack A4 · verdict BREAKS → DEFENDED ×2 → CLOSED · one atomic commit: iter 6: A4 bootstrap stitching — BREAKS→DEFENDED · append-only.