/**
 * pipeline/assert-grader-judgments-persisted.ts
 *
 * Post-persist guard for the grader-judgments write junction in
 * `calculateAndWriteScores`.
 *
 * `extractGraderJudgmentsResilient` returns N judgments in memory, after which
 * `runBorderlinePass` may mutate the array in place and a `judgments.length > 0`
 * guard decides whether `grader-judgments.json` is written. A transient read
 * anomaly or an unexpected in-place emptying can leave the file absent or empty
 * even though extraction yielded judgments. Silently skipping the write strands
 * gap-analysis and ships a scored report with no test details.
 *
 * This guard re-reads the file from disk — the same read gap-analysis performs
 * — and fails loud when a non-empty extraction did not round-trip. The check is
 * deliberately narrow: it fires only on the catastrophic "extracted N>0,
 * persisted 0" divergence, never on a genuinely judgment-free run.
 */
/** Injectable seam — counts the grader judgments actually on disk. */
export interface PersistVerificationDeps {
    countPersisted: (path: string) => number;
}
/**
 * Fail loud when a non-empty grader-judgment extraction did not round-trip to
 * disk. No-ops when nothing was extracted — a judgment-free run (all api-errors
 * / no llm-rubric) is valid and persists nothing by design.
 *
 * @param extractedCount  Judgments returned by extraction, captured BEFORE any
 *   in-place mutation (e.g. the borderline-consensus pass) so the count
 *   reflects what extraction actually produced.
 * @param judgmentsPath  Absolute path to `grader-judgments.json`.
 * @param deps  Injectable disk reader; defaults to the real filesystem.
 * @throws {Error} when `extractedCount > 0` but the persisted file holds 0.
 */
export declare function assertGraderJudgmentsPersisted(extractedCount: number, judgmentsPath: string, deps?: PersistVerificationDeps): void;
