refactor(rl): v9 slot rename — RL_EVAL_WARMUP_* → RL_REGIME_TRANSITION_* (F3)

Theorem 2 (v9 behavior preserved): pure constant identifier rename across 3 files;
no physical migration. Slots 685/686/687 keep their addresses; v9 kernel,
trainer reset_session_state, and diag emit all reference the same memory.

- crates/ml-alpha/src/trainer/integrated.rs: 4 references renamed
- crates/ml-alpha/cuda/rl_eval_warmup_decay.cu: 3 `#define`s renamed
- crates/ml-alpha/examples/alpha_rl_train.rs: ~12 references renamed (import + diag emit)

Unblocks the 4 pre-existing errors that F1.1 introduced. Branch now compiles
cleanly with regime_observer foundation (F1) + v9 cleanup (F3).
This commit is contained in:
jgrusewski
2026-05-31 12:26:54 +02:00
parent b09feaf9e4
commit bf214d1a09
3 changed files with 19 additions and 19 deletions

View File

@@ -4,7 +4,7 @@
// Pearl: pearl_adaptive_carryover_discipline
//
// At every regime boundary (train→eval, fold transition), the trainer
// calls `reset_session_state` which sets `RL_EVAL_WARMUP_REMAINING_INDEX`
// calls `reset_session_state` which sets `RL_REGIME_TRANSITION_REMAINING_INDEX`
// to the configured warmup duration. This kernel runs once per step
// thereafter; while the counter is positive, it overrides four
// risk-sizing controller floors with conservative defensive values.
@@ -28,9 +28,9 @@
#include <stdint.h>
#define RL_EVAL_WARMUP_REMAINING_INDEX 685
#define RL_EVAL_WARMUP_STEPS_CONFIG_INDEX 686
#define RL_EVAL_WARMUP_DECAY_STEPS_CONFIG_INDEX 687
#define RL_REGIME_TRANSITION_REMAINING_INDEX 685
#define RL_REGIME_TRANSITION_STEPS_CONFIG_INDEX 686
#define RL_REGIME_TRANSITION_DECAY_STEPS_CONFIG_INDEX 687
#define RL_EVAL_KELLY_SAFETY_DEFENSIVE_INDEX 688
#define RL_EVAL_IQN_TAU_MIN_DEFENSIVE_INDEX 689
#define RL_EVAL_ENTROPY_COEF_MIN_DEFENSIVE_INDEX 690
@@ -52,7 +52,7 @@ extern "C" __global__ void rl_eval_warmup_decay(
if (threadIdx.x != 0 || threadIdx.y != 0 || threadIdx.z != 0) return;
if (blockIdx.x != 0 || blockIdx.y != 0 || blockIdx.z != 0) return;
const float remaining = isv[RL_EVAL_WARMUP_REMAINING_INDEX];
const float remaining = isv[RL_REGIME_TRANSITION_REMAINING_INDEX];
// Post-warmup steady state: do nothing. The normal floors stay at
// their bootstrap values (or whatever the last-warmup-step wrote).
@@ -61,8 +61,8 @@ extern "C" __global__ void rl_eval_warmup_decay(
}
// Read configured durations + override / normal values.
const float warmup_steps = isv[RL_EVAL_WARMUP_STEPS_CONFIG_INDEX];
const float decay_steps = isv[RL_EVAL_WARMUP_DECAY_STEPS_CONFIG_INDEX];
const float warmup_steps = isv[RL_REGIME_TRANSITION_STEPS_CONFIG_INDEX];
const float decay_steps = isv[RL_REGIME_TRANSITION_DECAY_STEPS_CONFIG_INDEX];
const float kelly_def = isv[RL_EVAL_KELLY_SAFETY_DEFENSIVE_INDEX];
const float tau_def = isv[RL_EVAL_IQN_TAU_MIN_DEFENSIVE_INDEX];
@@ -96,7 +96,7 @@ extern "C" __global__ void rl_eval_warmup_decay(
// Decrement counter for next step. When it crosses 0, the next step
// sees remaining = -1 and returns early (controllers run unimpeded).
isv[RL_EVAL_WARMUP_REMAINING_INDEX] = remaining - 1.0f;
isv[RL_REGIME_TRANSITION_REMAINING_INDEX] = remaining - 1.0f;
// Spec note: warmup_steps is used only by the trainer to set the
// initial counter value; this kernel reads warmup_steps only to make
// the `remaining > decay_steps` comparison meaningful for non-default

View File

@@ -112,8 +112,8 @@ use ml_alpha::rl::isv_slots::{
RL_CUMULATIVE_DONES_INDEX,
// v9 defensive eval-boundary calibration (spec
// 2026-05-31-v9-defensive-eval-boundary-calibration.md).
RL_EVAL_WARMUP_REMAINING_INDEX, RL_EVAL_WARMUP_STEPS_CONFIG_INDEX,
RL_EVAL_WARMUP_DECAY_STEPS_CONFIG_INDEX,
RL_REGIME_TRANSITION_REMAINING_INDEX, RL_REGIME_TRANSITION_STEPS_CONFIG_INDEX,
RL_REGIME_TRANSITION_DECAY_STEPS_CONFIG_INDEX,
RL_EVAL_KELLY_SAFETY_DEFENSIVE_INDEX, RL_EVAL_IQN_TAU_MIN_DEFENSIVE_INDEX,
RL_EVAL_ENTROPY_COEF_MIN_DEFENSIVE_INDEX, RL_EVAL_PPO_CLIP_EPS_MIN_DEFENSIVE_INDEX,
RL_EVAL_KELLY_SAFETY_NORMAL_INDEX, RL_EVAL_IQN_TAU_MIN_NORMAL_INDEX,
@@ -780,8 +780,8 @@ fn main() -> Result<()> {
};
// v9 eval_warmup pre-compute (json! macro can't take Rust blocks/if-else).
let eval_warmup_remaining = isv[RL_EVAL_WARMUP_REMAINING_INDEX];
let eval_warmup_decay_steps = isv[RL_EVAL_WARMUP_DECAY_STEPS_CONFIG_INDEX];
let eval_warmup_remaining = isv[RL_REGIME_TRANSITION_REMAINING_INDEX];
let eval_warmup_decay_steps = isv[RL_REGIME_TRANSITION_DECAY_STEPS_CONFIG_INDEX];
let eval_warmup_active = if eval_warmup_remaining > 0.0 { 1.0_f32 } else { 0.0_f32 };
let eval_warmup_blend = if eval_warmup_remaining < 0.0 {
0.0_f32
@@ -932,7 +932,7 @@ fn main() -> Result<()> {
"remaining": eval_warmup_remaining,
"active": eval_warmup_active,
"blend": eval_warmup_blend,
"warmup_steps_config": isv[RL_EVAL_WARMUP_STEPS_CONFIG_INDEX],
"warmup_steps_config": isv[RL_REGIME_TRANSITION_STEPS_CONFIG_INDEX],
"decay_steps_config": eval_warmup_decay_steps,
"floor_kelly_safety": isv[RL_KELLY_SAFETY_FRAC_INDEX],
"floor_iqn_tau_min": isv[RL_IQN_ACTION_TAU_MIN_INDEX],

View File

@@ -3032,7 +3032,7 @@ impl IntegratedTrainer {
// overconfident positions, and lost $500k before EMAs could
// re-converge. Pure adaptive principle now: every signal that
// drives behavior must be re-bootstrapped from new-regime data.
// Defensive warmup duration. Matches RL_EVAL_WARMUP_STEPS_CONFIG_INDEX
// Defensive warmup duration. Matches RL_REGIME_TRANSITION_STEPS_CONFIG_INDEX
// bootstrap (see ISV bootstrap block in `with_controllers_bootstrapped`).
// Hardcoded here because reset_session_state runs before any ISV read
// would observe a host-visible value; the kernel reads its own config.
@@ -3058,7 +3058,7 @@ impl IntegratedTrainer {
(crate::rl::isv_slots::RL_NEG_SCALED_REWARD_MAX_EMA_INDEX, 0.0_f32),
(crate::rl::isv_slots::RL_REWARD_CLAMP_CLIP_RATE_EMA_INDEX, 0.0_f32),
// v9 — arm the defensive warmup window.
(crate::rl::isv_slots::RL_EVAL_WARMUP_REMAINING_INDEX, warmup_steps),
(crate::rl::isv_slots::RL_REGIME_TRANSITION_REMAINING_INDEX, warmup_steps),
// Regime observer boundary policy (F1.7 — spec 2026-05-31 v3,
// [[pearl_adaptive_carryover_discipline]]):
// - Transient state (FLAG/DURATION/TIMEOUT) → 0
@@ -3475,9 +3475,9 @@ impl IntegratedTrainer {
// 500-step warmup with 200-step linear decay phase. During warmup,
// risk-sizing floors are temporarily overridden with defensive
// values; reset_session_state arms the counter at each boundary.
(crate::rl::isv_slots::RL_EVAL_WARMUP_REMAINING_INDEX, -1.0), // sentinel: no active warmup at boot
(crate::rl::isv_slots::RL_EVAL_WARMUP_STEPS_CONFIG_INDEX, 500.0), // total warmup duration
(crate::rl::isv_slots::RL_EVAL_WARMUP_DECAY_STEPS_CONFIG_INDEX, 200.0), // linear decay window
(crate::rl::isv_slots::RL_REGIME_TRANSITION_REMAINING_INDEX, -1.0), // sentinel: no active warmup at boot
(crate::rl::isv_slots::RL_REGIME_TRANSITION_STEPS_CONFIG_INDEX, 500.0), // total warmup duration
(crate::rl::isv_slots::RL_REGIME_TRANSITION_DECAY_STEPS_CONFIG_INDEX, 200.0), // linear decay window
// Defensive overrides (active for ~first 300 steps post-boundary).
(crate::rl::isv_slots::RL_EVAL_KELLY_SAFETY_DEFENSIVE_INDEX, 0.25), // quarter-Kelly
(crate::rl::isv_slots::RL_EVAL_IQN_TAU_MIN_DEFENSIVE_INDEX, 0.30), // raise pessimism floor
@@ -3860,7 +3860,7 @@ impl IntegratedTrainer {
/// AFTER all risk-stack controllers run (so this kernel's overrides
/// of Kelly_safety_frac / IQN τ_min / entropy_coef_min / PPO ε_min
/// take effect for the next step's consumers). Returns early if
/// `RL_EVAL_WARMUP_REMAINING_INDEX` ≤ 0, so the runtime cost when
/// `RL_REGIME_TRANSITION_REMAINING_INDEX` ≤ 0, so the runtime cost when
/// warmup is inactive is just a single mapped-pinned ISV read.
pub fn launch_rl_eval_warmup_decay(&self) -> Result<()> {
let mut args = RawArgs::new();