Agent
Verifiable Debate Ledger

Verifiable Debate Ledger (VDL)

The VDL is a hash-chained decision log that makes every agent decision — acted or declined — tamper-evident and replayable.

Design

Decision N-1                    Decision N                      Decision N+1
┌────────────┐                 ┌────────────┐                 ┌────────────┐
│ plan_hash  │────prev_hash───▶│ plan_hash  │────prev_hash───▶│ plan_hash  │
│ prev_hash  │                 │ prev_hash  │                 │ prev_hash  │
│ timestamp  │                 │ timestamp  │                 │ timestamp  │
│ verdict    │                 │ verdict    │                 │ verdict    │
│ ...        │                 │ ...        │                 │ ...        │
└────────────┘                 └────────────┘                 └────────────┘

How It Works

  1. Every decision produces a plan — the structured data representing what the agent decided
  2. The plan is canonicalized (deterministic JSON serialization)
  3. plan_hash = sha256(canonical(plan))
  4. Each record links to the previous record's hash → hash chain
  5. Any tampering breaks the chain — downstream hashes won't match

Record Fields

FieldDescription
plan_hashSHA-256 of the canonical decision plan
prev_hashLink to the previous record (chain integrity)
timestampWhen the decision was made
verdictexecuted or declined
actedBoolean — did the agent take action?
actionallocate, deallocate, or null (stood still)
reasonHuman-readable explanation of the decision
net_edgeThe computed net-edge value at decision time
txTransaction signature (if acted)
signal_receiptPay.sh receipt (tx sig, amount, payee) if signals purchased

Replay Guarantee

Given the same inputs at the same point in time, the same plan_hash is reproduced. This means:

  • An auditor can take the recorded inputs and verify the agent's logic would produce the same output
  • If the plan_hash doesn't match on replay → something was tampered with
  • The hash chain prevents selective deletion or insertion of records

What Gets Recorded

Everything. Not just allocations:

EventRecorded
Agent allocates into venue✓ (with tx, amount, net_edge)
Agent deallocates from venue✓ (with tx, amount)
Agent declines (net_edge ≤ 0)✓ (with reason, computed costs)
Signal purchased✓ (receipt attached to decision)

Storage

VDL records are stored per-chain, per-vault in the backend's data directory:

app/backend/data/
  history-solana-{vault_address}.json
  history-arc-{vault_address}.json
  history-giwa-{vault_address}.json

TEE Binding

When a decision runs inside an AWS Nitro Enclave, the plan_hash is bound to the attestation document:

Enclave produces plan_hash
  → plan_hash embedded in attestation user_data field
    → Attestation signed by AWS Nitro hardware
      → Anyone can verify: this plan came from this code on real hardware

API

The VDL is exposed via the backend API:

GET /api/ledger?chain=solana&wallet=...
→ Returns the decision history for that vault

Each entry includes the plan_hash, verdict, reason, and any associated transaction or signal receipt.