codetether-agent 4.7.0-a-002.2

A2A-native AI coding agent for the CodeTether ecosystem
Documentation
use super::level::EvidenceLevel;

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct EvidenceClaim {
    pub level: EvidenceLevel,
    pub needs_concrete_id: bool,
}

pub(crate) fn assess_claim(text: &str) -> EvidenceClaim {
    let lower = text.to_ascii_lowercase();
    let level = if has_any(&lower, &["youtube", "tiktok", "platform id", "upload id"]) {
        EvidenceLevel::RealPlatformUpload
    } else if has_any(&lower, &["argo", "argocd", "kubectl", "namespace", "pod/"]) {
        EvidenceLevel::LiveDeploymentArgo
    } else if has_any(&lower, &["ci-like", "playwright", "e2e", "focused run"]) {
        EvidenceLevel::FocusedCiLike
    } else if has_any(&lower, &["mock", "fixture", "route.fulfill"]) {
        EvidenceLevel::MockedLocal
    } else if has_any(&lower, &["fmt", "clippy", "test", "lint", "diff --check"]) {
        EvidenceLevel::StaticLocal
    } else {
        EvidenceLevel::NotRun
    };
    EvidenceClaim {
        level,
        needs_concrete_id: matches!(
            level,
            EvidenceLevel::LiveDeploymentArgo | EvidenceLevel::RealPlatformUpload
        ),
    }
}

fn has_any(haystack: &str, needles: &[&str]) -> bool {
    needles.iter().any(|needle| haystack.contains(needle))
}

#[cfg(test)]
mod tests {
    use super::{EvidenceLevel, assess_claim};

    #[test]
    fn argo_claims_need_concrete_ids() {
        let claim = assess_claim("Argo CD pod passed");
        assert_eq!(claim.level, EvidenceLevel::LiveDeploymentArgo);
        assert!(claim.needs_concrete_id);
    }
}