Skip to content

Verify a bundle

Choose a bundle zip. Your browser opens it, recalculates the sha256 of every file and compares it with manifest.json, adds up the playbacks in timeline.json and compares them with its totals, checks the human axis against the log, and checks the proof of when the run was played against the Archive's key. Nothing leaves your browser: there is no upload.

or drop the zip here <run-id>.zip, written by aas publish

If the bundle contains a signature.json, the signature over manifest.json is verified as well, and so are the Archive's own signatures in proof.json. Both need a browser that supports Ed25519.

What is checked

  1. Hashes: every file listed in manifest.json has the listed size and sha256; every file in the zip is listed, except manifest.json itself and the private part of an upload.
  2. Timeline: the segments' seconds add up to the real time; the playbacks' in-game time adds up to the in-game total; their wall time to the playback total; thinking equals real time minus playback time; every section's in-game time is the sum of the playbacks inside it; the summary's own figures match.
  3. Human axis: a run declared human: none has no run.human record in the published run. A run.human record after completed_at that is followed by a game.goal belongs to a goal extension that is not published yet, and does not count (SPEC §8.3).
  4. Proof: every ticket and receipt in proof.json is signed by the Archive's proof key, each head follows the one before it, and each receipt is for its head. When the zip holds the private part of an upload, every head is computed again from those logs, in your browser.

This is the same verification anyone can run with the tooling's aas check, except for the timeline format checks. Making the public log again from the private logs is done by aas check and by the Archive when a run is submitted, not here.