import { type AttentionLane } from "./recovery.js"; export declare const ANOMALY_KINDS: readonly ["assigned-without-run", "execution-timeout", "approved-landed-open", "review-without-reviewer", "blocked-without-recovery"]; export type AnomalyKind = (typeof ANOMALY_KINDS)[number]; export interface TodoAnomaly { workItemId: string; kind: AnomalyKind; lane: AttentionLane; reason: string; } export interface DetectTodoAnomaliesInput { now?: Date; /** When false, detect without appending the `anomaly_observed` audit event. */ persist?: boolean; /** Exact Workflow-run proof that the approved landing completed. */ approvedLandingComplete?: (todoId: string) => boolean; /** Close an approved-landed leftover through the existing complete() path. * Return true when the Todo is done so it is not parked on Manager attention. */ closeApprovedLanded?: (todoId: string) => boolean; } /** * Quiet detector. Returns the leftover lies on the board. A healthy board * returns []. Never creates a Todo, a session, or a recovery row — the sweep * owns that row; this only appends the audit trail. */ export declare function detectTodoAnomalies(input?: DetectTodoAnomaliesInput): TodoAnomaly[]; export declare function detectAnomalyFor(id: string, now?: Date): TodoAnomaly | undefined; //# sourceMappingURL=anomaly-detect.d.ts.map