- Add spread_cost as 28th param to experience_env_step kernel
- Wire from DQNHyperparameters.fill_spread_cost_frac through
ExperienceCollectorConfig to the kernel launch
- Training execute_trade() and compute_tx_cost() now use spread_cost
(was hardcoded 0.0, backtest used real spread_cost)
- All compute_tx_cost calls in training use spread_cost consistently
This was the LAST remaining train/eval transaction cost mismatch.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>