/** * Coverage accounting for the finding taxonomy. * * The premise of `senpi validate` is that its messages are the product — so a code that no test * ever produces is a message nobody has read. A hand-maintained checklist of "codes we tested" * rots the first time someone is in a hurry; this makes the accounting mechanical instead. * * Pure functions over an observed set. The suite that collects real findings feeds them in; these * decide what is missing. Nothing here reads the filesystem or knows how findings are produced. */ import { type ValidateCode } from "./codes.js"; import type { ValidationStage } from "./types.js"; export interface CoverageOptions { /** * Only account for codes raised at these depths. * * Exists because the taxonomy is declared whole while the checks that raise it are built in * layers. Scoping to the stages that exist keeps the assertion meaningful — and honest — instead * of permanently red or, worse, permanently disabled. Widen this as each layer lands; the day it * covers every stage, the option can go. */ stages: readonly ValidationStage[]; } /** Codes that should have been produced by some test, and were not. */ export declare function findUncoveredCodes(observed: Iterable, options: CoverageOptions): ValidateCode[]; /** * Observed codes that are not in the taxonomy at all. * * Catches the opposite failure from {@link findUncoveredCodes}: a finding emitted with a * hand-written string that never made it into the table, so it has no metadata, no entry in the * generated reference, and no route through the actor/fix-kind logic that depends on it. */ export declare function findUnknownCodes(observed: Iterable): string[]; //# sourceMappingURL=coverage.d.ts.map