Provenance & Receipts
Every live action is traceable end to end. A prepared action is not an executed action, and OAW keeps the stages separate and durable.
The economic-action ledger
SpendIntent (reservation + policy decision)
→ venue execution (adapter)
→ ExecutionReceipt / EconomicActionReceipt
→ audit event
Each receipt must trace back to: user → agent → AgentAuthority → VenueBinding → SpendIntent. If a receipt can't be attributed to that chain, it is a quarantine condition, not a successful action.
Three distinct record types
| Records | When | Holds |
|---|---|---|
| Binding lifecycle | pre-trade | VenueBinding.bindingPayload + binding audit (no money moved) |
| Spend / action | once a durable spend intent exists | reservation + policy decision + spend events |
| Order / execution receipts | after execution | ExecutionReceipt / EconomicActionReceipt |
Do not put binding lifecycle into spend events when no spend intent exists.
Reference vs live receipts
In the reference SDK, executeOrPlan returns a ref_-prefixed receipt and sets
referenceAdapter: true — a deliberate signal that no live venue order id exists. A
production adapter wires the real venue API and returns the venue's actual order id with
referenceAdapter: false.
// reference execution result (no live trade)
{ "status": "executed", "executionPerformed": true,
"referenceAdapter": true, "receiptId": "ref_rcpt_00001", "secretsExposed": false }
A receipt exists only when executionPerformed is true. A planned or
ready_but_live_locked result has receiptId: null. No secrets ever appear in a receipt.
This durable attribution is what makes autonomous trading auditable — and is the basis of the proposed provider-signed receipts in the upstream proposals.