export type TaskStateBucket = "done" | "blocked" | "active" | "todo"; export declare function classifyTaskState(status: unknown): TaskStateBucket; export type TaskStatusCounts = { total: number; done: number; blocked: number; active: number; todo: number; }; export declare function summarizeTaskStatuses(taskStatuses?: unknown[]): TaskStatusCounts; export type MilestoneRollupStatus = "planned" | "in_progress" | "at_risk" | "completed"; export type WorkstreamRollupStatus = "not_started" | "active" | "blocked" | "done"; export declare function computeMilestoneRollup(taskStatuses?: unknown[]): TaskStatusCounts & { status: MilestoneRollupStatus; progressPct: number; }; export declare function computeWorkstreamRollup(taskStatuses?: unknown[]): TaskStatusCounts & { status: WorkstreamRollupStatus; progressPct: number; }; export type TaskCompletionReadiness = "ready" | "needs_proof" | "needs_review"; export interface TaskCompletionReadinessResult { ready: boolean; status: TaskCompletionReadiness; hasArtifact: boolean; hasSchemaValidatedArtifact: boolean; hasQualityScore: boolean; qualityScore: number | null; qualityThreshold: number; missingItems: string[]; warnings: string[]; } /** * Evaluate whether a task has sufficient proof chain evidence to be marked * complete. In phase 1 this is advisory (warn-only); callers decide whether * to hard-block or soft-warn based on workspace config. */ export declare function computeTaskCompletionReadiness(input: { artifacts?: Array<{ schema_validated?: boolean; atomic_unit_type?: string; }>; qualityScore?: number | null; qualityThreshold?: number; hasOutcomeEvent?: boolean; }): TaskCompletionReadinessResult; export type EvalPassRateDriftResult = { alert: boolean; baselinePassRate: number; rollingPassRate7d: number; dropPct: number; thresholdDropPct: number; baselineSamples: number; rollingSamples: number; }; export declare function detectEvalPassRateDrift(input: { passRates: unknown[]; thresholdDropPct?: number; rollingWindowDays?: number; baselineWindowDays?: number; }): EvalPassRateDriftResult | null;