diff --git a/crates/ml-alpha/src/trainer/perception.rs b/crates/ml-alpha/src/trainer/perception.rs index 78dce55e8..21a8d3005 100644 --- a/crates/ml-alpha/src/trainer/perception.rs +++ b/crates/ml-alpha/src/trainer/perception.rs @@ -2475,10 +2475,15 @@ impl PerceptionTrainer { let dt_s = self.cfg.decision_stride.max(1) as f32; let n_in_i = HIDDEN_DIM as i32; let n_hid_i = HIDDEN_DIM as i32; - let block_dim = 128u32; - let grid_dim = (HIDDEN_DIM as u32).div_ceil(block_dim); + // Phase B fix-up: block-per-batch (Phase B), same launch contract as + // training's K-loop. BEFORE this fix the eval path used the legacy + // grid=(1,1,1) config which only processed batch 0 — batches + // 1..B-1 got GARBAGE h_new. Caught by t6z89-vs-txftz cluster A/B + // (val_loss=0.83, mean_auc=chance) on 2026-05-17. let cfg_cfc = LaunchConfig { - grid_dim: (grid_dim, 1, 1), block_dim: (block_dim, 1, 1), shared_mem_bytes: 0, + grid_dim: (b_sz as u32, 1, 1), + block_dim: (HIDDEN_DIM as u32, 1, 1), + shared_mem_bytes: 0, }; let cfg_grn_fwd = LaunchConfig { grid_dim: (b_sz as u32, 1, 1),