Foundation patch for the Forward-Return-Distribution head (SP20 P3).
No new behavior — kernels arrive in the next commit (F.2). This commit
just establishes the ISV vocabulary and structural dims so the kernel
code can reference named slots/consts from day one.
ISV slots 498-503 (RL_SLOTS_END bumped 498 → 504):
* RL_FRD_LAMBDA_INDEX = 498 seed 0.5
* RL_FRD_LR_INDEX = 499 seed 1e-3
* RL_FRD_HORIZON_1_TICKS_INDEX = 500 seed 60.0
* RL_FRD_HORIZON_2_TICKS_INDEX = 501 seed 300.0
* RL_FRD_HORIZON_3_TICKS_INDEX = 502 seed 1800.0
* RL_FRD_BUCKET_RANGE_SIGMA_INDEX = 503 seed 3.0 (±3σ)
Bootstraps written via the existing isv_constants table in
IntegratedTrainer::new — same path as the SP20 P5 trail bounds. No
HtoD path opened (rl_isv_write does device-side scalar writes).
Structural consts (crates/ml-alpha/src/rl/common.rs):
* FRD_HIDDEN_DIM = 64 (MLP hidden layer width)
* FRD_N_HORIZONS = 3 (h1/h2/h3 forward returns)
* FRD_N_ATOMS = 21 (return-bucket atoms per horizon)
Atom count is the only structural compile-time dim per §0.1 of the
SP20 spec; range_σ is ISV-driven (slot 503) so the head can adapt
as realised σ drifts.