import { type AcquisitionRunner, type ExternalAnalyzerCandidate, type ExternalAnalyzerToolStatus, type AnalyzerPolicy, type MechanicalVerification } from "audit-tools/shared"; import type { RemediationState } from "../state/store.js"; /** * Item C (`spec/mechanical-analyzer-layer-design.md`) — the close-gate verify * leg for analyzer-born findings. Findings born from analyzer leads are closed * by the same analyzer re-run: the one place mechanical output is authoritative * rather than a lead, because "this exact provenance identity no longer fires" * is a fact, not a judgment. * * Instance-level semantics: pass = the finding's {analyzer_id, rule, path, * snippet_hash} identity is absent from the re-run's provenance set. Residual * findings elsewhere in the file do not fail it. Unlike the suite legs (which * re-block ALL resolved items on red), a persisting lead re-blocks only ITS * item — attribution is exact. * * Admission reads the provider-neutral analyzer policy artifact shared with the * audit draw: an analyzer that is not admitted or does not resolve * yields per-item `skipped` verdicts with the tool status as reason — recorded, * never silent, and never a false `verified_mechanically`. */ export interface AnalyzerLeadVerifyOutcome { /** False when no resolved item carries analyzer provenance (leg is a no-op). */ ran: boolean; /** Per finding_id mechanical verification verdicts. */ verdicts: Record; /** One status per re-run analyzer, for the report. */ statuses: ExternalAnalyzerToolStatus[]; /** finding_ids whose lead identity still fires (the re-block set). */ persisting: string[]; } /** Test-injectable seams; production callers pass none of these. */ export interface AnalyzerLeadVerifyOverrides { candidates?: ExternalAnalyzerCandidate[]; run?: AcquisitionRunner; analyzerPolicy?: AnalyzerPolicy; } export declare function verifyAnalyzerLeads(params: { state: RemediationState; root: string; overrides?: AnalyzerLeadVerifyOverrides; }): Promise; //# sourceMappingURL=closeVerifyAnalyzerLeads.d.ts.map