Impulse bypass does not skip the score gate
Compiled truth (2026-04-24): The README says “conviction ≥ 0.60 bypasses all scoring gates and fires immediately.” That is not true in the current code. Three gates must independently pass:
-
Score-band gate (
policy.py:80).abs(score − 50) < (min_score − 50)means any composite in the neutral band is SKIPPED regardless of impulse. Withmin_score: 65, band = (35, 65). Impulse bypass does NOT skip this. Hardened 2026-04-22 after chop-day losses (seeproject_losses_april16_chop). Scoring.py:866-870 has the comment: “The composite score must meet the real threshold on its own merit.” -
Fast-path score bonus (
scoring.py:_maybe_apply_bear_fast_path_bonus, and the BULL twin). Safety valve that nudges composite across the band when impulse + flow agree. Gated onapp.paper=Truewhich is True only for the--papersimulator, NOT for IBKR-paper-account mode viaib_async. NOTE (corrected 2026-04-24 after Codex review): thefast_path.paper_only: truekey in config.json is dead config - it is not read anywhere in src/. The only actual gate is the hard-codedif not getattr(app, "paper", False): return Falseat scoring.py:109 (BULL) and scoring.py:204 (BEAR). Flipping the config key alone would not change behavior. Most actual “paper trading” days run in IBKR-paper mode, so this bonus never fires in practice. -
Upper conviction cap (
fast_path.bear.max_conviction: 0.80). Even if paper_only were off, conv ≥ 0.80 disqualifies the bonus - the “BEAR=1.00 reversal anti-signal” exclusion. Means the strongest impulse signals (hiro+strike_stack stacking at conv=0.91) cannot benefit from the bonus and will silently miss entries.
What impulse_bypass actually skips (all gated on bypass_persistence
- matching bias): persistence gate, streak gate, confidence floor (lowered to LOW), flow-veto-in-reversal-with-REST-fallback. That’s it.
State:
- README: wrong. Needs rewrite to match actual behavior.
- Config:
zero_dte.min_score: 65,fast_path.paper_only: true,fast_path.bear.max_conviction: 0.80. - Impact: miss rate unknown - would need to backtest “impulse bypass fired but score-band gate held” across 2026-04-22 → current and measure what we left on the table vs what the guardrail correctly prevented.
Open threads:
- Rewrite README Architecture → Live Impulse Engine to reflect real bypass scope.
- Decide: does IBKR-paper mode count as “paper” for fast-path purposes? Current answer is no, which makes the bonus a dead feature during dev.
- Decide: is the 0.80 upper conv cap right? It was tuned against BEAR=1.00 climax reversals, but we’re now missing 0.80–0.95 confluence signals.
Timeline:
2026-04-24 | Live market at 8:55 CT - SPY 710.5 → 708.5 sell climax, then
bounce. Impulse fired BEARISH conv=0.91 trigger=hiro+strike_stack on 46.1M call stack, price below VWAP, 5-bar LL/LH. Composite
peaked at BEAR breakdown of −30 raw (PF=-9, VS=-8, PT=-11, SM=-2, DP=+3,
Vol=+4) but normalized composite was 38. 38 ∈ (35, 65) → SKIPPED_SCORE.
Fast-path bonus would have nudged 38→33 (crossing) but paper_only: true
blocked it; upper conv cap 0.80 would have blocked it anyway. No alert
fired. User asked “why aren’t you firing a signal” - this page is the
answer. See writing/2026-04-24-bear-impulse-91-missed-at-open.md for the
specific miss postmortem (to be written if we decide to replay it).