Recheck a claim in one command

Each public claim this repository makes about its own evidence has a manifest in recheck/. A manifest says what the claim is, where it is published, the exact command that rechecks it, the commit it is pinned to, the inputs and where to get them, the verdict to expect, a control that must fail, and what you need to run it. The runner does the rest:

git clone https://github.com/HarperZ9/flywheel && cd flywheel
python -m harness.recheck list
python -m harness.recheck run recheck/site-benchmark-seal.json
python -m harness.recheck run --hardware cpu --ci     # every claim a laptop can check

Python 3.11 or newer and Git are the requirements for the cpu manifests that run in CI, plus pytest for site-benchmark-seal (declared in its needs.packages; the runner refuses to start without it rather than report a false DRIFT). The runner installs nothing. Each run prints PASS or FAIL per claim and the seconds from checkout to verdict.

What the runner does

  1. Checks out the pinned commit with canonical bytes: core.autocrlf=false and core.longpaths=true, so the files are the bytes Git stores on every platform (see docs/CANONICAL-BYTES.md). A commit already in your clone becomes a temporary worktree; otherwise it is fetched by its full SHA.
  2. Downloads each input and refuses it unless its sha256 matches the manifest.
  3. Runs the command and compares the exit code and output with expect.
  4. Runs the false-success control: it changes one input the way the manifest says, reruns, and requires the result the control declares. A recheck whose control does not fail is reported as FAIL, because a check never shown to fail proves nothing.
  5. Restores the changed file and removes the checkout.

The manifest, flywheel.recheck/v1

FieldMeaning
idShort name; equals the file name.
claim.text, claim.where, claim.read_onThe claim as published, where it is published, and the date it was read.
levelintegrity (bytes match a hash), recomputation (the number follows from the records), re-execution (the records follow from rerunning) or replication.
repository, commitFull URL and full 40-character SHA of the code and records the command runs against.
cwdcheckout runs in the pinned checkout; repo runs in your clone, for a tool newer than the pinned commit.
inputsFiles outside the repository: url, sha256, save_as, and unzip_to for an archive.
setupCommands to run before the check, such as installing a package.
commandThe argument list. {python}, {checkout}, {repo} and {inputs} are filled in.
expectexit_code, plus stdout_contains and stdout_lacks lists.
controldescription, an optional mutate (file, find, replace, first match only) and its own expect.
needshardware (cpu, cpu-16gb, gpu-8gb, gpu-24gb, cluster), os, python, packages the interpreter must import, the hosts it contacts (network) and the expected compute seconds.
accessA0 public and anonymous, A1 free account, A2 granted on request, A3 private to the maker, A4 does not exist.
expertiseE0 runs a given command, E1 reads code and logs, E2 domain method, E3 specialist judgment.
anchorWho controls the reference the check compares against: self, third-party or plural.
covers, does_not_coverThe part of the claim the recheck reaches, and the part it cannot.
ci, ci_skip_reasonWhether CI runs it. false needs a reason.
known_resultOptional: a measured result that differs from the claim, kept beside it.

harness/recheck_manifest.py checks the shape; tests/test_recheck.py loads every manifest and fails on any problem.

The manifests

ManifestClaimLevelNeedsCI
pysyft-result-receiptThe published score (40 of 50) is bound to the approved job and the rowsrecomputationcpu, 1 syes
shapley-prereg-pinsThe item set and code that ran are the ones the preregistration pinsintegritycpu, 1 syes
shapley-placebo-recompute0 of 80 false attributions follow from the recorded outputsrecomputationcpu, 1 syes
prereg-ledgerThe preregistration ledger is an unbroken signed logrecomputationcpu, 1 syes
site-benchmark-sealThe site's offline benchmark record and its sealre-executioncpu, 12 syes
metr-count-odds-packetThe METR count_odds packet is intact and the import refuses a changed scorerecomputationcpu, 5 syes
closeout-220-full-pytestCloseout receipt 220: proof-surface's suite passed at 03655af9re-executioncpu, 10 sno: known DRIFT, see known_result

CI (.github/workflows/recheck.yml) runs every cpu manifest with ci: true on Linux and on Windows with core.autocrlf=true.

Claims with no runnable manifest yet

ClaimWhy not
The PySyft approved hash equals syft-job's own submission_hash on a live runNeeds Linux or WSL, PySyft at 36e6516, uv and four local packages.
Shapley placebo re-execution on qwen2.5:7bNeeds a GPU, Ollama 0.35.1 and the 4.7 GB model 845dbda0; about 127 s on one RTX 4090.
Release v1.3.4 wheel equals a rebuild from the tagThe build is not byte-reproducible yet, so the honest result today is DRIFT at the byte level.

Time to a verdict

Target: under 10 minutes for a stranger on a clean machine, from reading the claim to a recorded verdict, for every cpu manifest.

Measured 2026-10-04 by the maker's agent on one Windows 11 workstation (Python 3.12.10, Git default core.autocrlf=true), each from a fresh clone in an empty directory to the printed verdict, machine time only:

ManifestCloneRecheckTotal
site-benchmark-seal10.0 s27.9 s37.9 s
metr-count-odds-packet6.7 s13.4 s20.1 s
shapley-prereg-pins7.3 s10.9 s18.2 s

Reading time is not in these numbers, and the measurer knew the repository. A measurement by someone outside it is the one that counts.

What this does not prove