Menu

D70. The author approves a translated plan through their agent, who asks first (5 Nov 2026)

Until now the core refused an agent author that approved a translated plan (E_PLAN_PERSON_ONLY), as it refuses one that makes a version of the plan or records its validation (D52). For an author who works alone, with no client to validate plans and translations, this was a wall: on 5 Nov 2026 the sample modules’ sessions could not approve their translations although the founder asked them to, and the only way through was a false ELABORA_AUTHOR=human. The founder: an agent that warns before a generation costing much of the ElevenLabs quota (D29) is a good experience, and approvals could work the same way, above all for translations; plans are more dangerous to have validated by an agent, and they do not hold back publication.

Decided:

  • A translated plan is the author’s decision, which their agent carries out on their yes. approve_translation from an agent (elabora_translation_approve, elabora translate approve run by an agent) without authorApproved writes nothing: the MCP tool returns needsApproval, approval (the language, the translated plan’s contentHash, its title and number of items, its own texts translated or not, the name the approval would show) and ask, what to put to the author, in English for the agent to say in the author’s language. The CLI prints the same and exits with code 3, as voice generate without --spend. With the author’s yes the agent calls again with authorApproved, the contentHash it was given (CLI --author-approved). A plan translated differently, or whose source changed, in between has another hash: refused and asked again (E_TRANSLATION_ASK_AUTHOR), so no yes is ever carried over to a plan the author was not shown. A plan with texts left untranslated or stale is refused to the agent: translate first.
  • Who decided and who carried it out are both kept. The approval file (translations/<lang>.approval.json) holds by, the author’s name, and agent, the agent that recorded it (its name as the journal knows it); the journal’s entry is the agent’s, with authorApproved in its arguments, and elabora history says « recorded the author’s approval of the en plan, on their yes ». The translated course’s V1 carries validation.agent (schema plan-version 0.1.11). The app shows the approval as before; it is one change, which ⌘Z and elabora undo take back.
  • The name. An agent may leave by out: the approval then shows the author’s name as their earlier approvals through an agent show it (the latest one in the module). With none, approval.by is null and the agent asks the author’s name as it asks their yes. A client’s approval names the client, and is never used for this.
  • The same path everywhere. The MCP tool, the CLI, elabora tools call, the skill elabora-translation, the agent guide and the course rules (AGENTS.md, revision 20) say it. In Elabora’s chat, the app asks the author itself with a card when the agent calls with authorApproved, as it does for a paid generation: the click is the yes, and the agent does not ask in words first.
  • Plans stay people’s. plan version and plan approve keep refusing an agent (E_PLAN_PERSON_ONLY). A validation names a client who signed: an agent never records it. A version is what the author sends a client, with its notes for them; it holds nothing back (a module publishes without one), and the app makes one in a click (« Créer la V3 »). An author working alone has no use for versions beyond the diff, which the working copy already shows.

Weighed:

  • A switch « I work alone » that lets agents approve without asking. Rejected: the author would no longer see what they approve, and a module shared later would carry approvals nobody read. Asking costs one sentence.
  • A boolean authorApproved: true. Rejected: a yes would cover whatever the plan became since the question; the hash ties it to the plan shown, as approvedPercent ties a spend to its figure.
  • plan version on the same path. Possible, weighed against the founder’s words: not needed (nothing waits on a version) and closer to the client’s contract. Left as it is.

Revisit if: authors working alone want versions made by their agent (a snapshot before a large rewrite, for instance), or a client’s reviewer approves through an agent of their own.