Signal pipeline v3: 10 gates → 6 data-driven gates
Replaces the hardcoded N≥1000, +0.5pp practical-significance floor, p<0.10 bootstrap threshold, 3pp matchday-interleave tolerance, and 1% suspicious-N dedup heuristic with data-driven equivalents:
Replaces the hardcoded N≥1000, +0.5pp practical-significance floor, p<0.10 bootstrap threshold, 3pp matchday-interleave tolerance, and 1% suspicious-N dedup heuristic with data-driven equivalents:
- Gate 2: bootstrap CI95 width ≤ 4pp (replaces N≥1000)
- Gate 4: CI95[0] > -0.5 × width (replaces p<0.10)
- Gate 5: continuous walk-forward monotonicityScore > 0.5 (replaces
both old G6 interleave and old G10 fold-count gates)
- Gate 6: regime gap < 2 × CI_width (replaces hardcoded ±5pp)
Merged old G1 (pre-registered) and G2 (true standalone) into a single Gate 1. Deleted old G8 (suspicious N dedup) and G9 (+0.5pp hardcoded practical significance).
Added scripts/explore-signal.ts for unregistered cheap peeks (tier=EXPLORATORY, writes to data/alpha-exploration/, never touches signal-registry.json). Added scripts/dry-run-reformed-gates.ts to replay new gates against existing registry entries. Dry-run confirmed: 0 currently-accepted signals flip to rejected under the new gates; 9 rejected signals would be unblocked.
End-to-end retest: contextXg (N=230,558, marginal entry +0.5%, 13 walk-forward folds, CI width 2.64pp) passes all 6 reformed gates. Previously killed by old G5 (p=0.23) and G9 (+0.5pp hardcoded floor). Registry updated with full 6-gate audit trail.
See 2026-04-14-signal-pipeline-rearchitecture.md for the full rationale, dry-run numbers, retest walk-through, and Phase B/C/D plan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>