affaan-m/ECC · error · anyhow::Error
sample seeds must be unique
Error message
sample seeds must be unique
What it means
compare enforces unique seeds across the paired samples (BTreeSet size vs slice length), mirroring the seed-uniqueness rule of evaluate_paired. It guards the compare path against callers assembling samples by hand with duplicated seeds.
Source
Thrown at ecc2/src/harness_eval.rs:531
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()
{
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;View on GitHub (pinned to 06c5e118c4)
Solutions
- Deduplicate sample seeds; each sample must use a distinct seed.
- Check the seed assignment loop for repeated values.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at ecc2/src/harness_eval.rs:531 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/0e79294b52557d83.
Report an issue: GitHub.