Files
foxhunt/docs
jgrusewski 6135dea311 feat(dqn-v2): Plan 4 Task 2c.3c.5 — append H_S2_RMS_EMA ISV slot + producer kernel
ISV bus tail-append:
- [96] H_S2_RMS_EMA_INDEX — per-batch RMS(save_h_s2) EMA (alpha=0.05)
- [97] ISV_LAYOUT_FINGERPRINT_LO_INDEX (shifted from 94)
- [98] ISV_LAYOUT_FINGERPRINT_HI_INDEX (shifted from 95)
- ISV_TOTAL_DIM 96 -> 99
- New LAYOUT_FINGERPRINT_CURRENT = 0x3e21acecd922e540 (was 0xcf3a24b0a1f70057)

Producer kernel `h_s2_rms_ema_kernel.cu`:
- Single-block reduction (256 threads, shmem-tree, no atomicAdd) of the
  online trunk's `save_h_s2 [B, SH2]` post-GRN activation
- RMS = sqrt(sum_sq / (B*SH2)); EMA into ISV[96] with alpha=0.05
- Launched once per training step alongside reward_component_ema and
  the other Plan 3/4 ISV producers in training_loop.rs

Constructor cold-start writes ISV[96]=1.0 (neutral RMS).
StateResetRegistry: H_S2_RMS_EMA registered as FoldReset -> 1.0.

`launch_h_s2_rms_ema` and the kernel both treat the unconditional
constructor allocation as an invariant — debug_assert! on the host side,
no defensive (N>0) ternary in the kernel — same proper-resolution
pattern as the 2c.3c.4 followup.

Producer-only commit. 2c.3c.6 wires the consumer in mag_concat_qdir's
adaptive-scale path so the magnitude-branch decoder sees a scale-
invariant residual stack regardless of GRN drift across training.

Smoke deferred — producer-only with zero consumers, runtime behaviour
structurally unchanged from 2c.3c.4 (which validated the GRN backward
chain end-to-end with all 3 fold checkpoints). cargo check + cargo
build (new h_s2_rms_ema_kernel.cubin compiles clean under nvcc sm_80)
is the standing validation; meaningful multi_fold_convergence re-run
lands with 2c.3c.6 when the consumer wires up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 15:41:09 +02:00
..