OpenChainGraph · Explainer 5 steps and two commands

Check that the page you use is the page we shipped

Every deploy of ainumbers.co publishes a manifest of what it shipped and a sha256 line for every published file. This page walks both files, runs the two checks any reader can run against the live site, and ends at the git commit the whole snapshot can be rebuilt from.

Presenter mode shows one step per screen. Arrow keys move, A toggles autoplay, Esc exits.
Every value on this page was fetched from the live site and checked on 2026-10-03, against the deploy run whose manifest was written at 2026-10-03T13:11:46Z. The commands are on the page, so the same checks run again on any later deploy.
Part one · The manifest and the list

What ships with a deploy

Two small files under /.well-known/ carry everything a reader needs to test what the site serves.

1
Step 1 · The two files

Two files travel with every deploy

A deploy that can be checked after the fact is a testable claim. Each deploy run writes a manifest describing the run and a checksum list covering every published file, and serves both from the site root.

one deploy runsite deploy .well-known/deploy-manifest.jsonthe run: commit, time, count, digest .well-known/deploy-checksums.txtone sha256 line per published file both served from/.well-known/fetchable by anyone

The manifest, /.well-known/deploy-manifest.json, describes one deploy run: the commit it shipped, the time it ran, the number of files it published and the digest that pins the list. The list, /.well-known/deploy-checksums.txt, carries one <sha256> <path> line per published file in sha256sum format, sorted by path. Three names sit outside the list by design: the manifest and the list themselves, since a file cannot contain its own hash, and deploy-stamp.json, whose bytes carry a run timestamp no later check could reproduce.

Give this to an agentread-only
Fetch https://ainumbers.co/.well-known/deploy-manifest.json and https://ainumbers.co/.well-known/deploy-checksums.txt. Report deployed_commit, generated_at, file_count, site_content_digest and the number of lines in the list.
2
Step 2 · Reading the manifest

The manifest names its own evidence

Each field in the manifest is a checkable claim, and the most useful one pins the list. site_content_digest is the sha256 over the exact bytes of the checksum list, so the two files stand together.

deploy-manifest.json deployed_commit generated_at file_count site_content_digest site_content_digest = sha256(exact bytes of the list)2ccd98c573bc9465…317fce9e
FieldWhat it holdsValue in the 2026-10-03 snapshot
schemaThe manifest format, versionedainumbers/deploy-manifest@v1
deployed_commitThe git commit whose tree the run checked out and shipped77c7431a1d5c55a25c04a557ce4ee04ff7368db5
generated_atWhen the deploy run wrote the manifest (UTC)2026-10-03T13:11:46Z
file_countHow many published files the list covers9912
site_content_digestsha256 over the exact bytes of the checksum listsha256:2ccd98c573bc9465f50f1f57041244869536b2ddcab8b5d4b033f8ff317fce9e

Two of these link straight to git. deployed_commit names one commit on the main branch of the public repository, and the snapshot above resolves to a single commit whose subject begins chore(derived): regenerate shared derived artifacts on main. file_count agrees with the list line for line: 9912 lines, 9912 published files on the snapshot date. The digest closes the loop between the two files: hash the list you downloaded and the digest must come out the same, which it did on 2026-10-03.

Give this to an agentsha256
Hash the downloaded deploy-checksums.txt with sha256 and compare the hex digest with site_content_digest from the manifest. Also compare the list line count with file_count. Report both pairs of values and whether they match.
Part two · Two commands against the live site

Run the checks

One command checks a file against the list. One command checks the list against its attestation.

3
Step 3 · The file check

Check one file against the list

The list turns "the site shipped this page" into arithmetic. Download any published file, hash it, and its line in the list must carry the same digest.

