Both DQN and PPO eval paths used old 3-action index matching (0=Buy, 1=Sell, 2=Hold). Now uses FactoredAction.target_exposure() for exposure-weighted returns and order-type-specific transaction costs. PPO path had .to_int() which doesn't exist on FactoredAction. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>