Menu

D35. A plan never validated is a draft the agent writes; validated, it is the contract (13 Oct 2026, replaced by D52)

Replaced on 16 Oct 2026 by D52: the agent writes the plan before and after a validation; validating marks a version. draft_plan, planEverApproved, planFrozen and validatedOnce are gone. The entry is kept as the history of the choice. The « Nietzsche » course started from an empty plan: elabora init writes a placeholder, and rule 1 of AGENTS.md (« Never edit plan.json ») left the agent nothing but change requests against a plan nobody had validated, each to be applied by hand by an author who had no client and wanted their agent to write the plan. Options weighed: let agents edit plan.json freely while it is a draft (any draft, including the one an applied change request leaves until the client approves again, which would let changes the client never saw slip into the next approval); a command that writes the plan only while it was never validated; applying change requests by themselves on drafts (a ceremony with no one to hold it). Chosen (13 Oct): while the plan has never been validated, the agent writes it; once the author or the client validates it, it is frozen and every change goes through a change request, as before.

  • Never validated (@elabora/core planEverApproved, planFrozen from the files): the plan is not approved, has no approval, and no change request was ever applied (applying one removes the approval and leaves the request accepted, so a plan back to draft after a change keeps being the contract). A change request applied to a plan never approved makes it the contract too: a human decided on it.
  • draft_plan (CLI elabora plan draft [dir] (--from <plan.json> | --patch <patch.json>), MCP elabora_draft_plan { plan | patch }, edit draftPlan): the whole plan or a JSON Patch, checked against the plan’s schema before anything is written (refused with the schema’s words; a patch answers only for the faults it brings), written with status: "draft" and without approval, as one change of its author (an agent’s work shows as such in the history and the app). Refused once the plan was validated, naming the change request to propose instead. Agents may also edit plan.json directly and run elabora validate, which checks the same schema; the command is what the rules and the skill teach, since it checks at once and refuses a frozen plan.
  • Validation stays a human’s command (elabora plan approve, the app’s « Valider le plan… », no MCP tool), by the author themselves or for their client: the dialog asks whose name to record. The app’s Plan view said « Brouillon écrit par Claude Code, jamais validé » (the last change to plan.json in the history) and that the agent writes it until it is validated; since D50 it says « Brouillon, jamais validé », and traces the AI’s last change for the author only.
  • elabora plan status says « never validated » or « validated before »; elabora_get_plan gives validatedOnce; elabora plan voiceover and elabora_set_plan_voiceover write the voice-over in a plan never validated and propose it once it was. Rule 1 of the course AGENTS.md, the authoring skill, W_PLAN_DRAFT and E_PLAN_ITEM_UNCOVERED say so. Revisit if: authors want to unfreeze a plan they validated themselves without a client (an « undo the validation » while nothing was built on it), or clients ask to see the AI’s first draft as such in the proof dossier.