import type { GroundTruthLabel } from './windtunnel-scorer.js'; /** * The closed disposition taxonomy (strategy#709 RULED). `accepted-fix` and * `declined-as-false-positive` are the only LABEL-BEARING classes; the rest are * deliberately UNLABELED outcomes — a valid-but-not-actioned decline is NOT * evidence the code is clean, so it never labels a firing. */ export type DispositionClass = 'accepted-fix' | 'declined-as-false-positive' | 'scope' | 'defer' | 'superseded' | 'style' | 'ambiguous'; /** A single review-thread comment (the provider-neutral subset the taxonomy reads). */ export interface DispositionComment { author: string; body: string; } /** * Classify a held-out review thread's disposition under the closed taxonomy. * * Reads the HUMAN (non-bot) comments only — the human is the one who disposes; a * bot's own follow-up is not a disposition (and `isResolved` alone is never TP, * codex WARNING-5). Conservative precedence: * 1. No human disposition comment → ambiguous (UNLABELED) * 2. accepted-fix AND false-positive present → ambiguous (conflicting signals) * 3. accepted-fix, no decline of any kind → accepted-fix (TP) * 4. false-positive, no fix and no soft decline → declined-as-false-positive (FP) * 5. otherwise a soft decline present → scope | defer | superseded | style (UNLABELED) * 6. no recognizable signal → ambiguous (UNLABELED) * * Steps 3/4 require a CLEAN signal: a fix that is also scoped/deferred, or an FP * rebuttal that is also a scope/defer decline, collapses to ambiguous — the * answer key must not credit a contradictory disposition. This defeats codex's * falsifying case ("declined, too broad / tracked for later" never becomes FP). */ export declare function classifyDisposition(comments: ReadonlyArray): DispositionClass; /** * Project a taxonomy class onto a cert-run ground-truth label. The two * label-bearing classes map to TP/FP; every UNLABELED class returns `null` — the * deriver OMITS the firing's labelId from `ground-truth-labels.json`, and the * scorer routes the un-keyed firing to `needsAdjudication` → HONEST-NEGATIVE. */ export declare function dispositionToLabel(cls: DispositionClass): GroundTruthLabel | null; //# sourceMappingURL=disposition-taxonomy.d.ts.map