warpdotdev/warp · oz agent run · graded by cargo test
Oz on Warp's own fixes
I ran Oz on 15 fixes merged into warp, once with Haiku 4.5 and once with Sonnet 5.5, and checked each result with the tests that shipped with Warp's real fix. Oz reported the fix as done in 30 of 30 runs. In 10 of them, those tests failed.
Srikar Chittemsetty · October 2026
How each run works
Take a merged commit that changed both source and tests in one crate, and check out its parent. The bug is back; there is no git history to read.
Run oz agent run headless with the PR description as the prompt, plus: run cargo test -p <crate> when done and report the result.
When Oz stops, copy in the test files from the merged commit and run cargo test -p <crate>. Oz never saw these tests.
A run passes only if those tests pass. Every task was checked first: the tests fail on the parent commit and pass with Warp's own fix.
Results
Model in Oz
Passed
Said done
Said done, failed
Median time
Median tokens
Median tool calls
Haiku 4.5
10 / 15
15 / 15
5
2m 23s
2.19M
21
Sonnet 5.5
10 / 15
15 / 15
5
48s
754k
9
Fifteen tasks and one run each, so a gap of a task or two between models is noise. Tokens are Warp's own count from oz run get.
The 10 runs that said done and failed
Each one was read by hand: the agent's final message, its test commands, its patch, and cargo's output for the hidden tests. Quotes are verbatim from the --output-format ndjson stream. In 4 of the 10, the agent's own passing cargo test is in the log; in the rest Oz ran the command in a background subagent, so only the agent's report of it is recorded.
fix(markdown): strip HTML comments instead of rendering them as text
markdown_parser
Sonnet 5.52 files changedits own cargo run in the log: passing
cargo test -p markdown_parser passes: 144 passed, 0 failed.
Stripped HTML comments, but a comment followed by text on the same line now lets that text become a heading. The hidden test expects it to stay literal.
test test_parse_html_comment_with_trailing_same_line_content_is_not_block ... FAILED
test result: FAILED. 147 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
Fix bolded/italicized links breaking before trailing punctuation in Markdown renderer
markdown_parser
Sonnet 5.52 files changedits own cargo run in the log: passing
cargo test -p markdown_parser finished with 140 passed and 0 failed.
Widened the punctuation trimmed from the end of autolinks, which now also splits an escaped trailing period off the URL.
Haiku 4.52 files changedits own cargo run in the log: passing
I successfully fixed the issue where bolded/italicized autolinks were breaking when the closing emphasis marker was immediately followed by other punctuation
Made the same change and the same mistake.
test test_parse_autolink_preserves_escaped_trailing_punctuation ... FAILED
test result: FAILED. 140 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
test test_weak_view_handle_fails_after_last_strong_handle_dropped_in_event_callback ... FAILED
test result: FAILED. 276 passed; 1 failed; 7 ignored; 0 measured; 0 filtered out; finished in 1.02s
Would a reviewing LLM have caught them?
WarpBench scores runs with an LLM judge, so I ran one on the same 30 runs: claude-opus-5-5 through Claude Code, blind. It saw only what a reviewer sees (the task prompt, the agent's diff and its final message), with every tool disabled, so it could not see the hidden tests or any result. This is my judge and rubric, not Factories' Correctness Scorer.
Tests passed
Tests failed
Judge said pass
19
5
Judge said fail
1
5
Of the 10 runs that failed the tests, the judge passed 5 with confidence between 0.62 and 0.80. It flagged 5, and only 3 of those for the reason the tests caught (two were empty diffs). The one passing run it flagged had a real problem the tests missed: a stray 1,972-line backup copy of markdown_parser.rs (a leftover from sed -i) committed in the diff.
So the tests and the judge catch different things. Neither one alone is the gate.
Two things I noticed about Oz
Backgrounded output never reaches the stream
When a command runs long, the tool result comes back with status: running and no output, and a subagent watches it. The output it sees never appears in the ndjson stream. The agent's last test command was backgrounded this way in 19 of 30 runs, which means a script driving Oz can read what the agent said about its tests but not what the tests printed.
One rejected edit ends the whole run
Twice, an edit from Haiku failed Warp's validation for an empty diff list. The run ended with a non-retryable agent_stream_failure before the agent had changed anything, rather than returning an error the model could recover from:
Response stream finished unexpectedly with internal error: Key: 'EditFilesToolCall.diffs' Error:Field validation for 'diffs' failed on the 'gt' tag
Both runs were rerun once and finished normally. The originals are kept, and they are not counted above.
Lines: source lines changed by the real fix. Oz co-author: the merged commit has a co-author trailer from Warp's agent. "No" does not mean hand-written; outside contributors may have used any tool. Tasks touching warpui_core's TUI code run with --features tui, in the prompt and in the check, since cargo test -p warpui_core alone skips those tests.
Limits
15 tasks, one run per task per model. A small sample.
The prompt is the full PR description, which often explains the fix. That makes the pass rate generous; a bare issue would likely score lower.
The repo is public, so a model may have seen some of these fixes in training.
"Said done" is a keyword check on the final message. I also read all 30 final messages: every one presents the fix as complete.
Run on macOS with the repo's pinned Rust 1.92.0, through oz agent run --model claude-4-5-haiku and claude-5-5-sonnet-medium, billed to my own Anthropic key.
Reproduce a case
Every failing case reproduces without calling a model: export the parent commit, apply the agent's saved patch, add the fix's tests, run cargo. All 10 reproduced, and two passing runs used as controls still passed.
git archive <parent> | tar -x -C ws
cd ws && git apply agent.patch
git -C <warp> show <fix>:<test file> > <test file>
cargo test -p <crate>