diff --git a/crates/ml/src/trainers/dqn/trainer/training_loop.rs b/crates/ml/src/trainers/dqn/trainer/training_loop.rs index 08bd22868..1a6c583a0 100644 --- a/crates/ml/src/trainers/dqn/trainer/training_loop.rs +++ b/crates/ml/src/trainers/dqn/trainer/training_loop.rs @@ -2992,11 +2992,13 @@ impl DQNTrainer { current_epsilon, epoch_duration.as_secs_f64() ); - // Epsilon decay (skip when noisy nets) - if !true { - let mut agent = self.agent.write().await; - agent.update_epsilon(); - } + // Task 2.5 Bug #3 — removed dead `if !true { agent.update_epsilon() }` + // block. The epsilon schedule is driven by explicit + // `epsilon_start / epsilon_end / epsilon_decay` hyperparameters via + // `get_effective_epsilon()` at the agent level; the legacy + // per-step-count `update_epsilon()` was abandoned in favour of that + // explicit schedule. Guarded-by-`!true` is a disabled-toggle pattern + // per feedback_no_feature_flags — dead code is deleted. // Noisy sigma schedule if let Some(ref mut scheduler) = self.noisy_sigma_scheduler {