{"record":{"id":"e2d925c2e0cb6a81","repo":"affaan-m/ECC","slug":"at-least-one-non-empty-kind-reference-is-require","errorCode":null,"errorMessage":"at least one non-empty {kind} reference is required","messagePattern":"at least one non-empty (.+?) reference is required","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"ecc2/src/harness_eval.rs","lineNumber":261,"sourceCode":"        Ok(Self::new(\n            serde_json::from_str(&self.canonical_config)?,\n            self.trace_refs.clone(),\n            self.evidence_refs.clone(),\n        )?\n        .id)\n    }\n}\n\n#[derive(Serialize)]\nstruct CanonicalCandidateArtifact<'a> {\n    config: Value,\n    trace_refs: &'a [String],\n    evidence_refs: &'a [String],\n}\n\nfn normalize_refs(kind: &str, refs: Vec<String>) -> Result<Vec<String>> {\n    if refs.is_empty() || refs.iter().any(|reference| reference.trim().is_empty()) {\n        bail!(\"at least one non-empty {kind} reference is required\");\n    }\n    if refs.len() > 100 || refs.iter().any(|reference| reference.len() > 4096) {\n        bail!(\"{kind} references exceed bounded limits\");\n    }\n    let mut normalized = refs\n        .into_iter()\n        .map(|reference| reference.trim().to_string())\n        .collect::<Vec<_>>();\n    normalized.sort();\n    normalized.dedup();\n    Ok(normalized)\n}\n\nfn sha256_hex(bytes: &[u8]) -> String {\n    Sha256::digest(bytes)\n        .iter()\n        .map(|byte| format!(\"{byte:02x}\"))\n        .collect()","sourceCodeStart":243,"sourceCodeEnd":279,"githubUrl":"https://github.com/affaan-m/ECC/blob/06c5e118c4d3e6c3b7f9445f973a2194c82de193/ecc2/src/harness_eval.rs#L243-L279","documentation":"normalize_refs rejects trace/evidence reference lists that are empty or contain blank (whitespace-only) entries. It is a shared validation guard for CandidateSpec::new; it fires whenever a candidate is created without at least one meaningful `{kind}` reference string.","triggerScenarios":"Thrown at ecc2/src/harness_eval.rs:261 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide at least one non-empty reference of the required kind in the evidence payload.","Check for whitespace-only or empty-string references that are being rejected."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"06c5e118c4d3e6c3b7f9445f973a2194c82de193","analyzedAt":"2026-08-18T11:27:13.915Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}