import type { ModuleLifecycleContext } from "../../contracts/module-contract.js";
export type TaskPersistenceBackend = "sqlite";
/** SQLite planning row optimistic-lock enforcement for mutating commands (see ADR-planning-generation-optimistic-concurrency.md). */
export type PlanningGenerationPolicy = "off" | "warn" | "require";
/** Runtime persistence is SQLite-only; config must not set `tasks.persistenceBackend` to `json`. */
export declare function getTaskPersistenceBackend(_config: Record<string, unknown> | undefined): TaskPersistenceBackend;
export declare function planningTaskStoreRelativePath(ctx: {
    effectiveConfig?: Record<string, unknown>;
}): string | undefined;
export declare function planningSqliteDatabaseRelativePath(ctx: ModuleLifecycleContext): string;
export declare function planningStrictValidationEnabled(ctx: {
    effectiveConfig?: Record<string, unknown>;
}): boolean;
export declare function getPlanningGenerationPolicy(ctx: {
    effectiveConfig?: Record<string, unknown>;
}): PlanningGenerationPolicy;
export type PlanningGenerationPolicyGateResult = {
    ok: true;
    warnings?: string[];
} | {
    ok: false;
    code: "planning-generation-required";
    message: string;
};
/** Gate mutating planning-store commands when tasks.planningGenerationPolicy is warn or require. */
export declare function enforcePlanningGenerationPolicy(policy: PlanningGenerationPolicy, args: Record<string, unknown>): PlanningGenerationPolicyGateResult;
export declare function mergePlanningGenerationPolicyWarnings(data: Record<string, unknown>, warnings: string[] | undefined): void;
