Credited, Yet Failing Strict Clean Pass
241 of 431
Scored a success, failing the contract.
Tau task scoring credits 431 runs. 241 of them, 55.9%, fail Strict Clean Pass on the same trace.
AIMLSystems 2026
ACID-Bench injects tool failures into Tau-Bench retail and airline tasks, then checks the resulting database state instead of the agent's reply.
Results
The same 780 recorded runs, scored two ways: Tau-Bench task success, and Strict Clean Pass, which also needs a valid run, the scenario's own checks and no integrity violation.
Credited, Yet Failing Strict Clean Pass
241 of 431
Tau task scoring credits 431 runs. 241 of them, 55.9%, fail Strict Clean Pass on the same trace.
Valid, Fault Fired, Integrity Violation
197 of 241
Of those 241, 197 are valid runs where the fault fired and a contract requirement failed. The gap is not explained by invalid evidence alone.
Correction to one printed figure. The paper counts 525 of 780 runs (67.3%, 95% interval 63.9 to 70.5) with an integrity violation. That count includes 126 runs where the injected fault never fired, because the agent never reached the failing call (39 of them handed off to a human first). On those runs the flag only records that the required steps were not completed. Without them the count is 399 of 780 (51.2%, 95% interval 47.6 to 54.6). The figures above are not affected. Details in ERRATA.md.
Configurations
Across all 780 runs, Strict Clean Pass is 234, or 30.0% (95% interval 26.9 to 33.3 by run, not adjusted for repeated scenarios). Per configuration it spans 36 to 57 of 156.
Dots are rates, lines are 95% intervals by scenario.
| Configuration | Route | Strict Clean Pass | 95% Interval |
|---|---|---|---|
| DeepSeek V4 FlashNon-Thinking, Direct | Direct | 53 / 15634.0% |
23.1 to 45.5 |
| DeepSeek V4 FlashThinking-Max, Direct | Direct | 57 / 15636.5% |
26.3 to 47.4 |
| DeepSeek V4 ProThinking-Max, Direct | Direct | 49 / 15631.4% |
21.2 to 42.3 |
| MiniMax M2.7Reasoning-Low, OpenRouter | OpenRouter | 39 / 15625.0% |
16.0 to 35.3 |
| Kimi K2.6Reasoning-High, OpenRouter | OpenRouter | 36 / 15623.1% |
13.5 to 33.3 |
Strict Clean Pass for five tested configurations (52 author-designed scenarios, 3 runs each). Intervals resample scenarios. Configurations differ in provider route, reasoning settings and token limits, so this is not a model ranking. Within this release, most pairwise differences are not distinguishable; see KNOWN_ISSUES.md.
How It Works
A deterministic proxy sits between the agent and the Tau-Bench retail and airline tools. It injects one declared fault on the matching call, records what really happened next to what the agent was told, and checks the resulting state. No LLM judge supplies a label.
A later operation fails after earlier writes committed. The agent must keep the earlier effects and finish or reconcile the rest.
The write goes through, but the agent receives an error. It must resolve the doubt without repeating the write.
A read is stale relative to a declared concurrent change. The agent must refresh before the dependent write.
The call runs, is rolled back to the state before it, and the agent gets an error. It must account for earlier writes. To the agent and the database this looks the same as a write that failed outright; only the targeted tools, the error code and a cleared retry cache differ.
The write path adds evidence, verification, budget or harm constraints. The agent must meet those safeguards as well as the state checks.
Scope: 52 author-designed scenarios in two domains, a deterministic scripted user, and no independent expert validation of the contracts. Results describe the tested configurations under these contracts. See KNOWN_ISSUES.md.
Questions
Cite ACID-Bench
@inproceedings{vince2026acidbench,
title = {ACID-Bench: Fault-Injection Contracts for State-Changing Tool Agents},
author = {Vince, Andrei},
booktitle = {AIMLSystems 2026},
year = {2026}
}
Code and evaluator: github.com/andreivince/acid-bench. Recorded runs: huggingface.co/datasets/andreivince/acid-bench-traces.