import { z } from "zod"; /** * Local calendar-module copy of the Finding type. * Field names mirror src/hub/finding.ts:10-27 EXACTLY. * Do NOT import from src/hub — this module is a forward dependency on the * priority-hub spec. The hub is a sibling spec; importing it would create a * compile-time coupling that the planner explicitly avoided. */ export declare const FindingSchema: z.ZodObject<{ id: z.ZodString; domain: z.ZodString; title: z.ZodString; kind: z.ZodEnum<["action", "watch", "risk", "question"]>; urgency: z.ZodNumber; severity: z.ZodNumber; evidence: z.ZodArray; surfacedAt: z.ZodString; dueBy: z.ZodOptional; tags: z.ZodArray; estDurationMin: z.ZodOptional; calendarSafeTitle: z.ZodOptional; status: z.ZodEnum<["open", "in-progress", "snoozed", "done", "dropped"]>; promotesTo: z.ZodOptional; }, "strip", z.ZodTypeAny, { status: "open" | "in-progress" | "snoozed" | "done" | "dropped"; kind: "action" | "watch" | "risk" | "question"; id: string; domain: string; title: string; urgency: number; severity: number; evidence: string[]; surfacedAt: string; tags: string[]; dueBy?: string | undefined; estDurationMin?: number | undefined; calendarSafeTitle?: string | undefined; promotesTo?: string | undefined; }, { status: "open" | "in-progress" | "snoozed" | "done" | "dropped"; kind: "action" | "watch" | "risk" | "question"; id: string; domain: string; title: string; urgency: number; severity: number; evidence: string[]; surfacedAt: string; tags: string[]; dueBy?: string | undefined; estDurationMin?: number | undefined; calendarSafeTitle?: string | undefined; promotesTo?: string | undefined; }>; export type Finding = z.infer; /** Zod schema for an ordered ranked-findings array (calendar input). */ export declare const FindingArraySchema: z.ZodArray; urgency: z.ZodNumber; severity: z.ZodNumber; evidence: z.ZodArray; surfacedAt: z.ZodString; dueBy: z.ZodOptional; tags: z.ZodArray; estDurationMin: z.ZodOptional; calendarSafeTitle: z.ZodOptional; status: z.ZodEnum<["open", "in-progress", "snoozed", "done", "dropped"]>; promotesTo: z.ZodOptional; }, "strip", z.ZodTypeAny, { status: "open" | "in-progress" | "snoozed" | "done" | "dropped"; kind: "action" | "watch" | "risk" | "question"; id: string; domain: string; title: string; urgency: number; severity: number; evidence: string[]; surfacedAt: string; tags: string[]; dueBy?: string | undefined; estDurationMin?: number | undefined; calendarSafeTitle?: string | undefined; promotesTo?: string | undefined; }, { status: "open" | "in-progress" | "snoozed" | "done" | "dropped"; kind: "action" | "watch" | "risk" | "question"; id: string; domain: string; title: string; urgency: number; severity: number; evidence: string[]; surfacedAt: string; tags: string[]; dueBy?: string | undefined; estDurationMin?: number | undefined; calendarSafeTitle?: string | undefined; promotesTo?: string | undefined; }>, "many">; /** A busy (blocked) calendar interval. */ export interface BusyInterval { startIso: string; endIso: string; } /** A free (available) calendar interval derived from the window minus busy intervals. */ export interface FreeInterval { startIso: string; endIso: string; } /** Working-hours constraint applied when clamping free intervals per-day. */ export interface WorkingHours { /** Hour of day (0-23) when work begins, UTC. */ startHour: number; /** Hour of day (0-23) when work ends, UTC. */ endHour: number; } /** Constraints that bound the planning window passed to planSlots. */ export interface SlotConstraints { /** ISO-8601 start of the planning window (inclusive). */ windowStartIso: string; /** ISO-8601 end of the planning window (exclusive). */ windowEndIso: string; /** Optional working-hours clamp (UTC hours). */ workingHours?: WorkingHours; /** IANA timezone identifier (informational only; not used in epoch-ms math). */ timezone?: string; } /** A scheduled finding slot in the proposed plan. */ export interface PlanItem { findingId: string; title: string; startIso: string; endIso: string; /** * Privacy-safe title for cloud connectors (Sprint 3). * Set by the slotter from finding.calendarSafeTitle. * When absent, the Google connector falls back to the generic placeholder * "Focus block" — it NEVER uses the full `title` field for cloud egress. */ calendarSafeTitle?: string; } /** * Closed string-literal union of reasons a finding was not placed. * * "does-not-fit" — No free slot large enough for estDurationMin exists. * "no-free-slot-before-dueBy" — Free slots exist but all start at or after dueBy. * * Adding a new reason requires updating the exhaustive switch in slotter.ts (ADR-3 gate). */ export type UnscheduledReason = "does-not-fit" | "no-free-slot-before-dueBy"; /** The output of planSlots: placed items + unplaced items with reasons. */ export interface ProposedPlan { scheduled: PlanItem[]; unscheduled: Array<{ findingId: string; reason: UnscheduledReason; }>; } //# sourceMappingURL=types.d.ts.map