import { type CompiledGraph, type SideEffectClass } from "./graph.js"; export type BuildHandlerKind = "inspect" | "design" | "implement" | "validate" | "integrate"; export type BuildToolPolicy = "read-only" | "declared-writes" | "reviewed-validation" | "human-integration"; export type BuildWorkspace = "shared" | "isolated-worktree"; export type BuildIdempotencyPolicy = "none" | "keyed" | "read-replay-safe"; export type BuildContractKind = "artifact" | "file-set" | "evidence"; export type BuildValidationKind = "exists" | "sha256" | "structured" | "reviewed-command" | "human-review"; export type BuildResourceKind = "path" | "logical"; export type BuildResourceMode = "shared" | "exclusive"; export interface BuildOutputContract { id: string; kind: BuildContractKind; validation: BuildValidationKind; validatorRef?: string; } export interface BuildResourceLock { kind: BuildResourceKind; value: string; mode: BuildResourceMode; } export interface BuildNode { id: string; handler: BuildHandlerKind; priority: number; objective: string; instructions: string[]; acceptanceCriteria: string[]; verificationCommands: string[]; inputContracts: string[]; outputContracts: BuildOutputContract[]; toolPolicy: BuildToolPolicy; sideEffect: SideEffectClass; workspace: BuildWorkspace; targetWorktreeNodeId?: string; idempotency: BuildIdempotencyPolicy; resourceLocks: BuildResourceLock[]; writeSet: string[]; retryLimit: number; timeoutMs: number; } export interface BuildDependency { from: string; to: string; contracts: string[]; } export interface BuildJoin { nodeId: string; mode: "all_of"; } export interface BuildPlan { schemaVersion: 1; id: string; planVersion: number; summary: string; entry: string; exit: string; nodes: BuildNode[]; dependencies: BuildDependency[]; joins: BuildJoin[]; } export interface BuildPlanLimits { maxSerializedBytes: number; maxSummaryBytes: number; maxNodes: number; maxDependencies: number; maxFanOut: number; maxContractsPerNode: number; maxResourceLocksPerNode: number; maxWritePathsPerNode: number; maxTotalDeclaredPaths: number; maxWriteNodes: number; maxExternalNodes: number; maxRetryLimit: number; maxTimeoutMs: number; maxPriority: number; } export interface BuildSchedulerMetadata { priorities: Readonly>; } export interface BuildNodePolicy { handler: BuildHandlerKind; toolPolicy: BuildToolPolicy; workspace: BuildWorkspace; targetWorktreeNodeId?: string; idempotency: BuildIdempotencyPolicy; resourceLocks: readonly Readonly[]; writeSet: readonly string[]; } export interface CompiledBuildPlan { plan: Readonly; hash: string; canonicalJson: string; graph: CompiledGraph; schedulerMetadata: Readonly; nodePolicies: Readonly>>; } export declare const DEFAULT_BUILD_PLAN_LIMITS: Readonly; export declare function compileBuildPlan(value: unknown, limits?: Readonly): CompiledBuildPlan; /** * Compatibility bridge for an already-approved prose-only plan. Topology is * never parsed from Markdown: the entire legacy BUILD is one shared writer, * and the caller must provide the explicit repository scope captured at * migration time. */ export declare function compileLegacySequentialBuildPlan(planTextValue: string, planVersion: number, writableRepositoryRootsValue: readonly string[]): CompiledBuildPlan; /** * Compare re-plans by their executable content while excluding the immutable * reservation number. A new planVersion alone is not evidence of progress. */ export declare function buildPlanContentFingerprint(compiled: Readonly): string; /** Render human-facing Markdown only from the validated canonical graph. */ export declare function renderBuildPlanMarkdown(compiled: Readonly): string;