From 6353deed15d9181d99a16aaa4ee388b4cbb06709 Mon Sep 17 00:00:00 2001 From: jgrusewski Date: Sun, 31 May 2026 11:49:37 +0200 Subject: [PATCH] =?UTF-8?q?style(rl):=20F1.1=20code=20review=20fixes=20?= =?UTF-8?q?=E2=80=94=20separator=20+=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Code-quality review found 2 Important + 2 Minor issues; applied all 4: - separator style: ────── → ============ (file convention) - restored split sub-headers: outputs (6) / Welford state (4) - restored full safety-net comment with issue #4 reference - added inline value hints on every constant (per spec block) Zero functional change — comments and whitespace only. --- crates/ml-alpha/src/rl/isv_slots.rs | 50 +++++++++++++++-------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/crates/ml-alpha/src/rl/isv_slots.rs b/crates/ml-alpha/src/rl/isv_slots.rs index b131fc458..2ddf97970 100644 --- a/crates/ml-alpha/src/rl/isv_slots.rs +++ b/crates/ml-alpha/src/rl/isv_slots.rs @@ -1502,42 +1502,44 @@ pub const RL_EVAL_IQN_TAU_MIN_NORMAL_INDEX: usize = 693; // 0.10 pub const RL_EVAL_ENTROPY_COEF_MIN_NORMAL_INDEX: usize = 694; // 0.01 pub const RL_EVAL_PPO_CLIP_EPS_MIN_NORMAL_INDEX: usize = 695; // 0.05 -// ────────────────────────────────────────────────────────────────── +// ============================================================ // Regime observer (spec: 2026-05-31-regime-observer-design.md v3) // Unified state-machine signals for risk-stack controllers. -// ────────────────────────────────────────────────────────────────── +// ============================================================ -// regime_observer outputs (6 surface signals + 4 internal Welford state) -pub const RL_REGIME_DEAD_ZONE_FLAG_INDEX: usize = 696; -pub const RL_REGIME_DEAD_ZONE_DURATION_INDEX: usize = 697; -pub const RL_REGIME_DEAD_ZONE_TIMEOUT_FLAG_INDEX: usize = 698; -pub const RL_REGIME_RECOVERY_FACTOR_INDEX: usize = 699; -pub const RL_REGIME_SESSION_PNL_VARIANCE_EMA_INDEX: usize = 700; -pub const RL_REGIME_TAIL_EVENT_RECENCY_INDEX: usize = 701; -pub const RL_REGIME_SESSION_PNL_VAR_M2_INDEX: usize = 702; -pub const RL_REGIME_SESSION_PNL_VAR_MEAN_INDEX: usize = 703; -pub const RL_REGIME_SESSION_PNL_VAR_COUNT_INDEX: usize = 704; -pub const RL_REGIME_PREV_WORST_PNL_INDEX: usize = 705; +// regime_observer outputs (6 surface signals) +pub const RL_REGIME_DEAD_ZONE_FLAG_INDEX: usize = 696; // 0/1 +pub const RL_REGIME_DEAD_ZONE_DURATION_INDEX: usize = 697; // counter +pub const RL_REGIME_DEAD_ZONE_TIMEOUT_FLAG_INDEX: usize = 698; // 0/1 (safety net) +pub const RL_REGIME_RECOVERY_FACTOR_INDEX: usize = 699; // [0,1] (drift-free diag) +pub const RL_REGIME_SESSION_PNL_VARIANCE_EMA_INDEX: usize = 700; // σ² +pub const RL_REGIME_TAIL_EVENT_RECENCY_INDEX: usize = 701; // counter + +// regime_observer internal Welford state (kept on device) +pub const RL_REGIME_SESSION_PNL_VAR_M2_INDEX: usize = 702; // Welford +pub const RL_REGIME_SESSION_PNL_VAR_MEAN_INDEX: usize = 703; // Welford +pub const RL_REGIME_SESSION_PNL_VAR_COUNT_INDEX: usize = 704; // Welford +pub const RL_REGIME_PREV_WORST_PNL_INDEX: usize = 705; // Δ source // Kelly resurrection (consumed by Kelly kernel in F2) -pub const RL_KELLY_EPS_RECOVERY_LIVE_INDEX: usize = 706; -pub const RL_KELLY_EPS_RECOVERY_MIN_INDEX: usize = 707; -pub const RL_KELLY_EPS_RECOVERY_MAX_INDEX: usize = 708; -pub const RL_KELLY_EPS_RECOVERY_N_RECOVERY_INDEX: usize = 709; +pub const RL_KELLY_EPS_RECOVERY_LIVE_INDEX: usize = 706; // current ε value (drift-free) +pub const RL_KELLY_EPS_RECOVERY_MIN_INDEX: usize = 707; // config 0.05 +pub const RL_KELLY_EPS_RECOVERY_MAX_INDEX: usize = 708; // config 0.50 +pub const RL_KELLY_EPS_RECOVERY_N_RECOVERY_INDEX: usize = 709; // config 100 -// Safety net -pub const RL_REGIME_DEAD_ZONE_MAX_DURATION_INDEX: usize = 710; +// Safety net: dead-zone timeout (issue #4 — bounded loss during prolonged adverse regime) +pub const RL_REGIME_DEAD_ZONE_MAX_DURATION_INDEX: usize = 710; // config 1000 steps // IQN τ tail-boost (consumed in F5) -pub const RL_IQN_TAU_TAIL_BOOST_FACTOR_INDEX: usize = 711; -pub const RL_IQN_TAU_TAIL_BOOST_N_WINDOW_INDEX: usize = 712; +pub const RL_IQN_TAU_TAIL_BOOST_FACTOR_INDEX: usize = 711; // config 1.5 +pub const RL_IQN_TAU_TAIL_BOOST_N_WINDOW_INDEX: usize = 712; // config 100 // regime_observer config -pub const RL_REGIME_TAIL_SIGMA_THRESHOLD_INDEX: usize = 713; +pub const RL_REGIME_TAIL_SIGMA_THRESHOLD_INDEX: usize = 713; // config 3.0 // Popart per-account max envelope (consumed by popart in F4) -pub const RL_POPART_MAX_ABS_REWARD_EMA_INDEX: usize = 714; -pub const RL_POPART_MAX_DECAY_ALPHA_INDEX: usize = 715; +pub const RL_POPART_MAX_ABS_REWARD_EMA_INDEX: usize = 714; // envelope-detector state +pub const RL_POPART_MAX_DECAY_ALPHA_INDEX: usize = 715; // config 0.01 /// Last RL-allocated slot index (exclusive). /// Pre-risk-stack: 662. Post-Fix-B: 685. Post-v9 (warmup boundary): 696.