Files
foxhunt/crates
jgrusewski ea12c172e6 test(sp21): T2.2 Phase 1.5 — kernel-direct GPU oracle for per-trade predicted_q
Promotes the Phase 2.5 follow-up from the plan to a load-bearing test.
Three #[ignore = "requires GPU"] tests exercise backtest_env_step_batch
directly with controlled inputs:

  1. predicted_q_populated_on_close_with_real_q_values — open Long Full
     at step 0 with q_values_per_window[w=0, a=Long_Full]=2.5, hold for
     two bars, close Flat at step 3. Asserts the per-trade tape's
     predicted_q[0] ≈ 2.5 (entry_q captured at open, persisted in
     entry_q_state across holds, snapshotted before close emit).

  2. predicted_q_stays_zero_when_q_values_is_null — same scenario with
     q_values_per_window=NULL (single-step evaluate() semantics). The
     kernel's open-time write is gated on the NULL guard, so
     entry_q_state[w] stays at buffer-init 0.0 and the tape's
     predicted_q is 0.0. Proves the NULL-tolerance contract is
     kernel-enforced, not just launcher convention.

  3. no_trades_no_predicted_q_emission — all-Flat action sequence
     produces zero trades. Path-coverage check that entry_q's open
     guard fires only on actual opens / reverses.

Test design:
- Kernel-direct (loads ENV_CUBIN via include_bytes!), no eval-pipeline
  scaffolding (no QValueProvider, no cuBLAS forward, no chunked state
  gather). Avoids the heavy mock infrastructure the plan flagged.
- Flat-market 4-bar single-window window: every OHLC=100, zero costs,
  initial_capital=100k. Isolates the entry_q signal from P&L noise
  so the assert-predicted_q is exact under IEEE-754 (kernel writes
  the Q-value verbatim with no math).
- NULL fallback for isv_signals/conviction/exploration_scale matches
  the existing single-step launcher pattern; FEATURE_DIM=4 (<41) ⇒
  compute_regime_trail_scales takes the fixed-width fallback (no
  feature deref needed).

Verification:
- SQLX_OFFLINE=true cargo test -p ml --test sp21_per_trade_predicted_q_test
  --features cuda -- --ignored --nocapture
- 3/3 pass on RTX 3050 Ti (sm_86).
- All 4 prior SP20 GPU oracle suites still pass (25 tests).
- Total: 28 GPU oracle tests, 0 failures.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:12:07 +02:00
..