import type { WorkerJourneyEvidence } from "./doctor-worker-journey.js";
/** The per-environment mutation policy from `.lisa.config.json` `exploration`. */
export type MutationPolicy = "forbidden" | "read-only" | "full";
/**
 * Resolve the per-environment mutation policy from an already-parsed config,
 * mirroring `lisa-use-the-product`'s gate: default `read-only`; a production-
 * named env defaults to `forbidden` and may only be raised to `full` with a
 * written `prodMutationAck`.
 * @param config - Parsed `.lisa.config.json` contents
 * @returns The resolved mutation policy
 */
export declare function resolveMutationPolicy(config: unknown): MutationPolicy;
/**
 * Resolve the mutation policy for a path by reading `.lisa.config.json`.
 * @param targetPath - Project path to read config from
 * @returns The resolved mutation policy (read-only when unreadable)
 */
export declare function resolveMutationPolicyForPath(targetPath: string): Promise<MutationPolicy>;
/**
 * Determine whether recorded qualification evidence is fresh enough to reuse:
 * the epoch is in sync (no drift), evidence is present, and it is newer than the
 * current artifact head. When the artifact head cannot be resolved, freshness
 * falls back to "no drift and evidence present" (the shipped #1742 notion).
 * @param evidence - Resolved worker journey evidence
 * @param targetPath - Project path (for git artifact-head resolution)
 * @param artifactHeadOverride - Injected artifact head (skips git resolution)
 * @returns True when the evidence may be reused without a new journey
 */
export declare function isQualificationEvidenceFresh(evidence: WorkerJourneyEvidence, targetPath: string, artifactHeadOverride?: Date | null): Promise<boolean>;
/**
 * Narrow unknown JSON values to plain records.
 * @param value - Value to inspect
 * @returns True for plain object records
 */
export declare function isRecord(value: unknown): value is Record<string, unknown>;
//# sourceMappingURL=doctor-readiness-journey-freshness.d.ts.map