import type { CorpusDisposition } from '@mmnto/totem'; /** The held-out disposition source — the live adapter in the CLI, a fake in tests. */ export interface CorpusDispositionSource { fetch(pr: number): Promise; } export interface FetchDispositionsOptions { /** Path to the wind-tunnel lock (default `.totem/spine/gate-1/windtunnel.lock.json`). */ lockPath?: string; /** Gate-1 output dir (default: the lock's dir). */ outputDir?: string; /** Working dir (default `process.cwd()`; injected for tests). */ cwd?: string; /** Injected source (tests). In the live CLI it is built from the lock's repo. */ source?: CorpusDispositionSource; } /** * Compute the held-out CORPUS PRs whose dispositions label firings: `heldOutPrs` * minus the positive/negative controls (positives are structural-TP; negatives * are culled — neither reads a disposition). Deterministic ascending order. */ export declare function corpusHeldOutPrs(split: { heldOutPrs: number[]; positiveControlPrs: number[]; negativeControlPrs: number[]; }): number[]; /** * ADR-112 §6/§5.3 Slice D2.6 — the WINDOW-WIDE corpus PRs for an AUTHORED producer: * `(trainPrs ∪ heldOutPrs)` minus the positive/negative controls, deduped + ascending. * The authored analogue of `corpusHeldOutPrs`: authored positive controls are TRAIN-side, * so a held-out-only answer key leaves their corpus firings unlabeled → permanent * HONEST-NEGATIVE (a run that can never PASS; totem-agy's D2 mechanical proof). The window * spans train + held-out so those train-side firings get a disposition to label against. * Pure split-math (no `producerKind` read here — the command picks the selector). */ export declare function corpusWindowPrs(split: { trainPrs: number[]; heldOutPrs: number[]; positiveControlPrs: number[]; negativeControlPrs: number[]; }): number[]; export declare function fetchDispositionsCommand(opts: FetchDispositionsOptions): Promise; //# sourceMappingURL=spine-fetch-dispositions.d.ts.map