Publishing results
For the engineer wiring real data. One command takes an engine run to a figure on /benchmarks, with nothing to change in the site's code.
The site has no numbers in it. It reads public/data/index.json and, from there, each run's own bundle. Publishing a result means adding a verified bundle to public/data/ in this repository and committing it.
Fix the protocol before the run
Every value the protocol leaves empty has to be agreed first. Then hash it and post the hash before the first intent.
cd bench
python3 -m rbench.prereg check protocols/E0-landing-probe.json # lists what is still unagreed
python3 -m rbench.prereg hash <finalized protocol> # goes into manifest.protocol_sha256A finalized protocol is a copy with "status": "finalized" and no null left in parameters or acceptance. Keep it next to the run, not over the draft.
Record the run (engine)
The engine writes one folder per run: manifest.json, intents.jsonl (every intent, gap-free seq), attempts.jsonl (one row per signed copy) and clock.jsonl. Put it under bench/runs/<run_id>/, which is git-ignored because raw runs are never committed unredacted. Formats: Bundle data contracts.
Publish it: one command
RBENCH_RPC_URL=<an rpc you trust> RBENCH_RPC_LABEL="<who runs it>" \
npm run publish-run -- bench/runs/<run_id> <finalized protocol>It runs four steps and stops at the first problem:
- Verify from chain. Every signature is read from your RPC, and arms, schedule and anchors are recomputed. A claimed figure that differs stops publication. Integrity problems are published, shown above every figure.
- Package for the tier. Redacts what the public tier may not see and writes
SHA256SUMS. Only a run registeredpublicbefore it started can be published here. - Rebuild
public/data/index.json. - Check every bundle with the site's own contracts: hashes, finalized protocol, class sums, and Δslot quantiles recomputed from the rows.
For a STEP0 protection-gap result:
npm run publish-step0 -- <data dir from rbench.step0_extract> <finalized STEP0 protocol> <name>Review, commit, deploy
npm run check # verifier tests, site tests, types, build, bundle check
git add public/data && git commit -m "Publish <protocol> run <run_id>"On the next build, the run shows up on the overview, in run history, on its own page and in the ⌘K palette, and every question it answers flips from "Not measured". CI runs the same checks on every push.
Hosting bundles elsewhere
To serve bundles from another origin instead, publish them there with the same commands and build with NEXT_PUBLIC_BENCH_INDEX_URL=https://<host>/index.json. That origin must allow the site's origin (CORS). The variable wins over public/data/.
Where each file shows up
| File | Page |
|---|---|
index.json | Overview status and focus, run history, the ⌘K palette, question status |
metrics.json | Run page: result, differences, quantiles, outcomes, cost, conditions, routes, engine timing |
intents.jsonl, observations.jsonl, attempts.jsonl | Slots-to-inclusion curve, the in-browser quantile cross-check, the every-intent explorer |
manifest.json, protocol.json, SHA256SUMS | Run header, "Verify this run", files and hashes, citation |
step0.json | Protection gap |
Corrections
Never edit or delete a published run. To withdraw one, add STATUS.json to its folder and rerun the index step:
{ "status": "superseded", "superseded_by": "<new run_id>", "note": "Why it was replaced" }(cd bench && python3 -m rbench.index --dist ../public/data --out ../public/data/index.json)The old run stays listed with the reason. A method change gets a dated note in the method changelog.
Try it locally first
npm run fixtures # synthetic bundles through the real verifier → fixtures/ (git-ignored)
npm run dev # with NEXT_PUBLIC_ALLOW_SYNTHETIC=true in .env.development.localSynthetic bundles carry a banner on every view and are never served in production.