Repository retrieval, calibration, adversarial behavior, and scan time
The checked-in suites below contain the cases, baselines, misses, and confidence intervals.
Evidence
Every benchmark case is a real issue later closed by a merged pull request. FixMap sees the repository before the fix and tries to surface the file that actually changed.
Claim boundary
Retrieval measurements can show whether FixMap surfaced a known fixing file. They cannot, by themselves, show whether a coding agent used fewer tokens or completed the task better.
The checked-in suites below contain the cases, baselines, misses, and confidence intervals.
These are product behaviors produced from repository evidence. They are not downstream outcome claims.
The controlled protocol and evaluator are ready for real runs; no result is published until a complete run set exists.
Confidence calibration
Across the held-out and external suites, high confidence is not more accurate than medium in this small sample. The counts are published so readers can see that limitation instead of treating a label as a calibrated chance of correctness.
Adversarial gate
The checked-in adversarial record covers fabricated identifiers, wrong repositories, vague tasks, and generated output. Its measured false-confidence rate is 0%.
Held-out · tasks that did not name the file · 9 repositories
56%Selected after the ranker was finished, and counting only the cases where FixMap had to locate the file rather than read it out of the task. This is the result to plan around.
Regression · 16 repositories
15/16These cases guided development. They prove regressions are caught, not generalization.
Read this as “about half,” not as two significant figures. With 9 held-out cases in this cohort, one result changing moves Top-3 by roughly 11 points. The 95% interval is 27–81%.
Cohorts
3 of the 12 held-out tasks name a fixing file outright — one as Location: lib/document.js:2339, two as a GitHub permalink to the exact lines. A ranker that reads explicit file mentions answers those by reading the task. Pooling them lets 3 cases carry the headline, so they are reported separately.
This is a structural correction, not a measured effect size. The regression suite barely moves under the same split, and its named cases are 2 of 3 rather than 3 of 3 — being named does not guarantee a hit. With three cases per named cohort, how much a mention is worth is not established. What is established is that a generalization headline should not be computed over tasks that contain their own answer.
Baselines
A ranked list only earns its place if it beats what an agent already gets for free. Every arm below scores on the same repository scan — same files, same text samples. Each baseline is shown at its strongest candidate policy: pointed at every scanned file a keyword search just returns README.md, which would make this a strawman rather than a comparison.
FixMap does not beat BM25 over code files on repositories it was never tuned against. BM25 leads the Top 1 point estimate 4/9 to 3/9, while Top 3 ties at 5/9; both paired McNemar exact tests have p = 1.0. At Top 5 the baseline wins four cases FixMap misses and FixMap wins none: BM25 has the fixing file in its top five for 9 of 9 of these cases, FixMap for 5 of 9 (p = 0.125). FixMap does lead on the regression suite (69% vs 39% Top 1), but that is the suite whose cases shaped the ranker, and even there the lead is not significant against this baseline. We publish this because it is what the measurement says; closing the Top-5 recall gap is the next piece of work.
Your repository
fixmap benchmark --repo . --last 50 backtests BM25-over-code, FixMap, and FixMap with Impact Graph on bounded recent Git history.
Every case runs before its target commit, so the target change and later co-change history are unavailable.
All three arms see the same scanned files. The comparison never weakens a baseline with a noisier candidate set.
Tasks that name an expected path are reported separately from tasks that require retrieval.
Temporary worktrees, commit and file caps, and no repository code execution keep the run inspectable.
No universal performance claim is derived from one repository. Commit messages are imperfect task proxies, and historical changes reflect that project’s own maintenance patterns. The JSON output includes every eligible case, skip counts, cohort scores, and Wilson intervals so users can judge the evidence directly.
Controlled agent study
FixMap publishes a frozen four-arm protocol for baseline, available, instructed, and Impact Graph-assisted runs. It requires the same agent model and version, pinned repository revision, complete transcripts, and one run per task and arm.
No fix-rate, turn-count, token, cost, or time-saved claim is made until real runs are completed and audited. The checked-in evaluator validates the protocol and rejects incomplete or mismatched run sets.
Held-out results
The expected path is the file changed by the merged fix. “Top 3” means that path appeared in FixMap's first three results.
src/logic/createFormControl.tssrc/logic/createFormControl.tsHitpackages/engine.io-client/lib/socket.tspackages/engine.io-client/lib/transports/polling-xhr.tsHitpackages/svelte/src/internal/client/dom/blocks/boundary.jspackages/svelte/src/internal/client/dom/blocks/boundary.jsHitpackages/vite/src/node/server/bundledDev.tspackages/create-vite/template-vue-ts/src/App.vueMissMethodology
The task text comes from a public issue, not a prompt written to flatter the ranker.
The repository is checked out before the merged change so the answer is not already embedded in the diff.
A hit means a changed file appeared at a measured rank. Nothing is graded by taste.
FixMap has not run a controlled study of the same tasks with and without the tool, so this site does not invent one.
Trust the boundary
FixMap narrows the search and exposes uncertainty. It does not replace reading, testing, or review.
Try the weakest sample