Leaderboard
Hardest: bugs that cross nodes and depend on timing.
31.0%50.0%+19.0 ppaverage pass rate
| # | Model | Agent | |||||
|---|---|---|---|---|---|---|---|
| 1 | Claude Opus 4.6mini-SWE-agentAPI, thinking adaptive high | mini-SWE-agent | 51.6 | 64.5 | +12.9 | $72.5$32.6 | −55.1% |
| 2 | GPT 5.4 minimini-SWE-agentAPI, thinking high | mini-SWE-agent | 45.2 | 61.3 | +16.1 | $7.9$6.1 | −23.5% |
| 3 | GPT 5.4mini-SWE-agentAPI, thinking high | mini-SWE-agent | 41.9 | 67.7 | +25.8 | $25.0$21.4 | −14.3% |
| 3 | Claude Sonnet 4.6mini-SWE-agentAPI, thinking adaptive high | mini-SWE-agent | 41.9 | 58.1 | +16.1 | $71.8$35.8 | −50.1% |
| 4 | GLM 5.1 (FP8)openmini-SWE-agentopen, self-hosted, thinking enabled | mini-SWE-agent | 32.3 | 48.4 | +16.1 | $23.1$14.6 | −36.7% |
| 4 | Kimi K2.5openmini-SWE-agentopen, API, thinking n/a | mini-SWE-agent | 32.3 | 38.7 | +6.5 | $11.2$7.5 | −32.6% |
| 5 | GLM 5openmini-SWE-agentopen, API, thinking enabled | mini-SWE-agent | 29.0 | 45.2 | +16.1 | $42.3$30.3 | −28.5% |
| 6 | Gemma 4 (31B)openmini-SWE-agentopen, self-hosted, thinking enabled | mini-SWE-agent | 19.4 | 38.7 | +19.4 | $4.9$4.5 | −8.6% |
| 7 | GLM 4.7openmini-SWE-agentopen, API, thinking enabled | mini-SWE-agent | 9.7 | 48.4 | +38.7 | $38.5$18.7 | −51.5% |
| 8 | GPT OSS (120B BF16)openmini-SWE-agentopen, self-hosted, thinking enabled | mini-SWE-agent | 6.5 | 29.0 | +22.6 | $3.7$3.3 | −11.5% |
Overview
DDBench tests AI agents' ability to debug distributed systems.
- Collect
- We collect 60 historical bugs, confirmed and fixed upstream, from 13 open-source distributed systems.
- Build
- Each case pins the buggy commit in Docker, with a symptom report, debug context, and a hidden oracle that fails before the fix and passes after.
- Evaluate
- An agent gets the symptom and code, with or without the debug context, and passes if the oracle reports PASS on its patch.
Findings
View data
| Model | SWE-bench Verified (%) | DDBench Tier 1 (%) |
|---|---|---|
| Claude Opus 4.6 | 80.8 | 51.6 |
| Claude Sonnet 4.6 | 79.6 | 41.9 |
| GPT 5.4 | 77.0 | 41.9 |
| Kimi K2.5 | 76.8 | 32.3 |
| GLM 5 | 77.8 | 29.0 |
| GLM 4.7 | 73.8 | 9.7 |
Paper Figure 1. DDBench runs are symptom-only. The GPT 5.4 SWE-bench score is from Epoch AI; the others are vendor-reported.
View data
| Model | Pass rate, symptom-only (%) | Pass rate, context (%) | $/case, symptom-only | $/case, context |
|---|---|---|---|---|
| Claude Opus 4.6 | 51.6 | 64.5 | 2.34 | 1.05 |
| Claude Sonnet 4.6 | 41.9 | 58.1 | 2.32 | 1.15 |
| GPT 5.4 | 41.9 | 67.7 | 0.81 | 0.69 |
| GPT 5.4 mini | 45.2 | 61.3 | 0.25 | 0.20 |
| GLM 5.1 (FP8) | 32.3 | 48.4 | 0.75 | 0.47 |
| GLM 5 | 29.0 | 45.2 | 1.36 | 0.98 |
| GLM 4.7 | 9.7 | 48.4 | 1.24 | 0.60 |
| Gemma 4 (31B) | 19.4 | 38.7 | 0.16 | 0.15 |
| Kimi K2.5 | 32.3 | 38.7 | 0.36 | 0.24 |
| GPT OSS (120B BF16) | 6.5 | 29.0 | 0.12 | 0.11 |
Paper Table 1 and Figure 6a. Cost per case is total cost divided by 31.
Gain (pp)
View data
| Tier | Symptom-only (%) | With context (%) | Gain (pp) |
|---|---|---|---|
| Tier 1 (31 cases) | 31.0 | 50.0 | +19.0 |
| Tier 2 (15 cases) | 48.0 | 62.7 | +14.7 |
| Tier 3 (14 cases) | 67.9 | 77.1 | +9.3 |
Paper section 3.5.
View data
| Mean per case | Symptom-only | With context |
|---|---|---|
| Tokens | 1.79M | 0.99M |
| Steps | 57.6 | 43.1 |
| Steps to first edit | 32.3 | 20.8 |
| Read actions | 24.7 | 17.7 |
| Explore actions | 10.9 | 6.8 |
| Edits | 3.0 | 3.1 |
Paper Table 3: 310 paired Tier 1 runs.
Dataset
View data
| Bug family | Tier 1 | Tier 2 | Tier 3 | Total |
|---|---|---|---|---|
| Protocol & recovery | 13 | 6 | 0 | 19 |
| Replication & consistency | 9 | 1 | 1 | 11 |
| Concurrency hazards | 4 | 5 | 2 | 11 |
| Input-triggered crashes | 0 | 0 | 10 | 10 |
| Resource & delivery | 5 | 3 | 1 | 9 |
Paper Figure 5.
View data
| Language | Tier 1 | Tier 2 | Tier 3 | Total |
|---|---|---|---|---|
| Go | 16 | 9 | 0 | 25 |
| C++ | 5 | 4 | 14 | 23 |
| Java | 8 | 0 | 0 | 8 |
| Rust | 0 | 2 | 0 | 2 |
| Erlang | 2 | 0 | 0 | 2 |
Case registry in the DDBench repository.
View data
| System | Tier 1 | Tier 2 | Tier 3 | Total |
|---|---|---|---|---|
| Dragonfly (C++) | 1 | 1 | 12 | 14 |
| NATS (Go) | 5 | 4 | 0 | 9 |
| Kvrocks (C++) | 4 | 3 | 1 | 8 |
| etcd (Go) | 5 | 2 | 0 | 7 |
| hashicorp/raft (Go) | 4 | 2 | 0 | 6 |
| Consul (Go) | 2 | 1 | 0 | 3 |
| Kafka (Java) | 3 | 0 | 0 | 3 |
| ZooKeeper (Java) | 3 | 0 | 0 | 3 |
| BookKeeper (Java) | 2 | 0 | 0 | 2 |
| raft-rs (Rust) | 0 | 2 | 0 | 2 |
| Ra (Erlang) | 1 | 0 | 0 | 1 |
| RabbitMQ (Erlang) | 1 | 0 | 0 | 1 |
| RocksDB (C++) | 0 | 0 | 1 | 1 |
Case registry in the DDBench repository.
Compared with other benchmarks
| Benchmark | Cross-process | Code fix | Executable oracle | Debug context | Languages |
|---|---|---|---|---|---|
| SWE-bench Verified | No | Yes | unit tests | No | 1 |
| Multi-SWE-Bench | No | Yes | unit tests | No | 8 |
| DebugBench | No | Yes | unit tests | No | 3 |
| AIOpsLab | Yes | No | telemetry | telemetry | — |
| CloudOpsBench | Yes | No | telemetry | telemetry | — |
| DDBench | Yes | Yes | E2E + unit tests | controlled | 5 |
Run a case
Quick start
git clone https://github.com/USC-NSL/DDBench && cd DDBench
# Build a case and confirm the bug
./bench.sh setup raft-358-negative-log-range
./bench.sh reproduce raft-358-negative-log-range
# Run the agent (add --context for debug context)
./bench.sh agent raft-358-negative-log-range --addon mini-swe-agent \
--prompt "Fix the bug in SYMPTOM.md" \
--config harness/configs/ddbench_prompt.yaml --output-dir out/
# Score a patch
./bench.sh eval raft-358-negative-log-range --patch my-fix.diff --json result.json