Plan a MELRA task
melra_planPersist a bounded task, evaluate policy, and return a scoped approval challenge without executing. Execution is deferred; policy denials return as normal policy_blocked results.
Instructions
Persist a bounded task, evaluate policy, and return any scoped approval challenge without executing. Nothing runs until melra_execute. A policy denial comes back as a normal result with status policy_blocked and a reason, not as an error. Any operation that is not a read needs requiredEvidence, and constraints must stay empty.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Why this task is being run, in one human-readable sentence. | |
| budget | No | ||
| identity | No | Who is asking, and on whose behalf. Recorded on the task and every receipt, and matched against policy.capabilities when the operator has issued grants. Omitted means the implicit local principal. | |
| operation | Yes | ||
| constraints | No | Leave empty. Freeform prose cannot be enforced, so a non-empty array is denied with freeform_constraints_not_enforceable. Express real limits as forbiddenEffects, budget, or requiredEvidence. | |
| reconciliation | No | How to settle this effect if MELRA never learns whether it happened — a request that went out and was never answered, or a crash mid-flight. Read against the facts that were true before the call (idempotencyKey, url, method), never against a response, because there is none. Declaring these makes the executionGuarantee reconciliation-required instead of at-most-once. | |
| forbiddenEffects | No | Effects this task must never take. Denied before the adapter runs, and honoured even in unhinged mode. | |
| requiredEvidence | No | Predicates that must hold after execution for the task to be verified_success. Required for any non-read operation: a mutation with none is denied with mutation_requires_evidence. An adapter that succeeded while a predicate failed is partial, never success. |