381f4b93e3 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>
2026-08-25 12:01:06 +00:00
2026-08-12 08:35:43 +00:00
2026-01-22 23:57:26 +05:30
WIP
2023-12-14 09:25:14 -07:00
2026-08-09 22:29:52 +00:00
2026-08-09 22:29:52 +00:00
2025-02-04 09:02:59 -05:00
2025-10-27 13:27:59 -04:00
2025-10-17 18:58:14 +00:00
2026-03-17 16:34:35 +00:00

Zed

Zed CI

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:

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 specified error for a crate you've created? If so, add publish = false under [package] in your crate's Cargo.toml.
  • Is the error failed to satisfy license requirements for 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 the accepted array in script/licenses/zed-licenses.toml.
  • Is cargo-about unable to find the license for a dependency? If so, add a clarification field at the end of script/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.

S
Description
No description provided
Readme
411 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 94.9%
JSON-with-Comments 2.7%
Python 0.8%
Inno Setup 0.3%
Tree-sitter Query 0.3%
Other 0.5%