/** * The plan-negotiation state machine. A plan moves through: * * no-plan → draft (via propose) → frozen (via approve) * * Revise keeps draft as draft. Reopen moves frozen back to draft. The state * can only reach frozen via explicit approve from draft — never inferred. * * Pure (no I/O) so it is unit-tested directly. */ export type PlanState = "no-plan" | "draft" | "frozen"; export type PlanAction = "propose" | "revise" | "approve" | "reopen"; export declare function nextPlanState(current: PlanState, action: PlanAction): PlanState;