import type { WorkflowLifecycleProjection } from "../runtime/workflow-lifecycle-projection.js"; import { type ProjectReadBoundary } from "../io/bootstrap-write-boundary.js"; import { type ProjectReadSnapshot } from "../io/project-read-snapshot.js"; import type { CliRunResult } from "./bearshell.js"; import { type ClosureVerification } from "./workflow-closure-verification.js"; import { type TddClosureFinding } from "./workflow-tdd.js"; export type ClosureAction = "next" | "status"; type ClosureArchive = "complete" | "history-only-repair" | "pending"; type ClosureEvidence = "missing" | "present"; type ClosureFinish = "blocked" | "passed"; type ClosureReportStatus = "conflicting" | "filled" | "malformed" | "missing" | "template" | "unknown"; export type ClosureStepKind = "cli-command" | "human-or-model-content" | "terminal"; export type ClosureStepStatus = "blocked" | "complete" | "pending"; export declare const UNMAPPED_BLOCKER_STEP_ID = "unmapped-blocker"; export type ClosureTicket = { readonly id: string; readonly title: string; readonly path: string; readonly reviewArchiveCandidate: boolean; readonly state: "active-work" | "history-only" | "missing-work"; readonly technicalSignals: readonly string[]; }; export type ClosureBlocker = { readonly evidenceRef?: string; readonly id: string; readonly reason: string; readonly source: string; readonly tickets?: readonly ClosureTicket[]; }; export type ClosureStep = { readonly blockerId?: string; readonly command?: string; readonly commandAfterContent?: string; readonly evidenceRef?: string; readonly id: string; readonly kind: ClosureStepKind; readonly reason?: string; readonly source?: string; readonly status: ClosureStepStatus; }; export type WorkflowClosureState = { readonly archive: ClosureArchive; readonly blockers: readonly ClosureBlocker[]; readonly currentTicket: ClosureTicket | null; readonly evidence: ClosureEvidence; readonly finish: ClosureFinish; readonly implementationReport: ClosureReportStatus; readonly lifecycle: WorkflowLifecycleProjection; readonly pendingTickets: readonly string[]; readonly plan: string; readonly reportCoverage: "missing" | "not-checked" | "sufficient"; readonly reviewReport: ClosureReportStatus; readonly tdd: TddClosureFinding; readonly verification: ClosureVerification; }; export type ClosureStatusPayload = { readonly action: "status"; readonly state: WorkflowClosureState; readonly steps: readonly ClosureStep[]; }; export type ClosureNextPayload = { readonly action: "next"; readonly nextStep: ClosureStep | null; readonly state: WorkflowClosureState; readonly steps: readonly ClosureStep[]; }; export type ClosurePayload = ClosureNextPayload | ClosureStatusPayload; type WorkflowClosureReadOptions = { readonly consumeExternalAttestation?: boolean; readonly now?: Date; readonly projectReadBoundary?: ProjectReadBoundary; readonly projectReadSnapshot?: ProjectReadSnapshot; readonly recordTddGreenEvidence?: boolean; }; export declare function runWorkflowClosureCommand(action: ClosureAction, options: { readonly projectDir?: string; }): CliRunResult; export declare function readWorkflowClosurePayload(action: "next", projectDir: string, options?: WorkflowClosureReadOptions): ClosureNextPayload; export declare function readWorkflowClosurePayload(action: "status", projectDir: string, options?: WorkflowClosureReadOptions): ClosureStatusPayload; export declare function readWorkflowClosurePayload(action: ClosureAction, projectDir: string, options?: WorkflowClosureReadOptions): ClosurePayload; export declare function isUnmappedBlockerStep(step: ClosureStep | null | undefined): boolean; export declare function blockerStep(blocker: ClosureBlocker, state: WorkflowClosureState, status: ClosureStepStatus): ClosureStep; export {};