Get verified
A published BetterBench page is self-reported: anyone with a key can publish any numbers. A Launch80 verifier can stamp it verified, meaning a complete cold-cache run described well enough to reproduce, and, when they chose to, reproduced.
What verified means
Three roles, all ordinary publish keys:
| role | can |
|---|---|
| Publisher | The key that published the page asks for verification and follows the decision. |
| Any other key | Sees the request in its queue, opens it, and can reproduce the run on its own hardware. |
| Verifier | A key Launch80 marked as a verifier stamps the page verified or rejects it. Reproducing first is optional; when they did, the comparison goes with the stamp. |
bench.betterbench.v1pages are eligible, and from L80 1.2scan.pwdet.v1pages (pwdet scans). A scan published asgeneric.report.v1carries no report to re-run; publish it again withL80 pwdet publish.- A scan is verified by re-running it:
L80 verify reproduce <id>runspwdet reproduceon the same Hub files at the same commits. A verifier can stamp it only with a re-run that matches (E_REPRODUCTION_REQUIREDotherwise); there are no tolerances to accept. - A key never sees its own requests in the queue and may never decide on them.
- Quick runs (
--quick, or anything under 20 passes) can be verified. The reviewer sees afull_runwarning and the badge reads “Verified by Launch80 · quick run”. L80 1.0's ownverify checkstill fails a quick run, so send the request with--skip-checks. - Pages stay immutable. Verification changes the badge, never the stored payload. A run that needs fixing is published again and the new page is verified.
Tiers and badges
| tier | meaning | badge on the page |
|---|---|---|
| unverified | The default for every page. | Self-reported — not verified by launch80 |
| pending | A request is open. | Self-reported — verification requested |
| verified | A verifier stamped it. | Verified by Launch80 · <date>, with "quick run" for a run under 20 passes and "· reproduced" when the stamp carried a reproduction. A scan reads "Verified by Launch80 · <Level> scan reproduced · <date>", linked to the reproduction on the page |
| rejected | A verifier declined it, or the server checks failed. The reason goes to the publisher only. | Same as unverified |
L80 history --tier verified lists your verified pages. When results are exported to the AwesomeList catalog, verified maps to maintainer_verified and every other tier to author_reported.
Publisher1. Check the run
$ L80 verify check results.json # exit 0 if the run qualifies, 4 if not$ L80 verify check <page url> # the same, plus provenance from your local ledgerThe CLI runs the same checks the server applies, plus one only it can: provenance, that the page was published from this machine from a file that has not changed since. It works with no token and no network.
Publisher2. Request review
$ L80 verify request <page url> --note "vLLM 0.9.3, --max-model-len 32768, launch command in the README of …"$ L80 verify status <page url>$ L80 verify mine # your requests and their decisionsOnly the key that published the page can ask. The note is for the reviewer: the engine version and launch flags, or a link to a recipe. The request carries your local checks and the hashes from ~/.config/L80/history.jsonl; the server recomputes every check from the stored page and never trusts the client's results alone.
- Passes: the page turns pending and the request joins the queue.
- Fails a server check: the attempt is recorded and closed at once, the page stays unverified, and the CLI prints which checks failed (
E_VERIFY_INELIGIBLE). Fix the run, publish again, request again. - A page with an open request answers
E_VERIFY_EXISTS. Ten requests per key per day.
A rejection's reason is shown to you through verify status and verify mine; a rejected page reads like an unverified one to everyone else.
Any key3. Anyone can reproduce
$ L80 verify queue # other keys’ requests, oldest first$ L80 verify show <id> # model, engine, hardware, settings, published figures$ L80 verify reproduce <id> --endpoint http://127.0.0.1:8000/v1The queue is open to every valid key so the community can check runs. It shows each requester's label, never their key. reproduce reads the published results file (GET /api/v1/artifacts/<guid>/payload), reruns BetterBench with the same model, notes and settings against your endpoint, and compares the headline figures:
| metric | tolerance |
|---|---|
| Combined decode | ±10% |
| ITL 1% low | ±15% |
| TTFT p50 | ±25% |
| Peak aggregate (concurrency) | ±15% |
| Prefill | ±20% |
Verifier keys4. A verifier decides
$ L80 verify approve <id> --note "matched on 1x RTX 4090"$ L80 verify reject <id> --reason "TTFT is 3x what this hardware does"Verifier keys A verifier may stamp on review alone. When they reproduced the run, the comparison goes with the stamp and the badge adds “reproduced”. A reproduction outside tolerance needs --accept-differences and a note. A rejection always needs a reason, which the publisher sees. Once decided, a request is closed (E_VERIFY_CLOSED).
A suggested review:
- the numbers are plausible for the stated hardware and engine;
- the engine version and launch flags are stated, in the note or a linked recipe;
- there is no sign of a warm cache or batching games;
- for headline claims, reproduce on matching hardware.
The checks
The server recomputes these from the stored page, so a modified client cannot talk its way past them. A fail makes the page ineligible; a warning is shown to the reviewer.
| check | fails when | warns when |
|---|---|---|
| full_run | The file does not record how many passes ran. | A quick run: fewer than 20 measured passes per category, or no warmup. It can be verified, and its badge says quick run. |
| phases | Single-stream, prefill or concurrency is missing. | — |
| cold_cache | The run asked for a warm cache (unique_nonce false), or any request reports cached_tokens > 0. | No request reported cached_tokens, so a cold cache cannot be confirmed. |
| requests | More than 2% of single-stream requests failed. | Any single-stream or concurrency request failed. |
| truncation | — | Any run stopped at max_tokens. |
| version | betterbench_version missing or older than 0.6.1, the first that records cached_tokens. | Newer than 0.6.1, the newest this server has been checked against. |
| notes | No engine note, or no hardware: neither --note hardware=… nor a GPU BetterBench detected. | — |
| sample_gate | — | Some percentiles rest on too few samples. Normal: a TTFT p99 from 20 passes always is. |
| provenance | body_sha256 or content_hash from the publisher's ledger does not match what the server stored. | Either side has no hash (an older L80, or a page published before bodies were stored). |
Any pwdet scan (scan.pwdet.v1) can be verified. Its checks, recomputed from the stored report, only warn the reviewer about how easily the scan can be re-run; the stamp itself needs a re-run that matches. L80's own verify check still fails some of these, so send the request with --skip-checks.
| check | fails when | warns when |
|---|---|---|
| report | — | The report is not schema 2 (pwdet 0.2+), or records no inputs or digest to compare a re-run against. |
| level | — | No assurance level, or Basic: it compares nothing against a reference. |
| subject | — | The scanned model is a local folder or an endpoint; a verifier re-runs it from their own copy. |
| references | — | A parent or base reference is a local folder. |
| files | — | Some of the model's files were not hashed; a re-run compares their sizes only. |
| verdict | — | The report has no verdict, or it is inconclusive. |
| provenance | body_sha256 or content_hash from the publisher's ledger does not match what the server stored. | Either side has no hash. |
In the console
L80 tui has a Verify screen with other keys' requests: p reproduces, and verifiers stamp with a or reject with x. The History screen's v requests verification for the selected page.