export type ExecutionRouteMode = "fast" | "lifecycle-sequential" | "lifecycle-dag"; export type DeclaredExecutionRouteMode = "automatic" | ExecutionRouteMode; export type ExecutionTaskRisk = "low" | "medium" | "high"; export type ExecutionTaskCategory = "small-fix" | "multi-file-feature" | "test-failure" | "refactor" | "persistence-change" | "security-sensitive" | "read-only-analysis" | "conflicting-writes"; export type ExecutionMutation = "read-only" | "write"; export type ExecutionWriteIsolation = "none" | "worktree"; export type ExecutionParallelWriteSafety = "not-applicable" | "unverified" | "verified-disjoint" | "conflicting"; export interface ExecutionTaskFeatures { category: ExecutionTaskCategory; risk: ExecutionTaskRisk; expectedSteps: number; independentBranchCount: number; durabilityRequired: boolean; mutation: ExecutionMutation; writeIsolation: ExecutionWriteIsolation; /** Result derived from the immutable BUILD DAG's reviewed resource/write-set contracts. */ parallelWriteSafety: ExecutionParallelWriteSafety; } export interface TrustedExecutionPolicy { /** An explicit mode is a trusted user pin. */ mode: DeclaredExecutionRouteMode; /** Maximum autonomy available to automatic routing. */ maxMode: ExecutionRouteMode; /** Permission only; worktree isolation and independent writes are still required. */ allowParallelWrites: boolean; } export interface ProjectExecutionPolicy { /** Repository policy may reduce an automatic route, never expand it or override a user pin. */ requestedMode?: DeclaredExecutionRouteMode; /** Repository-local ceiling applied only when compatible with the derived safety floor. */ maxMode?: ExecutionRouteMode; /** `false` can disable; `true` cannot create trusted permission. */ allowParallelWrites?: boolean; } export interface ExecutionRoutingInput { user: TrustedExecutionPolicy; task: ExecutionTaskFeatures; project?: ProjectExecutionPolicy; } export type ExecutionRouteReason = "user-pin" | "simple-low-risk" | "durability-required" | "elevated-risk" | "multi-step" | "independent-branches" | "user-ceiling" | "project-reduction" | "project-expansion-denied" | "project-reduction-denied-by-safety-floor" | "project-mode-ignored-by-user-pin" | "parallel-writes-user-permission-required" | "parallel-writes-project-disabled" | "parallel-writes-worktree-required" | "parallel-writes-conflict-declared" | "parallel-writes-disjoint-write-sets-required" | "parallel-writes-trusted-opt-in"; export interface ExecutionRouteDecision { mode: ExecutionRouteMode; source: "automatic" | "user-pin"; parallelWrites: boolean; projectReductionApplied: boolean; reasonCodes: readonly ExecutionRouteReason[]; /** Static, policy-authored explanations. No task or repository text is interpolated. */ explanations: readonly string[]; } export type ExecutionRoutingErrorCode = "invalid-input" | "unexpected-field" | "user-pin-exceeds-ceiling" | "no-permitted-mode"; export declare class ExecutionRoutingError extends Error { readonly code: ExecutionRoutingErrorCode; constructor(code: ExecutionRoutingErrorCode); } export declare function routeExecution(input: ExecutionRoutingInput): Readonly;