compute_reward_pnl() took raw action_idx (0=Buy,1=Sell,2=Hold) — wrong with 45-action FactoredAction encoding. Now takes &FactoredAction and uses order-type-specific transaction costs. Position tracking uses action.exposure instead of old 3-way index match. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>