// ═══════════════════════════════════════════════════════════════════ // YOU WRITE THIS FILE. Policy decides what blocks vs what's a comment. // Defaults are opinionated on the "stop clicking past placeholder" // side — easier to loosen than to tighten when you're watching the // auditor behave in live PRs. // ═══════════════════════════════════════════════════════════════════ import type { Finding, Verdict } from "./types.ts"; /// Translate the four-check output into a single verdict. This is the /// single pane of glass the auditor operates on — tune thresholds here. export function assembleVerdict( findings: Finding[], metrics: Record, pr_number: number, head_sha: string, ): Verdict { const blocking = findings.filter(f => f.severity === "block"); const warning = findings.filter(f => f.severity === "warn"); let overall: Verdict["overall"]; let one_liner: string; if (blocking.length > 0) { overall = "block"; one_liner = `${blocking.length} blocking issue${blocking.length > 1 ? "s" : ""}: ${blocking[0].summary}`; } else if (warning.length >= 3) { // Three or more warnings is a block — death by a thousand cuts. overall = "request_changes"; one_liner = `${warning.length} warnings — see review`; } else if (warning.length > 0) { overall = "request_changes"; one_liner = warning[0].summary; } else { overall = "approve"; one_liner = `all checks passed (${findings.length} findings, all info)`; } return { pr_number, head_sha, audited_at: new Date().toISOString(), overall, findings, metrics, one_liner, }; } /// Which strength-of-claim warrants which severity when evidence is /// weak? A "Phase X shipped" claim with zero integration tests is a /// blocker. A "should work" claim with no test is a warn. export function severityFromClaimEvidence( claim_strength: "weak" | "moderate" | "strong", evidence_grade: "none" | "partial" | "full", ): "info" | "warn" | "block" { if (evidence_grade === "full") return "info"; if (claim_strength === "strong" && evidence_grade === "none") return "block"; if (claim_strength === "strong" && evidence_grade === "partial") return "warn"; if (claim_strength === "moderate" && evidence_grade === "none") return "warn"; return "info"; }