affaan-m/ECC · error · anyhow::Error
minimum mean delta must be finite
Error message
minimum mean delta must be finite
What it means
PromotionPolicy::validate rejects a min_mean_delta that is NaN or infinite. The threshold must be a finite number so the mean-delta comparison in compare() is deterministic; it fires on a corrupt or nonsensical policy value.
Source
Thrown at ecc2/src/harness_eval.rs:511
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Comparison {
pub passed: bool,
pub sample_count: usize,
pub candidate_mean: f64,
pub baseline_mean: f64,
pub mean_delta: f64,
pub win_rate: f64,
pub failures: Vec<String>,
}
impl PromotionPolicy {
pub fn validate(self) -> Result<()> {
if self.min_samples == 0 {
bail!("minimum samples must be positive");
}
if !self.min_mean_delta.is_finite() {
bail!("minimum mean delta must be finite");
}
if !self.min_win_rate.is_finite() || !(0.0..=1.0).contains(&self.min_win_rate) {
bail!("minimum win rate must be between 0 and 1");
}
Ok(())
}
pub fn compare(self, samples: &[PairedSample]) -> Result<Comparison> {
self.validate()?;
if samples.is_empty() {
bail!("samples cannot be empty");
}
if samples
.iter()
.map(|sample| sample.seed)
.collect::<BTreeSet<_>>()
.len()
!= samples.len()View on GitHub (pinned to 06c5e118c4)
Solutions
- Provide a finite number for minimum mean delta; NaN and Infinity are rejected.
- Check the computation producing the delta for division by zero or overflow.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at ecc2/src/harness_eval.rs:511 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of affaan-m/ECC@06c5e118c4 (2026-08-18).
Data as JSON: /api/errors/18211a4979d06eb4.
Report an issue: GitHub.