TokenSave logo TokenSave

TokenSave Data · Dataset

Raising effort didn't catch more edge cases, and Haiku got nearly the same result for 87% less: 504 Claude Code runs on 21 real bugs

Measured and written by · Updated . Disclosure: TokenSave gets no funding, credits or sponsorship from AI companies. All measurements use our own paid subscriptions.

Telling Claude to think about the cases a bug report leaves out, or raising effort to high, did not make it pass more of those cases. Across 504 Claude Code runs on 21 real bugs, no condition moved the share of unreported maintainer test cases passed by more than 4 points (pre-registered threshold: 20). The edge-case prompt did raise the cost per run, by 60% for Opus and 134% for Haiku with the test-reading line. Haiku 5.5 passed 84% of the unreported cases against Opus’s 88% at about 87% less cost per run.

Measured 2026-10-29 · 504 runs · 21 bugs · 12 projects · Claude Code 2.1.295 · License CC BY 4.0

DOI 10.5281/zenodo.23796306 · Also on Hugging Face · Kaggle · GitHub

Estimate your own Claude Code or Codex bill → See the monthly cost of Claude Code and Codex for your usage: API per task vs Claude and ChatGPT plans. Free, no sign-up. Bar charts: share of unreported test cases passed and API cost per run for Claude Haiku 5.5 and Opus 5.5 under four conditions

Key findings

Totals by model and condition

Unreported passed = share of the maintainer test cases the bug report does not show, averaged per bug (the pre-registered primary outcome). It includes cases that already pass before the fix, which a careless fix can break. Unreported targets = only the unreported cases that fail before the fix. Interval: 95%, from resampling whole bugs.

Model · conditionUnreported passedUnreported targetsvs baseline, 95% intervalClean fixBroke testsCost/runMedian s
Haiku 5.5 · Baseline84%80%–34/639$0.050121
Haiku 5.5 · Effort high82%81%−1 (−5 to +1)33/638$0.081234
Haiku 5.5 · Edge-case prompt84%85%0 (−4 to +4)36/637$0.10299
Haiku 5.5 · Edge-case prompt + read tests86%86%+2 (0 to +5)37/635$0.12279
Opus 5.5 · Baseline88%85%–38/635$0.51120
Opus 5.5 · Effort high86%84%−2 (−9 to +2)38/633$0.62156
Opus 5.5 · Edge-case prompt91%92%+3 (0 to +7)39/636$0.82271
Opus 5.5 · Edge-case prompt + read tests84%85%−4 (−12 to +2)37/634$0.81261

Bug by bug: unreported cases passed

C0 baseline, C1 effort high, C2 edge-case prompt, C3 edge-case prompt + read tests. 3 runs per cell. Cases R/U = test cases the report shows / leaves out.

Project · bugCases R/UHaiku 5.5 C0Haiku 5.5 C1Haiku 5.5 C2Haiku 5.5 C3Opus 5.5 C0Opus 5.5 C1Opus 5.5 C2Opus 5.5 C3
Carried over from dataset 25 (8 bugs)
cachetools · cachedmethod class access loses the explicitly supplied instance1/1100%100%100%100%100%100%100%100%
js-yaml · Sequence parsing in version 5 fails (BOM at the start of the file)1/10%0%0%0%0%0%0%0%
marked · A link inside link text produces nested links3/133%33%33%33%67%0%100%33%
Python-Markdown · HTML comment inside inline raw HTML creates malformed output2/3289%92%95%92%91%90%91%95%
qs · comma: true is ignored with charset 'iso-8859-1' and interpretNumericEntities1/1197%94%100%100%91%100%97%100%
tomlkit · Emitting underscores in integers2/2767%67%67%74%67%67%74%81%
zod · Functions are executed twice for object property defaults4/4100%100%100%100%100%100%100%100%
zod · toJSONSchema on record with numeric keys results in invalid propertyNames2/2273%80%86%89%80%91%100%92%
New bugs (8)
cachetools · Failed TTL expiration calculation leaves an unusable cache entry1/3100%100%100%100%100%100%100%100%
cachetools · @cachedmethod decorator breaks mock autospec1/283%83%100%100%100%100%100%83%
cachetools · Class-access @cachedmethod rejects keyword instance arguments3/3100%100%100%100%100%100%100%100%
fastify · An error with statusCode >= 600 becomes an unhandled rejection when a tracing:fastify.request.handler subscriber exists (5.12.5)2/2100%100%100%100%100%100%100%100%
p-queue · Abort during task setup is missed before the running listener is registered1/1100%100%100%100%100%100%100%100%
Python-Markdown · Unmatched backtick runs swallow text in 3.11 (inline code)1/133%0%0%33%67%67%67%0%
zod · z.record skips an own __proto__ key without running the key schema6/9100%100%100%100%100%100%100%100%
zod · v4.6.6: a union whose array option exceeds .max() now reports invalid_union instead of too_big3/6100%100%100%100%100%100%100%100%
New hard bugs: several files, concurrency or caching (5)
anyio · concurrent anyio.aclose_forcefully fails to block until socket is closed on asyncio6/20100%100%100%100%100%100%100%100%
anyio · connect_tcp() leaks a connected socket when an enclosing scope is cancelled after the connect succeeds6/2100%100%100%100%100%100%100%100%
cachetools · cachedmethod super() lookups bypass overrides or recurse3/8100%100%100%100%100%100%100%100%
dateutil · pickling & deepcopy of rruleset and rrule with cache14/17887%81%87%87%87%87%87%87%
undici · Pool loses caller's AsyncLocalStorage context for queued HTTPS requests (Undici 8)2/1100%100%100%100%100%100%100%100%

The four conditions

Method

Limitations

How to cite

Free to use, quote and republish with attribution under CC BY 4.0. Please link to this page.

TokenSave (2026). Raising effort didn't catch more edge cases, and Haiku got nearly the same result for 87% less: 504 Claude Code runs on 21 real bugs [Data set]. Zenodo. https://doi.org/10.5281/zenodo.23796306

BibTeX

@misc{tokensave_claude_edge_case_prompts_2026,
  author    = {{TokenSave}},
  title     = {Raising effort didn't catch more edge cases, and Haiku got nearly the same result for 87\% less: 504 Claude Code runs on 21 real bugs},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.23796306},
  url       = {https://doi.org/10.5281/zenodo.23796306},
  note      = {Dataset, CC BY 4.0}
}

Embed the chart

Related

Questions or corrections: contact@jonhisking.com