export type HypothesisOutcome = "fix-in-scope" | "spawn-plan" | "accept-finding";
export interface HypothesisEntry {
    kind: "hypothesis";
    hypothesis: string;
    testPath: string | null;
    outcome: HypothesisOutcome;
    note?: string;
    timestamp: string;
}
export interface TerminatorEntry {
    kind: "terminator";
    reason: string;
    timestamp: string;
}
export type LogEntry = HypothesisEntry | TerminatorEntry;
export interface MalformedLine {
    lineNumber: number;
    content: string;
    reason: string;
}
/**
 * Append a confirmed-hypothesis entry to the plan's falsification log.
 * Creates the log file with a header if it doesn't yet exist. Throws if
 * the log is already terminated (a new hypothesis after a terminator is a
 * sign the ritual was restarted incorrectly — see `isFalsificationComplete`
 * and start a new plan or explicitly un-terminate first).
 */
export declare function appendHypothesis(planRoot: string, entry: Omit<HypothesisEntry, "kind" | "timestamp">): HypothesisEntry;
/**
 * Append a terminator entry marking the falsification ritual complete for
 * this plan. No further hypotheses can be appended after this. The reason
 * is the user-confirmed rationale for termination (e.g., "investigated
 * concurrency, race conditions, partial-write paths, and type-narrowing
 * gaps; no in-scope failure remained").
 */
export declare function markTerminated(planRoot: string, reason: string): TerminatorEntry;
/**
 * Read the falsification log for a plan. Returns an empty array if the log
 * file does not exist. Malformed entries are skipped (not thrown) and
 * surfaced via the optional `onMalformed` callback, matching the semantic
 * graph event log's resilience pattern.
 */
export declare function readFalsificationLog(planRoot: string, opts?: {
    onMalformed?: (malformed: MalformedLine) => void;
}): LogEntry[];
/**
 * True iff the plan's falsification log exists AND its last entry is a
 * terminator. False for a missing log, a log with only hypotheses (ritual
 * started but not terminated), or an empty log file.
 */
export declare function isFalsificationComplete(planRoot: string): boolean;
