{"record":{"id":"7f859db42a4dfb3c","repo":"affaan-m/ECC","slug":"at-least-one-explicit-seed-is-required","errorCode":null,"errorMessage":"at least one explicit seed is required","messagePattern":"at least one explicit seed is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ecc2/src/harness_eval.rs","lineNumber":467,"sourceCode":"        Ok(self.health_ok)\n    }\n}\n\n#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct PairedSample {\n    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}","sourceCodeStart":449,"sourceCodeEnd":485,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/ecc2/src/harness_eval.rs#L449-L485","documentation":"evaluate_paired runs the evaluator on a candidate and baseline over an explicit list of seeds for paired comparison. This error is thrown when the seeds slice is empty, since a paired statistical comparison requires at least one explicit seed to sample. The library refuses to invent default seeds.","triggerScenarios":"Calling evaluate_paired(evaluator, candidate_id, baseline_id, &[]) with an empty seeds array, typically because the seed list was built from an empty config collection or a failed parse.","commonSituations":"Seeds loaded from a config/env var that is unset or empty; a filter accidentally removing all seeds; CLI flag for seeds not provided so the vec stays empty; refactoring that dropped the default seed list.","solutions":["Pass a non-empty seed list, e.g. &[1, 2, 3, ...], with at least one u64 seed.","If seeds come from config, provide a default seed set when the config value is missing or empty.","Validate seeds before calling: bail early in your own code if seeds.is_empty().","Check the code path that builds the seeds vector to see why it produced zero entries."],"exampleFix":"// before\nlet seeds: Vec<u64> = config.seeds.clone(); // empty if unset\nlet samples = evaluate_paired(&mut eval, \"cand\", \"base\", &seeds)?; // bails\n\n// after\nlet seeds: Vec<u64> = if config.seeds.is_empty() { vec![1, 2, 3, 4, 5] } else { config.seeds.clone() };\nassert!(!seeds.is_empty());\nlet samples = evaluate_paired(&mut eval, \"cand\", \"base\", &seeds)?;","handlingStrategy":"validation","validationCode":"if seeds.is_empty() {\n    return Err(\"at least one explicit seed is required\");\n}\nif seeds.len() > 10_000 {\n    return Err(\"seed count exceeds 10000\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Provide a default seed list when config/env seeds are absent.","Validate seed count and uniqueness before calling evaluate_paired.","Check CLI/config parsing paths so an unset seed option surfaces as an explicit config error, not an empty vec."],"tags":["validation","empty-input","seeds"],"backgroundTag":"empty-required-field","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"}