export type CriticalPathUnitState = "pending" | "active" | "completed" | "cancelled"; export type CriticalPathExecutor = "luna" | "other"; export type CriticalPathDeadlineObservation = "within_deadline" | "deadline_exceeded" | "unknown"; export type CriticalPathFailureObservation = "not_repeated" | "repeated" | "unknown"; export interface CriticalPathUnitObservation { readonly unit_id: string; readonly depends_on: readonly string[]; readonly state: CriticalPathUnitState; readonly executor: CriticalPathExecutor; /** Caller-owned observation. This module never reads a clock or derives a duration. */ readonly deadline: CriticalPathDeadlineObservation; /** Caller-owned observation. This module never reads or mutates an attempt ledger. */ readonly failures: CriticalPathFailureObservation; } export interface CriticalPathInput { readonly units: readonly CriticalPathUnitObservation[]; readonly active_takeover_count: number; } export type CriticalPathRejectionCode = "invalid-input" | "invalid-state" | "duplicate-unit" | "unknown-dependency" | "cycle"; export type CriticalPathRuntimeObligation = "accepted-base" | "same-contract" | "source-stopped" | "exclusive-writer" | "final-validation" | "final-review" | "candidate-cas"; export type CriticalPathTakeoverTrigger = "live_deadline_exceeded" | "live_repeated_failure"; export type CriticalPathResult = { readonly status: "rejected"; readonly code: CriticalPathRejectionCode; readonly unit_id: string | null; } | { readonly status: "none"; readonly reason: "active-takeover" | "no-conservative-blocker"; } | { readonly status: "proposed"; readonly unit_id: string; readonly reason: "deadline_exceeded" | "repeated_failure"; readonly structural_basis: "sole-unfinished-direct-dependency-with-completion-reachability"; readonly runtime_obligations: readonly CriticalPathRuntimeObligation[]; }; /** * Pure, conservative structural decision support. It does not estimate duration: a unit blocks only * when it is the sole unfinished direct dependency of a downstream node that can reach the virtual * completion sink. The sink depends on every DAG leaf, making the last unfinished leaf observable. * Runtime remains responsible for every obligation returned with a proposal. */ export declare function proposeCriticalPathTakeover(input: unknown): CriticalPathResult; /** Preserve the policy reason as a runtime trigger without conflating terminal quality rescue. */ export declare function criticalPathTakeoverTrigger(proposal: Extract): CriticalPathTakeoverTrigger;