Why this campaign exists
c-ble-drift-trigger booked its policy criterion as a "clean negative" because triggered recalibration lost to fixed cadence by +0.0079 persons — a margin the 2026-07-06 audit showed is smaller than the seed noise (SD 0.0096) and ≈60× below the ε=0.5 threshold that matters. The superiority framing was the wrong question. The right one is equivalence: does the trigger reach parity with the clock while spending ~¼ of the recalibration budget? Parity is cheaply establishable precisely because the difference is tiny: TOST power at margin ±0.05 with the observed σ_d needs 3–5 seeds; pin 6 (also clears the n=3 sign-test floor for the correlation re-confirm).
Design
Three arms — fixed-cadence / xmodal-triggered / oracle-triggered (ceiling) — paired by seed over the ordered in-path (losin) + off-path (losperp, corner) displacement sequence, reusing the c-csi-layout-drift cast extended to 6 seeds. ~4 policy arms × 6 seeds × 7 states ≈ 168 runs.
Artefact contract (hard gate)
trigger_equivalence.parquet (per seed × arm × state), TOST both-one-sided p-values + the 90% CI on the paired difference, seed-block-bootstrap ρ CIs, all pushed to the session S3 prefix.
Figure render request (mandatory)
paired_diff— per-seed (trigger − fixed) dots with the ±0.05 equivalence band drawn (the honest visual for "inside the margin").seed_trace— error vs displacement per arm.- The corrected per-arm small-multiple policy figure (all 4 arms; the original dropped the signal arm via
ziptruncation).
Honest scope
In-silico, one synthetic corridor, self-authored displacement schedule. Tests the parity mechanism, not a field detection rate. May move recalibration-trigger-from-drift candidate→chosen (strength stays plausible); the field ROC remains the IP-106 defeater.