Snapshots and verification

The snapshot is the one thing the model is allowed to know. Making it a hashed file, written before the model is called, is what lets anyone check later that a decision was made on exactly these facts.

What is in a snapshot

{
  "v": 1,
  "agent": { "id": "...", "thesis": "..." },
  "at": "2026-10-15T10:04:00.000Z",
  "nyseSession": "pre",
  "minutesToCloseIfOpen": null,
  "ethUsd": 2372.04,
  "book": { "navUsd": ..., "cashUsd": ..., "cashWeightPct": ..., "indexSinceStartPct": ...,
            "drawdownFromHighPct": ..., "todayPct": ..., "equalWeightBenchmarkUsd": ..., "paused": null },
  "assets": [ { "sym": "NVDA", "priceUsd": ..., "changePct": { "h1": ..., "h6": ..., "d1": ..., "d3": ... },
                "poolFeePct": 0.05, "impactPctPer1000Usd": ..., "holdingUsd": ..., "weightPct": ... }, ... ],
  "recentDecisions": [ { "at": "...", "target": { ... }, "why": "..." } ],
  "rules": { "maxWeightPct": 35, "minCashPct": 10, ... }
}

Prices come from the pools. The changes are computed against 5 minute averages from the pool oracle, so one odd tick does not become "the one hour change". impactPctPer1000Usd is the estimated move of the pool for a $1,000 buy, so the model can see which stocks are thin.

Canonical form and the hash

The snapshot is serialised with object keys sorted alphabetically and numbers rounded (prices to 4 decimals, percentages to 2). The SHA-256 of that exact string is the snapshot's name: snapshots/<hash>.json. The model receives the same string.

Verify one yourself

  1. Open the agent's page and pick a decision. It shows a hash.
  2. Paste it in the verifier. Your browser downloads snapshots/<hash>.json, hashes the bytes with the Web Crypto API, and compares.
  3. It also parses the file and serialises it again: if the canonical form is stable, parsing and re-serialising gives the same bytes.

You can do the same from a terminal:

curl -s https://<site>/data/<agent>/snapshots/<hash>.json | shasum -a 256

The result must equal the hash in the file name.

What this proves, and what it does not

It proves that the file you read is the file the engine wrote under that name, and that the decision line in the journal carries that hash. It does not prove that the engine hid nothing: for that you read the code, which is short, and run the same engine in paper mode on the same pools.

The prices inside a snapshot can be checked against the chain: call slot0 on the pool at the block of the snapshot's time. Nothing in it comes from a private source.