Benchmark scores move for reasons that do not transfer to production behavior. A team re-runs a sample set after a prompt tweak, sees the number climb, ships, and then watches the same class of error return through a different input. The reason is structural: a pass rate is a summary statistic, and a summary statistic cannot tell you which clause, tool signature or routing branch caused the change. Without that attribution, the improvement is a coincidence you happened to observe.
The alternative is to treat each failed sample as an unfinished change request against the agent's contract. The contract is everything that constrains and shapes the run: the system prompt and its clauses, the tool schemas and their argument types, the guardrails that intercept outputs, the routing rules that decide which specialist handles a request, and the approval gates in front of side effects. A failure is evidence that one of those pieces permitted an outcome you do not want. The work is to find which piece, change it as narrowly as possible, and pin the exact input that exposed it.
Consider what a flat log gives you. A support agent says an order is non-refundable; the log shows only that fluent final answer. The order-lookup tool succeeded, the retrieval step returned a stale policy document, and the model reasoned correctly from wrong context according to Braintrust's tracing guide. Nothing threw an exception, so no alert fired. If your only response is "raise the pass rate," you may well have fixed the prompt to compensate for a retrieval bug that will resurface the moment the index changes.



