The DQN inference adapter tests hardcoded `vec![0.1; 56]` as the
feature vector, but the DQN model's first shared layer expects
STATE_DIM=96 inputs. cuBLAS gemm_ex was reading 40 elements past the
end of the 56-allocated CudaSlice — uninitialized memory that
happened to give consistent-enough values for the deterministic test
to pass on the pre-change heap layout, and for other tests not to
notice the out-of-bounds read.
Surfaced by the Part 1 checkpoint-load work: adding the CUDA_LOCK
mutex and a new weight_mu_mut method to NoisyLinear shifted
allocation patterns enough that the uninitialized tail now reads
different values between the two predict() calls in
test_dqn_adapter_deterministic, flipping the argmax.
Replace all three `vec![0.1|0.3; 56]` occurrences with
`vec![...; ml_core::state_layout::STATE_DIM]` so the tests actually
exercise the model with in-bounds memory.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>