The score that answered the wrong question
Picture a model sitting near the top of a coding benchmark leaderboard. It resolves a large share of held-out GitHub issues, its patches pass the associated test suites, and the number looks better than last quarter's model. A team preparing to route customer support drafts through that same model asks a simple question: does this ranking tell us the model is safe to ship for our support workflow? The honest mechanical answer is that it tells you almost nothing about that, and the reason is not that benchmarks are worthless. It is that a benchmark score is evidence about a specific task distribution, evaluated against a specific oracle, and a release decision needs evidence about a different task distribution evaluated against a different oracle.
This matters because teams routinely skip the matching step. A model wins a coding benchmark, someone reads that as "this model is strong," and "strong" quietly gets applied to an unrelated deployment question. Anthropic's engineering write-up on evaluating agents makes the underlying structure explicit: agent evaluation separates tasks, environments, trajectories and outcomes, and using domain-specific criteria with human calibration is what makes a measurement mean something for a particular job (Anthropic, "Demystifying evals for AI agents," https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents). A single aggregate score cannot stand in for that whole structure. If the task, environment or oracle differs from your deployment, the score is evidence about something else.
What a benchmark oracle actually checks
An oracle, in this context, is the mechanism that decides whether an output counts as correct. For a coding benchmark built around GitHub issues, the oracle is usually a test suite: the model proposes a patch, the suite runs, and pass or fail becomes the verdict. That is a clean, cheap, largely deterministic oracle, and it is exactly why coding benchmarks are attractive to build and to report. But a test-suite oracle only checks what the test suite checks. A coding benchmark's existing tests generally do not cover your support-reply policy. A test suite could check that policy if you deliberately wrote suitable cases; executable tests are not inherently limited to coding behavior.
A recent preprint on SWE-Bench Pro Verified examines this reliability question directly inside the coding-benchmark world itself, not just across domains. Pujun Zheng and colleagues report leakage and task-quality problems that affect what a leaderboard position can support (Zheng et al., "SWE-Bench Pro Verified," https://arxiv.org/abs/2609.08149). That is a research lead worth taking seriously, not an independently replicated verdict on every coding agent, and it has not been re-run here. Its relevant lesson for a release decision is narrower and more useful than "benchmarks are broken": even within the benchmark's own home domain, a passing score can rest on a compromised oracle, so a ranking is insufficient evidence on its own even for coding tasks that look adjacent to yours.
A worked comparison: two tasks, two oracles
Consider a teaching example built to make the mismatch concrete, drawn from an existing course case rather than a customer incident. In that lesson's scenario, a support system's research layer drafts a reply to a customer named Sarah. The draft is factually accurate, well-written, and it recommends a competitor's product by name (see the worked example in /courses/two-architectures). Nothing crashed. No exception fired. The system did what it was asked: produce a helpful draft. The failure is a business-policy failure, and it is invisible to a test suite built for code.
Put the benchmark task and this teaching task side by side.
| Attribute | Coding benchmark task | Support-reply teaching case |
|---|---|---|
| Task family | Resolve a GitHub issue with a code patch | Draft a customer support reply |
| Environment | Repository checkout, dependency install, test runner | Live ticket, account context, product catalog |
| Oracle | Pass/fail on an associated test suite | Human or calibrated-judge review against a competitor-mention rule |
| Unacceptable outcome | Patch fails hidden tests | Correct, fluent draft that names a competitor |
A passing test suite in the first row says nothing about the competitor-mention failure in the second, because the first row's oracle was never built to look for that failure. This is the whole misconception in miniature: a model leads a coding benchmark, and the question is whether that has qualified its business-policy behavior in an unrelated integration. It has not, because the benchmark's oracle and the deployment's unacceptable outcome are different things entirely.
Building a local mapping instead of borrowing a ranking
The corrective is not to distrust every benchmark. It is to build a small local mapping between what the benchmark measured and what your release decision requires, before you let the ranking influence a ship decision. A useful mapping has five fields: task family, environment version, acceptance owner, oracle, and critical failure condition. Filling these in forces you to notice exactly where the benchmark's coverage runs out.
Write down the actual job the model will do in production, not a category label borrowed from the benchmark's paper. "Draft support replies for billing tickets" is a task family; "customer support" is not specific enough to compare against anything.
Note the tool access, data sources and permission boundaries the model will operate under. A benchmark's sandboxed repository checkout is not your production environment, and a model that behaves inside one can behave differently once real tool access and real account data are in the loop.
Decide who signs off on correctness and what mechanism they use: a rubric, a held-out human-labeled set, or a calibrated judge model. Anthropic's framing is useful here: domain-specific criteria plus human calibration, not a borrowed aggregate score.
State the one outcome that blocks release regardless of everything else passing. For the support-reply case, that is "the draft names a competitor." For a coding task with a permission boundary, it might be "the patch bypasses an access check even though its tests pass."
Once that table exists, a coding benchmark still has a role: it can help you shortlist which candidate model to test further, when coding ability is relevant to the proposed workflow. Poor coding results alone do not disqualify a model for an unrelated support task. What it cannot do is fill in your acceptance owner's row or stand in for your critical failure check.
A patch that satisfies every visible test while relying on a leaked expected answer, or a test suite that never checks a permission boundary, both produce a clean pass. Neither has been run here; both are proposed held-out cases worth building before you trust a score for a policy-sensitive deployment.
Why human agreement and error-family recall are not interchangeable
A second place teams collapse two different measurements into one number involves the judge used to grade free-form output, like the support-reply draft. Calibrating a judge against human labels answers "how often does this automated judge agree with a person on the same cases." That is a single agreement rate, and a reasonable working bar, borrowed from the practice described in the evaluation-engineering course case linked above, is treating anything under 85% agreement as not yet reliable for that task, adjusted upward for higher-stakes work. Error-family recall is the fraction of actual positive examples in a particular failure family that the judge detects: true positives divided by true positives plus false negatives. Test coverage is different again: which families have cases at all. If only one of four families is represented, coverage is incomplete and recall for the other three is unmeasured, not automatically zero.
Conflating these two numbers produces a specific, avoidable mistake: reporting "our judge is 90% reliable" as though it means "we catch 90% of our failure modes." It doesn't. Agreement reports matching labels on the sampled cases; class imbalance can make it high even when critical failures are missed. Per-family recall measures detection among labeled failures. Coverage records whether the relevant families were tested. A local mapping needs all three tracked separately, because a well-calibrated judge sitting in front of an incomplete test set will pass a release that a broader test set would have blocked.
Check the decision

Handing the decision to whoever evaluates the model
Once the local mapping exists, it becomes a contract you can hand to whoever runs the evaluation, whether that is an internal reviewer or an outside vendor demonstrating a model. A support-reply acceptance row might read: workflow is billing-support-draft, acceptance owner is the support lead, required evidence is the ticket and approved product policy, and critical failure is a prohibited competitor recommendation. A supplier-order workflow would need a separate stock and budget oracle. A second row for a different workflow stays explicitly unqualified until its own policy detail is supplied, rather than being papered over with the first row's assumptions. Handing over two rows like this, each naming its own oracle and critical failure, asks the evaluator to return case-level evidence and named limitations, not a single aggregate score. That is a different request than "show me your benchmark rank," and it is the request that actually matches what a release decision needs.
None of this argues against reading benchmark papers or coding leaderboards. It argues for treating a benchmark number the way you would treat any measurement taken under specific conditions: useful exactly as far as those conditions extend, and silent beyond them. The SWE-Bench Pro Verified authors' own leakage findings are a reminder that even a coding benchmark's home turf isn't automatically clean; the Anthropic framing is a reminder that task, environment, trajectory and outcome are separate axes worth separate criteria. Put those two points together and the practical move is the local mapping table above: five fields, filled in before a ranking gets to influence a ship decision, with your own critical failure condition doing the work no borrowed leaderboard number can do for you.
See the complete worked eval framework, including the three eval loops and model-tier routing, behind the support-reply example used here.

