import type { AuthoringLedgerEntry } from './authoring-ledger.js';
import type { SplitArtifact } from './split.js';
/**
 * Q2 (strategy floor): the held-out slice must be ≥ 50% of the non-excluded
 * scored window `N = |trainPrs| + |heldOutPrs|` — inclusive (`=0.5` passes), so
 * per-rule generalization evidence (§5.3) rests on a substantial unseen slice.
 * Returns [] or the single violation message.
 */
export declare function checkHeldOutFloor(split: SplitArtifact): string[];
/**
 * Q3.1 (strategy temporal): the split's `frozenAt` must PRECEDE every effective
 * rule's `authoredAt` — §5.1 "frozen before authoring" made mechanical. A split
 * frozen at-or-after authoring is a HARD FAIL (the author may have tuned matchers
 * against held-out code — an exposure re-freezing cannot undo). Returns per-rule
 * violation messages ([] if clean). A missing `frozenAt` is itself a violation
 * (no mechanical proof possible).
 */
export declare function checkFrozenBeforeAuthoring(split: SplitArtifact, effectiveEntries: readonly AuthoringLedgerEntry[]): string[];
/**
 * Q3.2 (strategy membership) — LEAKAGE SEMANTICS (the #2294-couple ruling,
 * operator option (a) recorded on strategy#810): a positive fixture PR is legal
 * iff `∉ heldOutPrs` AND (`∈ trainPrs` OR strictly pre-window). Falsifying
 * Metric (c)'s condition is HELD-OUT membership — a pre-window anchor cannot
 * leak code that post-dates it, so the Q4-ruled cert-1 anchor set (all pre-
 * window) stays legal without re-anchoring.
 *
 * This gate stays PURE (no git): "strictly pre-window" is proven by ANCESTRY
 * (`is-ancestor(mergeCommit(pr), cutBoundarySha)` — never PR-number order,
 * which is not merge-ordered) at the command layer that has git, and handed in
 * as `verifiedPreWindowPrs`. An empty set reproduces the strict pre-ruling
 * behavior byte-for-byte (the legacy lane passes empty). Returns per-(rule,pr)
 * violation messages ([] if clean).
 */
export declare function checkPositiveFixturesTrainSide(split: SplitArtifact, effectiveEntries: readonly AuthoringLedgerEntry[], verifiedPreWindowPrs: ReadonlySet<number>): string[];
/**
 * The composed authored freeze precondition (strategy D5 Q2 + Q3). Runs all three
 * orthogonal gates, aggregates EVERY violation, and throws ONE `GATE_INVALID`
 * naming them all (compose-never-replace; both axes surfaced, never short-circuit).
 * No-op on clean input. Call at the authored producer's freeze step, before any
 * lock/substrate write (Tenet 13 sensor-not-actuator: detect + fail, never repair).
 */
export declare function assertAuthoredFreezePreconditions(split: SplitArtifact, effectiveEntries: readonly AuthoringLedgerEntry[], 
/** Fixture PRs proven strictly pre-window by ancestry at the git-holding boundary (empty ⇒ strict). */
verifiedPreWindowPrs: ReadonlySet<number>): void;
//# sourceMappingURL=authored-freeze-gates.d.ts.map