Rightshold™ Sign up

Answers · AI evidence

How do I prove a reported eval score wasn't cherry-picked as the best of many runs?

Last updated

TL;DR: Write down how many runs you will do and how the reported number is computed before you start, record a receipt for every run as it finishes (including the bad and the crashed ones), and report the count, the mean and the spread across all of them. Picking the best of N runs, seeds, prompts or checkpoints raises the number even when nothing got better. The Leaderboard Illusion (Singh et al., 2025) found that some providers tested many private variants on Chatbot Arena and published only the best; it identified 27 private variants tested by Meta in the lead-up to the Llama 4 release, showed that the expected best of N noisy estimates is higher than any single one, and submitted two identical Aya-Vision-8B checkpoints that scored 1052 and 1069. Labeled honestly, the gap can be huge and legitimate: the Codex paper (Chen et al., 2021) reports 28.8% of HumanEval problems solved with one sample and 70.2% with 100 samples per problem. Both are fair when named; presenting the second as the first is not. The American Statistical Association's statement on p-values lists "proper inference requires full reporting and transparency" as a principle. On Rightshold, record_ai_run issues a signed receipt with a server-set issued_at for each run; put the plan hash, run_index and planned run count in params. Rightshold can't show that you didn't skip recording a run. What makes an omission visible is a plan hashed first plus the full list of receipt ids with run_index running 1 to N. This page is about selective reporting across runs. Pre-registering a pass/fail threshold, judging a negligible change with an equivalence margin, and making a single run reproducible are covered on separate pages.

What should I check, step by step?

1. Before the first run, write a run plan: the model snapshots or checkpoints, the number of runs, the seeds, any prompt variants, how failed runs are handled, and the statistic you will report (mean over runs, pass@1, or pass@k with k and samples per problem stated). Hash the plan file.

  1. Give every run a run_index from 1 to N and the seed the plan assigns it. If you need more runs, write a new plan version first; don't keep running until a good one turns up.
  2. Record a receipt as each run finishes: the results-file hash, the plan hash, run_index, the seed and the score. Record failed, crashed and timed-out runs too, with their outcome.
  3. Report N, the mean, the spread (standard deviation or a confidence interval), and the minimum and maximum. If you also report the best run, label it best-of-N and give N.
  4. Choose a checkpoint or prompt for release on a separate dev split, then run the chosen one on the held-out split. Selecting on the test split is the cherry-pick, even if every run is recorded.
  5. If a run is excluded (an infrastructure failure, say), keep its receipt and give the reason. The exclusion rule should already be in the plan.
  6. Give the reviewer the plan file and the full list of receipt ids. They check each receipt and signature with verify_ai_run, confirm run_index covers 1 to N with no gaps and the same plan hash, and confirm every issued_at is later than the plan's own receipt.

Why does reporting the best of N eval runs inflate the score?

Every eval score is a noisy estimate. If you run N variants or seeds and keep the highest, you are reporting the top of a distribution, not its centre. The Leaderboard Illusion (Singh et al., 2025) states it formally: with N of at least 2 and non-zero variance, the expected value of the best-performing variant is strictly greater than that of a single submission, so a best-of-N rating is biased upward.

Should I report pass@1, pass@k or the mean over seeds for an AI eval?

Sampling many times and counting a problem as solved if any sample passes is a real, useful metric — as long as it is labeled. The Codex paper reports that Codex solved 28.8% of HumanEval problems with a single sample and 70.2% with 100 samples per problem. A reader who sees only "70.2%" with no k would badly overestimate single-shot performance.

Can signed run receipts prove I reported every eval run?

A record_ai_run receipt is signed by Rightshold, gets an issued_at time set by Rightshold when it is recorded, and sits on the public ledger. It shows that this results file, with this plan hash and run_index, was recorded at that time and hasn't changed since.

How do I ask Rightshold about this (free, no key)?

Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “Record a signed receipt for run 3 of the 5 planned in my hashed run plan: the plan hash, run index, seed, the results-file hash and its score, so a reviewer can check every planned run was reported.”

One-click setup

{
  "tool": "record_ai_run",
  "arguments": {
    "model": "<model under test, dated snapshot>",
    "provider": "<provider or eval-harness>",
    "prompt_sha256": "<sha256 of the frozen eval set file>",
    "output_sha256": "<sha256 of this run's per-item results>",
    "params": {
      "run": "multi-run-eval",
      "plan_sha256": "<sha256 of the run plan>",
      "run_index": 3,
      "runs_planned": 5,
      "seed": 1003,
      "temperature": 0.7,
      "statistic": "mean_over_runs",
      "score": 0.812,
      "outcome": "completed"
    },
    "ran_at": "2026-11-08T07:25:00Z"
  }
}

Rightshold doesn't run your evals, compute your statistics or know how many runs you did. It signs and timestamps each run record you send. Receipts make a full disclosure checkable; they can't prove that no unrecorded runs exist. Not legal advice.

What are the sources?

Related

Not legal advice. JSON · Markdown · All answers

Get a free API key in one call

No card and no email needed. 100 free credits; the license and policy checks stay free without a key.

curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_...   # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
  -H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'