## 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>
Zed
Welcome to Zed, a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
Installation
On macOS, Linux, and Windows you can download Zed directly or install Zed via your local package manager (macOS/Linux/Windows).
Other platforms are not yet available:
- Web (tracking discussion)
Developing Zed
Contributing
See CONTRIBUTING.md for ways you can contribute to Zed.
Also... we're hiring! Check out our jobs page for open roles.
Licensing
Zed source code is licensed primarily under GPL-3.0-or-later, with Apache-2.0 components where marked.
License information for third party dependencies must be correctly provided for CI to pass.
We use cargo-about to automatically comply with open source licenses. If CI is failing, check the following:
- Is it showing a
no license specifiederror for a crate you've created? If so, addpublish = falseunder[package]in your crate's Cargo.toml. - Is the error
failed to satisfy license requirementsfor a dependency? If so, first determine what license the project has and whether this system is sufficient to comply with this license's requirements. If you're unsure, ask a lawyer. Once you've verified that this system is acceptable add the license's SPDX identifier to theacceptedarray inscript/licenses/zed-licenses.toml. - Is
cargo-aboutunable to find the license for a dependency? If so, add a clarification field at the end ofscript/licenses/zed-licenses.toml, as specified in the cargo-about book.
Sponsorship
Zed is developed by Zed Industries, Inc., a for-profit company.
If you’d like to financially support the project, you can do so via GitHub Sponsors. Sponsorships go directly to Zed Industries and are used as general company revenue. There are no perks or entitlements associated with sponsorship.