action_log: Diff overwritten files against their prior content (#62267)

## Problem

When the agent overwrites an existing file (for example via `write_file`
in write mode, or "rewrite this file"), the edits panel reported the
change as purely added lines — e.g. `+237 -0` — and the review diff did
not show any of the removed lines.

The root cause is in `action_log::track_buffer_internal`: a created
buffer always used an empty rope as its diff baseline, even when it was
overwriting a file that already had content. Diffing the new content
against an empty base makes every line look like an addition and hides
all deletions.

This only affects the edits-panel stats and the Review diff (the
`action_log` path). The inline per-tool-call diff card already captures
its own pre-edit baseline and was correct, which is likely why this went
unnoticed.

## Solution

When tracking a created buffer that has captured existing file content
(`TrackedBufferStatus::Created { existing_file_content: Some(_) }`), use
that content as the diff baseline and seed `unreviewed_edits` from a
line diff against it, so removed lines are counted and displayed.

Genuinely new files (`existing_file_content: None`) keep the previous
empty-baseline behavior. Reject/undo are unaffected because they rely on
`existing_file_content` and the captured agent content rather than the
diff baseline.

## Testing

Added `test_overwriting_file_counts_removed_lines`, asserting
`diff_stats` reports both added and removed lines for an overwrite.

Updated the display assertions in `test_overwriting_files`,
`test_overwriting_previously_edited_files`, and `test_deleting_files` —
these previously asserted the buggy all-added/empty-base output and now
assert the correct `Modified` hunks with the original content. Their
reject assertions are unchanged and still pass.

`cargo test -p action_log` (30 passed), `cargo test -p agent write_file`
(19 passed), and `./script/clippy -p action_log` are all clean.

---

Release Notes:

- Fixed the agent edits panel and review diff showing whole-file
overwrites as entirely added lines with no removals.

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
b20c469479Bobo committed on 8/25/2026, 12:01:06 PM· committed by GitHubparent38c5dd7
1 file changedLine totals unavailable