import type { AuthoredControls } from './authored-controls.js';
import type { PerRuleControlResult } from './windtunnel-firing.js';
import type { RuleFiring, ScorerInput, WindtunnelVerdict } from './windtunnel-scorer.js';
/**
 * Input to the authored scorer. Extends the mined `ScorerInput` MINUS
 * `positiveControlTargets` (that field is DERIVED here from `authoredControls`),
 * plus the §6 answer key and the held-out partition for the O3 metric.
 *
 * `firings` carries the MERGED train + held-out firings — a train-side FP fails the
 * whole window (a window-wide verdict), and `heldOutPrs` partitions them for the O3
 * metric only. `exposureFloors` and the first two `actualExposure` legs pass straight
 * through to the mined scorer; the THIRD leg (`positiveControlsExercised`) is
 * OVERRIDDEN with |authoredControls.positive| (the option-(i) ruling — the §4
 * differential at emission is the exercise proof; held-out activations never
 * inflate it because they are not emissions).
 */
export interface AuthoredScorerInput extends Omit<ScorerInput, 'positiveControlTargets'> {
    /** The §6 answer key from `deriveAuthoredControls` — the emitted positives + the kept non-emissions. */
    authoredControls: Pick<AuthoredControls, 'positive' | 'nonEmissions'>;
    /** Held-out (scored-slice) PR numbers — the O3 partition. Supplied from `split.heldOutPrs` at D4. */
    heldOutPrs: ReadonlySet<number>;
}
/** How the non-emission gate demoted the mined verdict ('none' = the mined verdict already met/exceeded the gate). */
export type AuthoredControlGateEffect = 'none' | 'fail-illegitimate' | 'honest-negative-not-certifiable';
/**
 * The non-emission gate's audit record — observable so a consumed non-emission is
 * NEVER a silent skip (Tenet-4). The counts report the raw `nonEmissions[]` tally
 * regardless of `effect`; `effect` reports the demotion actually APPLIED to the
 * mined verdict (so a more-severe mined FAIL can coexist with `effect: 'none'`
 * while `illegitimate > 0` — the counts, not `effect`, are the presence signal).
 */
export interface AuthoredControlGate {
    illegitimate: number;
    undecidable: number;
    deferred: number;
    effect: AuthoredControlGateEffect;
}
/** The mined verdict + the two authored additions (both never re-consulted for the verdict). */
export interface AuthoredWindtunnelVerdict extends WindtunnelVerdict {
    /** O3 (verdict-inert): `targetRuleId → held-out non-control activation count`. Join-back keyed. */
    heldOutActivationsByRule: Record<string, number>;
    /** The non-emission gate's audit record (§6 fold). */
    authoredControlGate: AuthoredControlGate;
}
/**
 * Score an AUTHORED wind-tunnel run. Pure function: no IO, no clock, no
 * randomness, byte-identical across re-runs for identical inputs (Tenet-15).
 * Reduces to `scoreWindtunnel` after normalizing the §6 controls, applies the
 * non-emission gate (demote-only), and appends the verdict-inert O3 metric.
 */
export declare function scoreAuthoredWindtunnel(input: AuthoredScorerInput): AuthoredWindtunnelVerdict;
/**
 * The AUTHORED sibling of `computePerRuleControlResults` (option-(i) ruling,
 * operator 2026-07-04 / #2291): a rule's per-rule positive-control verdict is
 * the §4 preimage-differential HELD AT EMISSION — the rule has ≥1 entry in
 * `authoredControls.positive[]` (only `differential-holds` fixtures reach it) —
 * never fire-on-window-diff (pre-window anchors have no window substrate by
 * §5.2 design). The negative leg and the cull axis are IDENTICAL to the mined
 * sibling: a rule firing on any negative control is culled (not a survivor,
 * never stamped); survivors fired on none, so `negativeControl` is invariantly
 * true. `evidenceRefs` carry §6-emission locus refs (`§6-emission:` prefixed) —
 * record-only, deliberately NOT shaped like 64-hex firing labelIds so they can
 * never be mistaken for (or joined against) the ground-truth key space.
 */
export declare function computeAuthoredPerRuleControlResults(input: {
    firings: RuleFiring[];
    mintedRuleIds: string[];
    authoredControls: Pick<AuthoredControls, 'positive'>;
}): Map<string, PerRuleControlResult>;
//# sourceMappingURL=windtunnel-scorer-authored.d.ts.map