affaan-m/ECC · error · anyhow::Error
scores must be finite and between 0 and 1
Error message
scores must be finite and between 0 and 1
What it means
compare validates every sample's candidate_score and baseline_score are finite and within [0,1]. It fires when any paired sample contains NaN, infinity, or an out-of-range score, preventing corrupt measurements from driving promotion decisions.
Source
Thrown at ecc2/src/harness_eval.rs:539
if samples.is_empty() {
bail!("samples cannot be empty");
}
if samples
.iter()
.map(|sample| sample.seed)
.collect::<BTreeSet<_>>()
.len()
!= samples.len()
{
bail!("sample seeds must be unique");
}
if samples.iter().any(|s| {
!s.candidate_score.is_finite()
|| !s.baseline_score.is_finite()
|| !(0.0..=1.0).contains(&s.candidate_score)
|| !(0.0..=1.0).contains(&s.baseline_score)
}) {
bail!("scores must be finite and between 0 and 1");
}
let count = samples.len();
let candidate_mean = samples.iter().map(|s| s.candidate_score).sum::<f64>() / count as f64;
let baseline_mean = samples.iter().map(|s| s.baseline_score).sum::<f64>() / count as f64;
let mean_delta = candidate_mean - baseline_mean;
let win_rate = samples
.iter()
.filter(|s| s.candidate_score > s.baseline_score)
.count() as f64
/ count as f64;
let mut failures = Vec::new();
if count < self.min_samples {
failures.push(format!(
"minimum sample count is {}, got {count}",
self.min_samples
));
}
if mean_delta < self.min_mean_delta {View on GitHub (pinned to 06c5e118c4)
Solutions
- Ensure every score is a finite number within [0, 1].
- Normalize or clamp scores at the producer and guard against NaN/Infinity.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at ecc2/src/harness_eval.rs:539 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/6a06a448f45097b2.
Report an issue: GitHub.