/**
 * parityMonitorStore.ts — durable persistence for the Phase-3 parity monitor.
 *
 * The zero-divergence window that gates cutover spans HOURS of real dual-forward traffic.
 * If the monitor's passes lived only in memory, a server restart mid-window would silently
 * reset the streak — at best re-blocking cutover (conservative, survivable), at worst making
 * the gate's `windowMs` meaningless across the very restart it must survive. So passes are
 * appended to a JSONL and reloaded on construction: the window is durable across restarts.
 *
 * Append-only JSONL (one MonitorPass per line) matches Instar's file-based-state convention
 * and is crash-safe (a torn final line is skipped on reload, never corrupting the rest).
 * The pure ParityMonitor stays the gate brain; this is the I/O shell around it.
 */
import { type CutoverGatePolicy, type CutoverGateStatus, type MonitorPass } from './parityMonitor.js';
import type { ParityResult } from '../processor/parity.js';
/** Injectable I/O so unit tests can drive the durable layer without touching disk. */
export interface PassPersistence {
    /** Load all previously-recorded passes, oldest-first. */
    load(): MonitorPass[];
    /** Durably append one pass. */
    append(pass: MonitorPass): void;
}
/** The default JSONL-on-disk persistence (append-only, torn-line tolerant). */
export declare class JsonlPassPersistence implements PassPersistence {
    private readonly path;
    constructor(path: string);
    load(): MonitorPass[];
    append(pass: MonitorPass): void;
}
/**
 * A ParityMonitor whose passes survive a restart. Reloads persisted passes on construction,
 * then every record() both persists and feeds the in-memory monitor. gate() delegates to the
 * monitor over the full (reloaded + new) history.
 */
export declare class DurableParityMonitor {
    private readonly monitor;
    private readonly persistence;
    constructor(persistence: PassPersistence, policy?: Partial<CutoverGatePolicy>);
    record(pass: MonitorPass): void;
    recordResult(result: ParityResult, at: string): void;
    gate(now: string): CutoverGateStatus;
    get passes(): readonly MonitorPass[];
}
//# sourceMappingURL=parityMonitorStore.d.ts.map