import type { Claim, LedgerRecord } from '../core/record.js'; import type { ExecFn } from '../util/exec.js'; /** * "The agent says the tests passed" is the single most consequential claim in * a coding run, so it gets first-class verification: re-run the exact command * and compare. This is the replay half of "logs are claims, replays are * proofs" — deterministic, no model in the loop. */ export type TestClaimStatus = 'verified' | 'now_failing' | 'mismatch' | 'skipped' | 'error'; export interface TestClaimVerification { readonly seq: number; readonly command: string; readonly claimedOutcome: 'ok' | 'failed' | 'unknown'; readonly status: TestClaimStatus; readonly detail: string; } export interface VerifyTestsOptions { readonly rerun: boolean; readonly cwd: string; readonly timeoutMs?: number; readonly exec?: ExecFn; /** Re-run only the last N test claims (the final state is what you ship). */ readonly lastN?: number; } export declare function verifyTestClaims(records: readonly LedgerRecord[], options: VerifyTestsOptions): readonly TestClaimVerification[]; export declare function collectTestClaims(records: readonly LedgerRecord[]): ReadonlyArray<{ seq: number; claim: Extract; }>;