diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 5c8995f..59018cc 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,25 +1,19 @@
# Submitting a model run
The benchmark gives every model the **same $20 API budget** and asks: how many distinct
-reduction-rule bugs (counterexamples) can it find? This document describes the end-to-end
-submission pipeline.
+reduction-rule bugs can it find?
```
make run ─▶ submission.json ─▶ python -m benchmark.submit ──▶ private store (R2)
- (certificate + trajectory = answer key, never in git)
│
maintainer's scorer re-verifies every certificate with pred
- (zero trust) + a provenance check, OFF the public repo
│
- only the AGGREGATE (counts / cost / tokens — no rules, no certs)
- is published ─▶ PR to site/results.json ─▶ GitHub Pages (deploy)
+ only the aggregate is published ─▶ PR ─▶ GitHub Pages
```
-Your submission carries the certificate + trajectory — the answer key. On a fixed public
-library commit a `pred`-confirmed certificate counts regardless of who produced it, so it
-must stay private: the CLI uploads to a private store, and only the aggregate becomes
-public. Self-reported counts are never trusted — the score is recomputed from `pred`
-re-verification.
+Your submission carries the certificate + trajectory, so it uploads to a private store;
+only the aggregate is published. Self-reported counts are never trusted — the score is
+recomputed by `pred`.
## 1. Produce a `submission.json` (dockerized runner)
@@ -122,14 +116,12 @@ make preflight # docker run --env-file submission.env Give a model the same $20 and see how many bugs it can find in the library's problem
reductions. You run it on your own model and key; we independently re-check every bug before
- it scores — so the ranking is earned, not claimed.Leaderboard
From your model to the leaderboard
One Docker image: the solver (pred) plus the rule library, pinned to the benchmark version.
OpenAI, Anthropic, DeepSeek, a self-hosted endpoint — you bring the API key and the price.
Your model probes each rule for a counterexample until the $20 runs out; each find is checked by the solver on the spot.
a bug = solve(x) ≠ solve(reduce(x))One hf upload of submission.json to the dataset, or open a pull request — no web form.
Upload submission.json with benchmark.submit. No web form.
Each reduction turns problem A into an equivalent problem B. It's buggy on an input when solving that input directly gives a different answer than solving it through the reduction — a fact anyone can re-check, so a wrong claim simply fails to reproduce.
+Each reduction turns problem A into an equivalent problem B. It's buggy on an input when solving that input directly gives a different answer than solving it through the reduction.
Every model gets the same budget, measured from real token usage at the price you declare — not a gateway's dollar guess. Ranking is by confirmed distinct-rule bugs, with bugs per 1K tokens as the efficiency tie-break.
+Every model gets the same budget, measured from real token usage at the price you declare. Ranking is by confirmed distinct-rule bugs, with bugs per 1K tokens as the efficiency tie-break.
Run the dockerized runner at the fixed $20 budget against problem-reductions v0.6.0 — any provider, all config in one submission.env — then add the submission.json it produces to the submissions dataset. Every certificate is re-verified by pred on the backend before it counts.
Run the dockerized runner at the fixed $20 budget against problem-reductions v0.6.0, then upload the submission.json it produces. Every certificate is re-verified by pred before it counts.
submission.jsonConfigure once (model · key · price), validate with one tiny real call, then run.
-# configure once (model · key · price — any provider), then: -cp submission.env.example submission.env +Configure once, validate with one tiny real call, then run.
+cp submission.env.example submission.env # model · key · price make preflight # validate config with one tiny real call make run # → ./out/submission.json
It lands as PENDING; the backend picks it up and re-verifies every certificate.
hf upload isPANN/problem-reductions-submissions submission.json \ - submissions/<your-handle>/<model>.json --repo-type dataset+
The backend picks it up and re-verifies every certificate.
+export PRB_SUBMIT_URL=… PRB_API_KEY=… +python -m benchmark.submit --predictions out/submission.json
…or open a pull request adding it to the GitHub repo. Self-reported counts are advisory — only confirmed, distinct-rule bugs are ranked.
+Self-reported counts are advisory; only confirmed distinct-rule bugs are ranked.
An open measurement of how many bugs a model can find in the problem-reductions library — each reduction is meant to translate one computational problem into an equivalent one. Every model gets the same $20, and every claimed bug is independently re-verified server-side, so the ranking reflects confirmed findings, not self-reported counts.
+An open measurement of how many bugs a model can find in the problem-reductions library. Every model gets the same $20, and every claimed bug is independently re-verified server-side.
@misc{TODO_citation_key,
@@ -541,7 +540,7 @@ How to cite
Bugs / Ktok ${row.effNum.toFixed(4)}
Bugs / $ ${row.spentEff.toFixed(3)}
- Which rules each model found bugs in is not published — a confirmed certificate on this fixed commit counts regardless of provenance, so the buggy-rule identities are kept private to protect the benchmark.
`;
+ Buggy-rule identities are not published.
`;
openDrawer();
}
diff --git a/site/results/README.md b/site/results/README.md
index 5b8efab..85fef61 100644
--- a/site/results/README.md
+++ b/site/results/README.md
@@ -1,10 +1,8 @@
# Per-submission leaderboard entries
Each file here is **one submission's** public leaderboard entry:
-`----.json` (aggregate only — counts, cost, tokens,
-efficiency; never certificates or buggy-rule identities).
+`----.json`. Aggregate only; no certificates or rule identities.
-- Written by `score-from-r2.yml`, one **PR per submission**, so each is reviewed, merged,
- or reverted independently.
+- Written by `score-from-r2.yml`, one **PR per submission**.
- On merge, `publish-on-merge.yml` aggregates them (best run per model) into the deployed
- `site/results.json` (generated, not committed) and publishes to GitHub Pages.
+ `site/results.json` and publishes to GitHub Pages.
diff --git a/submissions/README.md b/submissions/README.md
index a34a7dc..cc6c04a 100644
--- a/submissions/README.md
+++ b/submissions/README.md
@@ -1,17 +1,12 @@
# Submissions
-**Submissions are never committed to this public repo.** A submission carries the
-certificate + trajectory — the answer key. On a fixed public library commit a
-`pred`-confirmed certificate counts regardless of who produced it, so publishing one would
-be a free answer key. Everything under `submissions/*.json` is `.gitignore`d.
-
-This directory is only a **local scratch space** for the self-run scoring path.
+**Submissions are never committed to this public repo** — they carry the answer key
+(certificate + trajectory) and are `.gitignore`d. This directory is only local scratch for
+the self-run scoring path.
## How to submit (external)
-Use the CLI intake — it uploads over HTTPS to a private store (Cloudflare R2); only the
-maintainer ever reads it back, and only the aggregate (counts, no rules/certs) becomes
-public.
+Use the CLI intake — it uploads to a private store; only the aggregate becomes public.
```bash
export PRB_SUBMIT_URL= # from the maintainer
@@ -26,8 +21,8 @@ the public leaderboard. See `intake/cloudflare-worker/README.md`.
## Self-run scoring (maintainer / local)
Drop scored submission files into this directory and run `make publish-local`: it scores
-them with `pred`, rebuilds the aggregate, and writes `site/results.json` (guarded so no
-answer-key field leaks). The files here stay local — they never enter git.
+them with `pred`, rebuilds the aggregate, and writes `site/results.json`. The files here
+stay local; they never enter git.
## Notes