the file you downloadedany published page sha256sum over its bytes5f63996f2f608178…1c4e8cca deploy-checksums.txtline 41 names the same file5f63996f…1c4e8ccathe digests agree
The checkcurl + sha256sum
curl -fsSL https://ainumbers.co/chaingraph/agent-staircase-explainer.html -o page.html
curl -fsSL https://ainumbers.co/.well-known/deploy-checksums.txt -o sums.txt
sha256sum page.html
grep "agent-staircase-explainer" sums.txt
The check, run on 2026-10-03Result
sha256sum page.html5f63996f2f6081787fa5a52b02189754c2580d9f70e6bd39828b23d51c4e8cca
line 41 of sums.txt5f63996f2f6081787fa5a52b02189754c2580d9f70e6bd39828b23d51c4e8cca chaingraph/agent-staircase-explainer.html
Verdictthe two digests agree

Any published file works the same way, from a tool page to chaingraph/chaingraph.json itself. A file whose hash differs from its list line has changed since the deploy, and a file whose name has no line at all was never part of that deploy.

Give this to an agentcurl + sha256sum
Pick any file from the checksum list, download it from the site, run sha256sum on it, and confirm its digest equals the digest in its list line. Report the file, the two digests and the verdict.
4
Step 4 · The attestation

Check the list against its attestation

The deploy run signs what it produced. GitHub records an artifact attestation for both provenance files, and one command fetches the statement and verifies its signature against the repository.

the downloaded listsha256 2ccd98c5…fce9e gh attestation verifySLSA provenance, signedvia Sigstore keylessexit 0 on 2026-10-03 the deploy workflowat refs/heads/maincommit 77c7431a…8db5Rekor entry, same day
The checkgithub cli
gh attestation verify sums.txt --repo PostOakLabs/ainumbers
What the verified statement said on 2026-10-03Value
Command resultexit 0
Signing identitythe site deploy workflow at refs/heads/main
Commit named by the signature77c7431a1d5c55a25c04a557ce4ee04ff7368db5
Subjects covered by the statementdeploy-manifest.json and deploy-checksums.txt
Subject digest for the list2ccd98c573bc9465f50f1f57041244869536b2ddcab8b5d4b033f8ff317fce9e
Transparency logRekor entry timestamped 2026-10-03T13:12:01Z

Three facts in the statement deserve a read. The signing identity is the site deploy workflow on the main branch, so the signature names the pipeline that produced the bytes. The commit inside the signature is the same commit the manifest names as deployed_commit, and the subject digest for the list equals the digest the manifest publishes as site_content_digest. The statement and its Rekor transparency log entry stay retrievable after the deploy is long gone. The attestation is a process claim: this workflow, at this commit, produced these bytes; whether the content is correct is what the checks around it decide. The step is advisory today: the deploy treats an attestation failure as non-fatal, so a green deploy does not promise a fresh attestation, and the command above is how you find out.

Give this to an agentgithub cli
Run gh attestation verify on the downloaded deploy-checksums.txt against the PostOakLabs/ainumbers repository. Report the exit code, the signing workflow identity, the commit named by the signature and the attestation subjects.
Part three · The whole loop

Rebuild it from the commit

The manifest stays honest because its derivation is repeatable by anyone with a checkout.

5
Step 5 · The rebuild

Rebuild the evidence from source

Check out the commit the manifest names, rebuild the list the way the deploy builds it, and compare bytes with what the site serves. Agreement from both directions is what makes the snapshot worth trusting.

git checkout77c7431a…8db5 rebuild the listsort the paths, sha256sum the filessame format as published bytes agreerebuilt list = served listdigest = site_content_digest

The derivation is plain shell: walk the published tree, leave out the working files no visitor needs, sort the paths, and sha256sum the lot in sha256sum format. The published list follows that exact recipe, so a checkout at deployed_commit reproduces it line for line, and hashing your rebuilt list must yield site_content_digest. The deploy pipeline runs a version of this loop after every deploy: it re-fetches a sample of the listed URLs and hashes the bytes the edge actually serves, so a mismatch between the repository and the visitor is caught on the pipeline side too.

Give this to an agentgit + shell
Clone https://github.com/PostOakLabs/ainumbers and check out the commit in deployed_commit. Rebuild a sha256sum-format list over the published files, sorted by path, then compare it with the served https://ainumbers.co/.well-known/deploy-checksums.txt. Report the first differing line, if any.
🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.