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[];The decision
Section titled “The decision”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.
Evidence is attached here
Section titled “Evidence is attached here”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[];}Coverage
Section titled “Coverage”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.