affaan-m/ECC · error
seeds must be unique
Error message
seeds must be unique
What it means
`evaluate_paired` requires all explicit seeds to be unique; it deduplicates them into a `BTreeSet` and compares cardinality. Duplicated seeds would weight the statistical comparison toward repeated cases, so the call is rejected up front.
Solutions
- Deduplicate the seed slice before calling, e.g. `seeds.sort(); seeds.dedup();`
- Build the seed list through a `BTreeSet`/`HashSet` to guarantee uniqueness
- If duplicates were intentional re-weights, run the evaluator once per occurrence and merge samples yourself
Example fix
// before let seeds = vec![1, 2, 2, 3]; let samples = evaluate_paired(&evaluator, &seeds)?; // after let mut seeds = vec![1, 2, 2, 3]; seeds.sort_unstable(); seeds.dedup(); let samples = evaluate_paired(&evaluator, &seeds)?;
Defensive patterns
Strategy: validation
Validate before calling
fn ensure_unique_seeds(seeds: &[u64]) -> Result<(), String> {
let unique = seeds.iter().copied().collect::<std::collections::BTreeSet<_>>();
if unique.len() != seeds.len() {
return Err("seeds contain duplicates".into());
}
Ok(())
} Type guard
fn seeds_are_unique(seeds: &[u64]) -> bool {
seeds.iter().copied().collect::<std::collections::BTreeSet<_>>().len() == seeds.len()
} Try / catch
match evaluate_paired(&evaluator, &seeds) {
Ok(samples) => samples,
Err(e) if e.to_string().contains("unique") => {
let mut seeds = seeds.clone();
seeds.sort_unstable();
seeds.dedup();
evaluate_paired(&evaluator, &seeds)?
}
Err(e) => return Err(e),
} Prevention
- Always build seed lists through a set type (`BTreeSet<u64>`/`HashSet<u64>`)
- Sort-and-dedup merged seed lists from multiple sources before use
- Add a unit test asserting seed uniqueness in seed-generation helpers
When it happens
Trigger: Calling `evaluate_paired` with a seed slice containing at least one repeated u64, e.g. `[1, 2, 2, 3]`, or seeds built from a source that can repeat values (hash collisions, manual lists, concatenated runs).
Common situations: Merging seed lists from multiple test runs without deduplication; hand-written seed arrays with a typo; generating seeds from a small modulus so values repeat.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- at least one explicit seed is required
- seed count exceeds 10000
- -32602
- a claim token is required
- a confirmed nonempty coordinate is required
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/8f9a843ad8379dcf.
Report an issue: GitHub.
Appendix: source
Thrown at ecc2/src/harness_eval.rs:473
pub seed: u64,
pub candidate_score: f64,
pub baseline_score: f64,
}
pub fn evaluate_paired(
evaluator: &mut dyn Evaluator,
candidate_id: &str,
baseline_id: &str,
seeds: &[u64],
) -> Result<Vec<PairedSample>> {
if seeds.is_empty() {
bail!("at least one explicit seed is required");
}
if seeds.len() > 10_000 {
bail!("seed count exceeds 10000");
}
if seeds.iter().copied().collect::<BTreeSet<_>>().len() != seeds.len() {
bail!("seeds must be unique");
}
seeds
.iter()
.map(|seed| {
Ok(PairedSample {
seed: *seed,
candidate_score: evaluator.evaluate(candidate_id, *seed)?,
baseline_score: evaluator.evaluate(baseline_id, *seed)?,
})
})
.collect()
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
pub struct PromotionPolicy {
pub min_samples: usize,
pub min_mean_delta: f64,
pub min_win_rate: f64,View on GitHub (pinned to 8321021c54)