AI flight recorderPrototype 2

← All runs

Chris Vale's request

Started . 1 proposed action.

  1. Chris Vale asked for help.
    “I want my money back for order 1201, the headphones are not what I expected.”
  2. fraud check (toy) flagged this customer.
    “Five refund requests in the last week.”

Refund $30 for order 1201

Blocked by a rule
Asked→Proposed→Blocked
  1. The support agent proposed a $30 refund for order 1201.
    “Customer is unhappy with the headphones. Refund $30.”
  2. Blocked by the rule “Block if the customer is flagged”. Nothing was done.

Receipt

The receipt holds every step of this run, its fingerprint, and the outside timekeepers' proofs, so anyone can see if a step was changed or removed, and by when each step happened.

It proves these steps were recorded in this order, and that none was changed or removed afterwards. It doesn't prove the AI's reasoning was right, who a person really is, or what happened outside this record.

4 of 4 steps sent to the outside timekeepers. Confirmed by the outside timekeeper (FreeTSA): 4. Locked into Bitcoin: 4 confirmed.

The free checker runs in your browser and sends nothing to us. Drop the receipt in: it shows each step with the time the outside timekeeper confirmed, and one verdict.

Show the technical details
Chain check (run by this server): Intact: 4 steps, each pointing at the one before, none changed.
Run id run-fa2v2uw8wr · rules rules-v1#6ad3916fe682caed · build attesto-flight-recorder@proto-2.1 · effects waiting 0
#FactTagWhoTimeHashPrev
1request.receivedclaimedChris Vale02:12:17Z3414ca770c8e…000000000000…
2customer.flaggedobservedfraud check (toy)02:12:18Zd535432825b6…3414ca770c8e…
3action.proposedclaimedSupport agent02:12:18Z1b57c952e8b8…d535432825b6…
4action.blockedobservedYour rules02:12:18Za234574d59d8…1b57c952e8b8…
How the chain works. Each step is written as canonical JSON (keys sorted, no spaces) and fingerprinted with SHA-256. Each step includes the fingerprint of the step before it ("prev"); the first points at 64 zeros. Changing or removing any step breaks every fingerprint after it. Tags: observed = we saw it, claimed = someone says so (the customer, the AI, the approver), attested = an outside witness signed it. Each step's fingerprint is also sent, as a checkpoint, to the shared evidence service: it is batched with other checkpoints into a Merkle tree whose root FreeTSA timestamps (RFC 3161) and OpenTimestamps anchors in Bitcoin. Those proofs are in the receipt, not in this chain. Free text is stored outside the chain; the chain holds only its fingerprint.
#1 request.received
{
  "v": "proto-2",
  "runId": "run-fa2v2uw8wr",
  "seq": 1,
  "prev": "0000000000000000000000000000000000000000000000000000000000000000",
  "how": {
    "build": "attesto-flight-recorder@proto-2.1",
    "rules": "rules-v1#6ad3916fe682caed",
    "traceId": "a4bbc708fcec685d"
  },
  "type": "request.received",
  "at": "2026-10-17T02:12:17.511Z",
  "who": {
    "kind": "customer",
    "id": "cust-chris",
    "name": "Chris Vale"
  },
  "tag": "claimed",
  "source": "customer message",
  "data": {
    "textHash": "451ab3d1d0287ed7eabd3935dd92d53a7bec373a026008f9ade81503d127084e"
  },
  "hash": "3414ca770c8ecae5c6a2e1375476d6806f81a6fdcf5f017ca9fcc05b8f393c40"
}
#2 customer.flagged
{
  "v": "proto-2",
  "runId": "run-fa2v2uw8wr",
  "seq": 2,
  "prev": "3414ca770c8ecae5c6a2e1375476d6806f81a6fdcf5f017ca9fcc05b8f393c40",
  "how": {
    "build": "attesto-flight-recorder@proto-2.1",
    "rules": "rules-v1#6ad3916fe682caed",
    "traceId": "a4bbc708fcec685d"
  },
  "type": "customer.flagged",
  "at": "2026-10-17T02:12:18.145Z",
  "who": {
    "kind": "system",
    "id": "fraud check (toy)",
    "name": "fraud check (toy)"
  },
  "tag": "observed",
  "source": "fraud check (toy)",
  "data": {
    "flagged": true,
    "reasonHash": "2d2790deb19841d28257ec7a687f936ccfa7b96cff8d2eb3c950b69fec3106fb"
  },
  "hash": "d535432825b6a61deb7178d21a36f9b88f192043b9c30c42a1f25bcf3364c897"
}
#3 action.proposed
{
  "v": "proto-2",
  "runId": "run-fa2v2uw8wr",
  "seq": 3,
  "prev": "d535432825b6a61deb7178d21a36f9b88f192043b9c30c42a1f25bcf3364c897",
  "how": {
    "build": "attesto-flight-recorder@proto-2.1",
    "rules": "rules-v1#6ad3916fe682caed",
    "traceId": "a4bbc708fcec685d",
    "agent": "Support agent@toy-0.1"
  },
  "type": "action.proposed",
  "at": "2026-10-17T02:12:18.331Z",
  "who": {
    "kind": "agent",
    "id": "agent:toy-support",
    "name": "Support agent",
    "version": "toy-0.1"
  },
  "tag": "claimed",
  "source": "agent proposal",
  "data": {
    "proposalId": "p-kkdwyjjx77",
    "action": {
      "kind": "refund",
      "orderId": "1201",
      "amountCents": 3000,
      "currency": "USD"
    },
    "reasonHash": "410e499155382e51ef9bae3e4f75a34741b31a99e41f912280dc56aac8807c8e"
  },
  "hash": "1b57c952e8b872023671629b78eecbf097f140197ac2567c01efecc50f8db77d"
}
#4 action.blocked
{
  "v": "proto-2",
  "runId": "run-fa2v2uw8wr",
  "seq": 4,
  "prev": "1b57c952e8b872023671629b78eecbf097f140197ac2567c01efecc50f8db77d",
  "how": {
    "build": "attesto-flight-recorder@proto-2.1",
    "rules": "rules-v1#6ad3916fe682caed",
    "traceId": "a4bbc708fcec685d",
    "agent": "Support agent@toy-0.1"
  },
  "at": "2026-10-17T02:12:18.331Z",
  "who": {
    "kind": "rules",
    "id": "rules",
    "name": "Your rules"
  },
  "tag": "observed",
  "source": "decide()",
  "type": "action.blocked",
  "data": {
    "proposalId": "p-kkdwyjjx77",
    "rule": {
      "id": "flagged-customer",
      "name": "Block if the customer is flagged"
    },
    "checked": [
      {
        "ruleId": "flagged-customer",
        "matched": true
      }
    ]
  },
  "hash": "a234574d59d8fd6adf4b58511e8a865f4a3b854eaa323d02529170c548a65ad8"
}