type ReservedTagGuard = Readonly<{
    tag?: never;
}>;
/** Standard no-op decision for pure planners that compare current vs desired state. */
export type PlannerNoChange<TDetails extends object = Record<never, never>> = Readonly<TDetails & {
    tag: 'no_change';
}>;
/** Standard update decision for pure planners that derive an effectful follow-up. */
export type PlannerUpdate<TDetails extends object = Record<never, never>> = Readonly<TDetails & {
    tag: 'update';
}>;
/** Build a no-change decision while preserving literal detail types. */
export declare function plannerNoChange(): PlannerNoChange;
export declare function plannerNoChange<const TDetails extends object>(details: TDetails & ReservedTagGuard): PlannerNoChange<TDetails>;
/** Build an update decision while preserving literal detail types. */
export declare function plannerUpdate(): PlannerUpdate;
export declare function plannerUpdate<const TDetails extends object>(details: TDetails & ReservedTagGuard): PlannerUpdate<TDetails>;
/** Shallow readonly marker for planner-derived patches. */
export type PlannerPatch<TPatch extends object> = Readonly<TPatch>;
/** Identity at runtime; marks a planner-derived patch as shallow readonly. */
export declare function plannerPatch<const TPatch extends object>(patch: TPatch): PlannerPatch<TPatch>;
/** Clock dependency for pure planners that need current time. */
export type PlanningClock = Readonly<{
    now(): number;
}>;
export type PlanningDateInput = Date | Readonly<{
    now?: Date;
    clock?: PlanningClock;
}>;
/** Standard optional planning-time seam for services that accept injected dates. */
export type PlanningTimeOptions = Readonly<{
    nowInput?: PlanningDateInput;
}>;
/** Default clock for production callers that do not inject time explicitly. */
export declare const systemPlanningClock: PlanningClock;
/** Resolve current time from an explicit timestamp, injected clock, or system clock. */
export declare function resolvePlanningNow(input?: Readonly<{
    now?: number;
    clock?: PlanningClock;
}>): number;
/** Resolve current time as a Date from an explicit Date, injected clock, or system clock. */
export declare function resolvePlanningNowDate(input?: Readonly<{
    now?: Date;
    clock?: PlanningClock;
}>): Date;
/**
 * Resolve a Date-compatible planner input.
 *
 * Precedence: bare Date, `{ now }`, `{ clock }`, then `systemPlanningClock`.
 * Explicit Date inputs are returned by reference, not cloned.
 */
export declare function resolvePlanningDateInput(input?: PlanningDateInput): Date;
/** Enabled branch for optional planner selections. */
export type EnabledSelection<TValue> = Readonly<{
    enabled: true;
    value: TValue;
}>;
/** Disabled branch for optional planner selections. */
export type DisabledSelection = Readonly<{
    enabled: false;
}>;
/** Enabled/disabled selection ADT for normalized planner inputs. */
export type OptionalSelection<TValue> = EnabledSelection<TValue> | DisabledSelection;
/** Build an enabled selection while preserving literal value types. */
export declare function enabledSelection<const TValue>(value: TValue): EnabledSelection<TValue>;
/** Build a disabled selection. */
export declare function disabledSelection(): DisabledSelection;
export {};
