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.

How each run works

  1. 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.
  2. Run oz agent run headless with the PR description as the prompt, plus: run cargo test -p <crate> when done and report the result.
  3. When Oz stops, copy in the test files from the merged commit and run cargo test -p <crate>. Oz never saw these tests.
  4. 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 OzPassedSaid doneSaid done, failedMedian timeMedian tokensMedian tool calls
Haiku 4.510 / 1515 / 1552m 23s2.19M21
Sonnet 5.510 / 1515 / 15548s754k9

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.

#14009

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
#13747

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
#14222

fix(tui): better wrapping for shell command tool call for TUI

warpui_core --features tui
Haiku 4.5changed nothingits own cargo run in the log: passing
The fix is correctly implemented in the code

Read the existing code, concluded the fix was already there, and changed nothing.

Sonnet 5.51 file changedtest output not in the log (backgrounded)
cargo test -p warpui_core --features tui passed: 521 unit tests passed, 0 failed, 7 ignored.

Let the header wrap instead of truncating, so the chevron moves to the second row. The tests require it to stay on the first.

test narrow_header_keeps_chevron_on_first_row_while_label_wraps ... FAILED
test narrow_header_keeps_chevron_on_first_row_when_expanded ... FAILED
test very_narrow_header_keeps_chevron_visible_without_a_truncated_spacer ... FAILED
test result: FAILED. 521 passed; 3 failed; 7 ignored; 0 measured; 0 filtered out; finished in 1.02s
#13596

[TUI] Keep transcript selection active while dragging past viewport edges

warpui_core --features tui
Haiku 4.5changed nothingtest output not in the log (backgrounded)
The PR's changes to enable event-driven vertical scrolling while selecting text in the TUI transcript are working correctly.

Changed nothing, ran the existing tests, and reported that the PR's changes were working.

test repaint_after_mouse_up_preserves_selection_on_glyph_change ... FAILED
test drag_past_edge_preserves_selection_when_scroll_changes_a_visible_glyph ... FAILED
test selectable_viewport_scrolls_up_from_top_terminal_row ... FAILED
test result: FAILED. 467 passed; 3 failed; 7 ignored; 0 measured; 0 filtered out; finished in 1.02s
#13065

Fix markdown link clicks in AI block output doing nothing

warpui_core
Haiku 4.51 file changedtest output not in the log (backgrounded)
All 289 tests pass. The fix is working correctly.

Edited the mouse-down handling. The hidden test checks that a mouse-up over a link is reported as handled.

Sonnet 5.52 files changedtest output not in the log (backgrounded)
cargo test -p warpui_core passed: 290 passed, 0 failed, 7 ignored, plus the doc-tests.

Made a single mouse-down on a link return handled. The test needs the mouse-up handled, so it still fails.

test single_click_on_link_is_handled_so_selection_is_not_started ... FAILED
test result: FAILED. 289 passed; 1 failed; 7 ignored; 0 measured; 0 filtered out; finished in 1.01s
#11767

Fix WeakModelHandle::upgrade creating zombie handles after last strong handle dropped

warpui_core
Haiku 4.53 files changedtest output not in the log (backgrounded)
All 276 tests passed (plus 7 ignored), and 2 doc tests passed. The fix is complete and working correctly.

Fixed the stale-handle bug for weak model handles and left the same bug in weak view handles, which the hidden test covers.

Sonnet 5.53 files changedtest output not in the log (backgrounded)
cargo test -p warpui_core passes: 276 passed, 0 failed, 7 ignored.

Made the same model-only fix.

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 passedTests failed
Judge said pass195
Judge said fail15

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.

All 15 tasks

PRChangeCrateLinesOz co-authorHaiku 4.5Sonnet 5.5
#11767Fix WeakModelHandle::upgrade creating zombie handles after last strong handle droppedwarpui_core13yesfailfail
#11936Make StandardizedPath::strip_prefix component-awarewarp_util23nopasspass
#12642fix(warp_files): avoid reversed line range on first-line truncationwarp_files7nopasspass
#12644fix(markdown_parser): widen delimiter run counter to avoid u8 overflowmarkdown_parser16nopasspass
#13065Fix markdown link clicks in AI block output doing nothingwarpui_core73yesfailfail
#13596[TUI] Keep transcript selection active while dragging past viewport edgeswarpui_core69yesfailpass
#13651Fix TUI scroll position anchoringwarpui_core3nopasspass
#13747Fix bolded/italicized links breaking before trailing punctuation in Markdown renderermarkdown_parser37nofailfail
#13782fix(tui): enable Kitty keyboard protocol so Shift+Enter inserts a newlinewarpui_core22yespasspass
#14009fix(markdown): strip HTML comments instead of rendering them as textmarkdown_parser49nopassfail
#14222fix(tui): better wrapping for shell command tool call for TUIwarpui_core164yesfailfail
#14432Fix terminal lag + related warnings when dragging an active session to a new windowwarpui_core52yespasspass
#14512Preserve numeric CSS font-weights when pasting rich textmarkdown_parser58nopasspass
#15705Fix em_width panic when a glyph has no bounding boxwarpui_core21yespasspass
#15772Guard reversed glyph bounds in smart_selectwarpui_core4yespasspass

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

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>