refactor(dqn-v2): Task 4 gap-fix — missed sites + Rust mirror
Follow-up to Plan 1 Task 4 sub-commits 4A-4F. Addresses 3 issues
surfaced by code review:
1. experience_kernels.cu:1148-1152 — 4 raw literals missed by Task 4A/4E
sed sweep (the block uses portfolio_states[ps_base_plan + N] syntax
rather than ps[N], so sed targeting \bps\[ didn't match).
Fixes: ps_base_plan + 23 -> PS_PLAN_TARGET_BARS, + 0 -> PS_POSITION,
dir_idx = 2 -> DIR_LONG, dir_idx = 0 -> DIR_SHORT.
2. experience_kernels.cu:1194 — flat_idx = 3 replaced with DIR_FLAT.
3. crates/ml-core/src/state_layout.rs — Rust mirror added for every
Task 4 constant (PS_*, PLAN_ISV_*, PLAN_PARAM_*, BRANCH_*, DIR_*,
MAG_*) matching cuh byte-for-byte. Closes the half-applied Invariant
8 gap for the Rust side.
No behavioural change. Pure refactor.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>