Verified bug-fix records for evaluating coding agents
Every record is a real bug in public software, the fix its author wrote, and the test that fails before the fix and passes after it. A record is kept only once both runs have been observed, so what is published is a reproduction rather than a claim.
- 896
- records
- 352
- projects
- $0.0048
- per record
- 100%
- permissive licences
One record
A generator in more-itertools let a stopping signal from the caller’s own function escape into it and end the loop early.
| 9 | 9 | while True: | |
| 10 | 10 | yield start | |
| 11 | - | start = func(start) | |
| 11 | + | try: | |
| 12 | + | start = func(start) | |
| 13 | + | except StopIteration: | |
| 14 | + | break |
Method
- 1Find commits that changed source and tests together, in permissively licensed projects only.
- 2Run the author’s test against the code as it stood before the fix. It must fail.
- 3Run the same test against the fix. It must pass.
- 4Keep the changed function with its docstring, or the whole file when it does not isolate cleanly.
About one candidate in ten survives. No language model is used at any stage.
Compared with related datasets
| Dataset | Records | Projects | Bugs from |
|---|---|---|---|
| SWE-bench | 2,290 | 12 | GitHub issues |
| SWE-bench-Live | 1,319 | 93 | GitHub issues, 2024 onward |
| SWE-smith | 50,137 | 128 | generated |
| Goldset | 896 | 352 | maintainer fix commits |
Figures as each project publishes them, read from the linked sources on 2026-08-18. Of our 353 projects, 294 have under 1,000 stars or under 200 forks.
What this does not show
- −That these bugs are harder for models than generated ones. We tested that and it did not replicate.
- −That a passing test means the program is correct. It means the recorded test passes.
- −Anything about languages other than Python.
A further 385 records are held back and not published
A public evaluation set is contaminated the moment it is public. Everything above can be downloaded, and in time it will be read by the models it exists to measure. So projects are split in two, and a project’s records sit entirely on one side or the other. Nothing in the public release can be used to work out what is in the held-out one.
| Split | Records | Projects | Status |
|---|---|---|---|
| Public | 897 | 352 | published under CC BY 4.0, permanently |
| Held out | 385 | 157 | not published |
Mining runs continuously, so both sides grow, and the share of the corpus that postdates any given training cutoff grows with them. That is the part a fixed benchmark cannot do. Everyone else’s uncontaminated slice shrinks as models get newer, and this one refills.
If you evaluate models and want a set yours has not seen, or the same pipeline run against other languages or your own repositories, write to andy@goldset.dev. What is published here stays published and free either way.
Get the data
git clone https://github.com/andysalvo/goldset python3 verify_corpus.py --sample 20
One JSON object per line. 355 records isolate a single function, 541 keep the whole file. Each carries the date its fix was committed, so anything inside a model’s training window can be filtered out. A Hugging Face release is being prepared.
@misc{goldset2026,
title = {Goldset: verified bug-fix records for evaluating coding agents},
author = {Salvo, Andrew},
year = {2026},
url = {https://goldset.dev}
}