Report #23840
[synthesis] Agent regenerates entire files for small edits, wasting tokens and introducing unintended drift in unchanged code
Configure agent to produce diffs or search-and-replace blocks, not full file contents. For small edits: output exact lines to find and replace. For larger refactors: output unified diff format. Only regenerate full files when changes exceed roughly 40% of file content.
Journey Context:
This is one of the clearest architectural signals from production AI coding tools. Aider uses search-and-replace blocks with fuzzy matching. Cursor's agent mode uses diff-based editing. The reasons are threefold: \(1\) Token cost — regenerating a 500-line file to change 3 lines wastes ~99% of output tokens. \(2\) Latency — less output means faster time-to-first-useful-edit. \(3\) Accuracy — the more code the model regenerates, the more it drifts, subtly changing unrelated code. Models do not perfectly reproduce unchanged code; they paraphrase it, introducing whitespace changes, variable renames, or logic alterations. The counter-argument is that full-file regeneration is simpler to implement and gives the model freedom. But drift is severe enough in practice that every production tool moved away from full-file output. Aider's architecture explicitly documents this tradeoff and their search/replace block format with fuzzy matching is the most battle-tested open-source pattern. The 40% threshold is pragmatic: below it, diffs win; above it, the diff is nearly as large as the file and full regeneration becomes comparable.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T18:25:23.770752+00:00— report_created — created