Skip to content

Confidence tiers

Module: src/analyze/classify.ts.

classify turns reachability results into findings, assigning each non-alive node exactly one tier and deciding auto-fix eligibility.

function classify(input: {
nodes: SymbolNode[];
reachability: ReachabilityResult[];
publicApiIds?: Set<string>;
}): ClassifiedFinding[];

For a dead node:

tainted OR public API → maybe (autoFixEligible: false)
exported → likely (autoFixEligible: false)
otherwise (private) → certain (autoFixEligible: true)

A test-only node becomes a test-only verdict (tier maybe, autoFixEligible: false) — report-only by locked decision. Alive nodes are not findings.

Crucially, classify attaches the evidence signals it evaluated to each finding. The evidence reporter only formats them — it never re-derives them. This guarantees the rendered evidence can’t drift from the verdict.

interface ClassifiedFinding {
node: SymbolNode;
verdict: "dead" | "test-only";
tier: "certain" | "likely" | "maybe";
autoFixEligible: boolean;
evidence: EvidenceSignal[];
}

The certain tier is meant to be strengthened by a coverage-miss signal when a report is available. Coverage ingestion is planned, so today every chain shows • coverage: not available and tiers rest on static signals.