/** * cost — the SECOND score of two-score localization (proposal 004). * * A context bug costs you twice: a wrong ANSWER (the flip `verdict`, the strong * causal tier) OR extra COST — loops/tokens — even when a capable model recovers * and answers correctly. This module reads the cost score from the SAME ablation * reruns (`AblationRunStats.cost`, captured in `runAblationProbe`) and attaches a * `CostVerdict` to each suspect, then classifies each on the 2×2. * * HONEST TIER (the two-lens review): the cost score is a WEAKER, gated tier than * the flip. Removing a piece reducing cost shows **necessity for the cost, NOT * that the work was "wasted"** (the piece could be load-bearing scaffolding). So: * - PLACEBO control — a cost cause must beat the loops-saved of pieces whose * removal did NOT flip the answer (benign path variance), leave-one-out; * (v1 limitation: the placebo population is the non-flipping suspects, which * may themselves include real cost causes — so the band's MAX is CONSERVATIVE * and UNDER-detects when several pieces reduce cost by similar amounts. Safe * direction for a causal-ish claim. A dedicated neutral-filler placebo is v2.) * - STABILITY — every ablated rerun used no MORE loops than baseline * (consistent reduction; an integer ±1 delta is brittle — determinism ≠ * robustness), AND a placebo band existed to clear. */ import type { AblationRunStats, Suspect, SuspectClass } from './types.js'; /** Minimum loops saved (over the placebo band) to call a piece a cost cause. */ export declare const MIN_LOOPS_SAVED = 1; /** * Attach a `CostVerdict` to each suspect from the ablation reruns + a * leave-one-out placebo control. Suspects without cost data are returned * unchanged (quality-only). See the module honesty note. */ export declare function assignCostVerdicts(suspects: readonly Suspect[], baseline: AblationRunStats): Suspect[]; /** * Derive the 2×2 class from the flip verdict (quality) and the cost verdict. * The no-bug cell is `'no-detected-effect'` — never "innocent" (a piece can * matter in ways neither axis sees: overdetermination, same-loops-different-path). */ export declare function classifySuspect(suspect: Suspect): SuspectClass; //# sourceMappingURL=cost.d.ts.map