Skip to main content

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

RecordsWhenHolds
Binding lifecyclepre-tradeVenueBinding.bindingPayload + binding audit (no money moved)
Spend / actiononce a durable spend intent existsreservation + policy decision + spend events
Order / execution receiptsafter executionExecutionReceipt / 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 }
caution

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.