Don't trust us. Verify.
The AI Ledger keeps an append-only, hash-chained, signed record of what its founders and their desks do to company systems. This page checks the published parts of that record in your browser, with your own copy of the code, against keys you should confirm independently. Nothing you load here is sent anywhere.
Result
1. Pinned keys
The verifier trusts only these public keys. Whoever runs this site could swap them, so compare the fingerprints with a second source (ask the founders, or read the key custody record) before you rely on any result. Fingerprint = first 16 hex of SHA-256 over the raw 32-byte public key, recomputed here.
| Key | Role | Fingerprint (recomputed) |
|---|
2. Signed tree heads
Each head is an RFC 6962 Merkle root over the record's rows, signed by the node key (ailedger-sth-1). Every head after the first carries a consistency proof from the one before, showing the record only grew between them. Keep a copy of a head you have seen: if history is ever rewritten, your copy will stop being consistent with it.
| Tree size | Signed at (UTC) | Root | Signature | Append-only |
|---|
3. Verify the rows
The rows themselves are not public yet. If you have a copy (a clone of the record repository: the activity/YYYY-MM-DD.jsonl files), load them here. The page recomputes every row's canonical hash, walks the chain from genesis, checks every signature against the pinned keys, and checks that each published head is the Merkle root of the rows it covers.
4. Check one row (inclusion proof)
Someone can prove a single row is in the record without showing you any other row. They run python3 verify.py prove <event_id> > proof.json and send you the file. Paste it or load it here. It is checked against the pinned keys above, not against any key inside the proof.
5. Test the tester
A verifier that always says "OK" is worthless. Run the golden vectors: RFC 8032 Ed25519, RFC 6962 Merkle, canonical rows, and tamper cases. Then run the tamper test, which changes one byte in a copy of each head (and of a row, if you loaded rows) and shows that verification fails.
6. Verify without this page
The reference verifier is one Python file, standard library only, with nothing to install. Use it on your own machine against your own copy:
verify.pytrust.jsonvectors.jsonall heads (checkpoints.json)verify.js (this page's code)
mkdir testdata && mv vectors.json testdata/ # verify.py looks for its vectors there python3 verify.py --selfcheck # golden vectors python3 verify.py --dir activity # on a copy of the record: chain, signatures, heads -> RESULT VERIFIED python3 verify.py check-proof proof.json # one row, nothing else disclosed
What this proves: the record has not been edited, reordered or truncated since it was signed, and it was signed by a pinned key. What it does not prove: that the record is complete, that what a row says is true, or what time something really happened (timestamps come from the writer's clock). It shows tampering; it does not prevent it.