type SafeExecFn = typeof import('@mmnto/totem').safeExec;
interface PrGitResolution {
    baseSha: string;
    headSha: string;
    diff: string;
}
/**
 * Resolve a squash-merged PR's base/head/diff off the lc clone (fail-loud).
 * head = the squash merge commit (already a 40-hex SHA from `enumeratePrMetas`);
 * base = its first parent; diff = base..head. Rejects an empty diff — every
 * corpus PR is code-touching by construction, so an empty diff means a wrong ref
 * or a silent git fault, not a real no-op (fold-3 no-silent-empty).
 */
export declare function resolvePrGit(lcDir: string, mergeCommit: string, safeExec: SafeExecFn): PrGitResolution;
export interface MaterializeOptions {
    lcDir?: string;
    manifestPath: string;
    /** Override the gate-1 output dir (default: dirname of the seed's canonicalPath, under the repo root). */
    outDir?: string;
    /** Working dir the repo root + manifest path resolve from (default: `process.cwd()`; injected for tests). */
    cwd?: string;
}
/**
 * Materialize the cert-run scoring corpus (the producer slice of strategy#709).
 * Two-phase lock: this writes the lock WITHOUT `llmReplaySha` (the producer can't
 * know it — `record` runs after); `freeze` stamps + seals it (panel OQ-seq).
 */
export declare function materializeCommand(opts: MaterializeOptions): Promise<void>;
export {};
//# sourceMappingURL=spine-cert-materialize.d.ts.map