[PASS] gap fill: long filled at ask_open + slip, not at the trigger (entry 111.0) [PASS] gap fill: R measured on the planned risk (trigger - stop = 5) [PASS] entry minute: pessimistic books the stop (sl_entry_minute R -1.200) [PASS] entry minute: optimistic holds to the flat (flat R +0.100) [PASS] double break: booked as about -1R minus cost (R -1.200) [PASS] bar-close: fill = ask_open of the first minute >= t_signal + slip (entry 101.0) [PASS] stop and target in one minute: the stop wins (sl) [PASS] flat: bid_open of the flat minute - slip (exit 107.0) [PASS] cost: R(2x) - R(1x) = -cost_r [PASS] cost: 1x executed cost = (spread + 2 slip) / risk [PASS] random walk, symmetric bracket: no edge before cost (|t| < 3) (optimistic gross +0.0284R t +0.54; pessimistic gross +0.0284R) [PASS] random walk: net of spread is negative (net -0.0049R n 1407) [PASS] stale pre-open quote: the old loop invents an edge on pure noise (t > 5) (naive gross +0.9072R t +10.50 n 1497) [PASS] stale pre-open quote: hdam_sim shows none (|t| < 3, both modes) (hdam gross optimistic +0.1547R t +1.89 / pessimistic +0.1547R t +1.89, n 1498) [PASS] staleness guard refuses the frozen window (RWS 07:00-08:00 UTC: stale quotes in {2010: np.float64(1.0), 2011: np.float64(1.) [PASS] Validation is sealed for HDAM (data_loader raises) [PASS] discovery book ends <= 2020-12-31 (2020-12-31 23:59:00+00:00) [PASS] index strictly increasing (UTC) [PASS] true clock: the 09:30 ET minute is the start of the RTH volatility jump (median range 09:29 1.50 / 09:30 3.30) [PASS] staleness guard passes the live NY open on US100 (max flat share 0.052) RESULT: ALL PASS