{"record":{"id":"8f9a843ad8379dcf","repo":"affaan-m/ECC","slug":"seeds-must-be-unique","errorCode":null,"errorMessage":"seeds must be unique","messagePattern":"seeds must be unique","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ecc2/src/harness_eval.rs","lineNumber":473,"sourceCode":"    pub seed: u64,\n    pub candidate_score: f64,\n    pub baseline_score: f64,\n}\n\npub fn evaluate_paired(\n    evaluator: &mut dyn Evaluator,\n    candidate_id: &str,\n    baseline_id: &str,\n    seeds: &[u64],\n) -> Result<Vec<PairedSample>> {\n    if seeds.is_empty() {\n        bail!(\"at least one explicit seed is required\");\n    }\n    if seeds.len() > 10_000 {\n        bail!(\"seed count exceeds 10000\");\n    }\n    if seeds.iter().copied().collect::<BTreeSet<_>>().len() != seeds.len() {\n        bail!(\"seeds must be unique\");\n    }\n    seeds\n        .iter()\n        .map(|seed| {\n            Ok(PairedSample {\n                seed: *seed,\n                candidate_score: evaluator.evaluate(candidate_id, *seed)?,\n                baseline_score: evaluator.evaluate(baseline_id, *seed)?,\n            })\n        })\n        .collect()\n}\n\n#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]\npub struct PromotionPolicy {\n    pub min_samples: usize,\n    pub min_mean_delta: f64,\n    pub min_win_rate: f64,","sourceCodeStart":455,"sourceCodeEnd":491,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/ecc2/src/harness_eval.rs#L455-L491","documentation":"`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.","triggerScenarios":"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).","commonSituations":"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.","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"],"exampleFix":"// before\nlet seeds = vec![1, 2, 2, 3];\nlet samples = evaluate_paired(&evaluator, &seeds)?;\n// after\nlet mut seeds = vec![1, 2, 2, 3];\nseeds.sort_unstable();\nseeds.dedup();\nlet samples = evaluate_paired(&evaluator, &seeds)?;","handlingStrategy":"validation","validationCode":"fn ensure_unique_seeds(seeds: &[u64]) -> Result<(), String> {\n    let unique = seeds.iter().copied().collect::<std::collections::BTreeSet<_>>();\n    if unique.len() != seeds.len() {\n        return Err(\"seeds contain duplicates\".into());\n    }\n    Ok(())\n}","typeGuard":"fn seeds_are_unique(seeds: &[u64]) -> bool {\n    seeds.iter().copied().collect::<std::collections::BTreeSet<_>>().len() == seeds.len()\n}","tryCatchPattern":"match evaluate_paired(&evaluator, &seeds) {\n    Ok(samples) => samples,\n    Err(e) if e.to_string().contains(\"unique\") => {\n        let mut seeds = seeds.clone();\n        seeds.sort_unstable();\n        seeds.dedup();\n        evaluate_paired(&evaluator, &seeds)?\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["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"],"tags":["validation","seeds","duplicate-values"],"backgroundTag":"invalid-argument-value","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}