Plan
A plan is stateless. It reads the action’s declared dependencies at the latest published capture and returns exactly what will change. It writes nothing — no draft, no pending row, no confirmation token. There is no plan store, so there is no such thing as executing a plan that went stale in a drawer.Execute
Execution is the only thing that mutates, and it is what produces the record. It re-resolves the authoritative dataset transaction and refuses a stale plan.Decision evidence
Every plan and everyActionExecuted fact carries one bounded
decision_evidence object containing exactly the target fields declared by
the action’s reads contract.
This is the durable witness for why the decision rendered as it did. It is
deliberately not a source snapshot or an arbitrary row dump: an unbounded dump
would grow without limit, carry data under retention rules the ledger was not
designed for, and make it ambiguous which part the decision actually turned on.
Outbound operations
An outboundinvoke is one exact model-declared HTTP operation using the closed
POST / PUT / PATCH / DELETE method set and one closed body contract (JSON, form,
multipart-form, multipart-related, or raw file).
The sequence is fixed:
1
Record durable intent
Execution records intent and enqueues the job atomically.
2
Reconstruct the operation
One provider-neutral worker rebuilds the revisioned operation and injects its
declared static fields, credentials, and replay token — credentials only
after durable intent, and never into the retained request.
3
Apply the delivery contract
The operation’s
keyed, convergent, or once contract governs delivery.4
Record the terminal event
Status, a bounded response digest, declared acknowledgement scalars, and a
closed structured failure when applicable.