Benchmarks drive AI progress, but are hampered by task under-specification and over-specification. Task under-specification causes guesswork, where solutions have to make things up, or worse, resort to contamination or reward hacking. Task over-specification causes spoilers, where solutions can bypass some of the harder steps the benchmark was supposed to measure. Since future-looking benchmarks should be difficult, over-specification reduces a benchmark's shelflife of community adoption. Repository-level coding benchmarks have helped the field progress but experience unnecessary churn due to both over- and under-specification. For instance, SWE-bench Pro, FEA-bench, Doc2Feat-bench, and Multi-SWE-bench all tackle under-specification by augmenting task statements with hints derived from ground truth. We show that leaking ground-truth information into the task statement causes over-specification in some of these benchmarks. We experiment with various specification levels, trying to thread the needle between spoilers and guesswork. Based on these results, we recommend techniques for deriving parsimonious hints. We will release our hints so the community can obtain more reliable signals from popular benchmarks.
Figures & tables
Figure 1
Selection
Projection
Hint scheme
Author
Rule
Name
Type
Path
Signature
Semantics
Behaviour
Document Change
DefUse
auto
def–use
✓
✓
new files
✓
—
—
—
Doc2Feat
auto
new ∩ test
✓
✓
new files
—
—
—
—
FEA-Bench Brief
auto
new defs
✓
✓
✓
✓
—
—
—
FEA-Bench Detailed
auto
new defs
✓
✓
✓
✓
docstring
—
✓
SWE-bench Pro Interface
human
manual
✓
✓
✓
✓
✓
—
—
Table 1: What each hint scheme discloses. DefUse is ours improved from Doc2Feat. Doc2Feat means the identifier hints extraction used in the Doc2Feat benchmark. FEA-Bench presents two hint selection: brief and detailed. In SWE Bench Pro, the authors assign ”Requirements” as the essential hints, and make ”Interface” optional.
Select
Doc2Feat (31)
FEA Bench (142)
Pro (131)
SWE Rebench (26)
MSB Java (40)
Total
Mean
Total
Mean
Total
Mean
Total
Mean
Total
Mean
Empty
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
DefUse
64
2.1
79
0.6
158
1.2
18
0.7
193
4.8
Doc2Feat
173
5.6
500
3.5
635
4.8
106
4.1
313
7.8
FEA
337
10.9
449
3.2
1004
7.7
110
4.2
453
11.3
Pro
594
19.2
1882
13.3
2251
17.2
418
16.1
912
22.8
Table 2: Number of identifiers disclosed per selection method, counted on the same instances as the selection tables under the Declaration projection. Total is the number of identifiers over all instances and Mean the number per instance. DefUse is empty on the instances whose tests reference no new identifier: it is non-empty on 20/31, 44/142, 66/131, 9/26 and 29/40 instances, with 3.2, 1.8, 2.4, 2.0 and 6.7 identifiers per non-empty instance. The other selections are non-empty on every instance.
Table 4
Attribute
n
N
D
G
HVM
Structural (interface-level)
Signature
31
2.45
0.00
0.00
+2.45
Name
160
1.88
0.00
0.11
+1.76
Entity type
160
1.54
0.00
0.00
+1.54
Is new file
58
0.62
0.00
0.00
+0.62
Path
58
1.19
0.00
1.00
+0.19 ∗
Table 8: Hint attribute scores on SWE-bench Pro under DefUse selection. N : necessity; D : disclosure; G : guidance; HVM=N−max(D,G) . ∗ marks margins indistinguishable from zero. HVM : Hint Value Margin. Judge details appear in Appendix C .
Code-related benchmarks play a critical role in evaluating large language models (LLMs), yet their quality fundamentally shapes how the community interprets model capabilities. In the past few years, awareness of benchmark quality has grown. Yet, after a decade-scale (2014-2025) survey over 672 code benchmarks, we observed a lag between growing awareness and actual practice. For example, in 2025 alone, the number of benchmarks that ignore code coverage when providing test cases nearly matches the total count accumulated across the previous ten years. In response, we take a clear position: Code benchmarks must prioritize rigor in benchmark construction, reliability in evaluation, and reproducibility in release. To operationalize this position, we introduce a code benchmark guideline HOW2BENCH with 55 checklists. Finally, our further human study also exposed that the current issues not only stem from the significant effort required, but also from a lack of awareness regarding their importance.
Jialun Cao, Yuk-Kit Chan, Zixuan Ling +12
The Hong Kong University of Science and Technology · Guangzhou HKUST Fok Ying Tung Research Institute · The Chinese University of Hong Kong +6
Coding-agent benchmarks often describe a task in natural language but grade it with tests taken from the upstream project. Passing those tests can require information the description never states: a constant's name, a module path, an exact message. We call this a specification-oracle gap: where it exists, a benchmark also measures whether an agent reproduces upstream implementation details. We formalise the gap, including the inconsistencies that chains of dependent tasks add, and build a static audit for five languages that classifies every name-, path- and literal-level dependency of every scored test (held-out precision 89.2%, recall 92.9%). On SWE-Milestone (98 graded milestones, 35 published runs), 25 milestones contain a test that depends on an unstated, non-inferable name or path. Build units with such a dependency fail in 80.6% of runs, against 48.4% for comparable units without one, and withholding a single hidden name from the reference stops its unit's tests from compiling in 126 of 128 cases. The leaderboard's ranking is robust to removing the affected tests, but they shift scores within repositories and favour agents that reproduce upstream names. Across four further benchmarks, prevalence appears to follow construction: a third or more of the tasks are affected where specifications are release notes or LLM summaries, almost none where tasks are screened or written for their tests; how much a gap costs depends on how the harness grades. We release the audit, corrected filter lists and specification addenda.
DeepSWE is a benchmark of 113 original, long-horizon software engineering tasks for evaluating coding agents. Most public agentic coding benchmarks follow SWE-bench in mining merged fixes from public GitHub repositories, which creates two problems: the fixes and their discussion were likely seen during pretraining, so a high score can reflect recall rather than problem-solving; and each task is graded by the tests that shipped with its merged fix, which were written to confirm one specific fix rather than grade an arbitrary solution, so they can fail a correct alternative or pass an incomplete one. DeepSWE avoids both. Its tasks are written from scratch across 91 active open-source repositories and five languages and are never contributed back upstream, so their reference solutions stay out of the public record that model training scrapes; and each task is graded by a hand-written verifier that checks the requested functionality and accepts any implementation that provides it. When an independent LLM judge re-reviews graded runs, it disagrees with DeepSWE's verifier about an order of magnitude less often than with SWE-Bench Pro's inherited tests (1.4% versus 32.4%). Despite being about half the length of SWE-Bench Pro's prompts, DeepSWE's prompts describe tasks whose reference solutions touch 5.5x more code, and the benchmark separates frontier agents across a wider score band than the leaderboards on which they otherwise cluster. We release the benchmark, its verifiers, and the full record of evaluation trajectories.