import type { ControlEvalResult, ControlRunResult } from './control-runtime';
import { type RunRecord, type RunSplitTag, type RunTokenUsage } from './run-record';
export interface RunEvidenceMetadata {
    experimentId: string;
    candidateId: string;
    seed: number;
    model: string;
    promptHash: string;
    configHash: string;
    commitSha: string;
    splitTag: RunSplitTag;
    tokenUsage: RunTokenUsage;
    queueMs?: number;
    judgeMetadata?: RunRecord['judgeMetadata'];
    raw?: Record<string, number>;
}
export interface ControlRunToRunRecordOptions extends RunEvidenceMetadata {
    runId?: string;
    score?: number;
    failureMode?: string;
}
/**
 * Project a completed control-loop run into the strict RunRecord shape used by
 * release gates, optimizer tables, and research reports.
 *
 * The control loop owns live execution evidence. The caller still supplies the
 * experiment-cell metadata because prompt/config hashes, split assignment,
 * model snapshot, and commit SHA are product/harness concerns.
 */
export declare function controlRunToRunRecord<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult>(run: ControlRunResult<TState, TAction, TActionResult, TEval>, options: ControlRunToRunRecordOptions): RunRecord;
export declare function scoreFromEvals(evals: readonly ControlEvalResult[]): number | undefined;
//# sourceMappingURL=run-evidence.d.ts.map