Expand description
Implementation of the MultiFileEdit tool.
Applies edits across several files all-or-nothing at the COMPUTE stage: every
file is validated and its new content computed in memory first (reusing
file_write_or_edit::plan_edit), and only if ALL succeed is anything written.
So a SEARCH block that fails to match in the last file leaves the earlier
files untouched, instead of the half-edited tree N separate FileWriteOrEdit
calls would leave.
The write stage is a sequence of individually-atomic single-file renames
(commit_edit -> preconditioned atomic replacement). It stops at the first I/O failure and
reports which files were already written; it does NOT roll them back (each is
already crash-safe on its own, and a second write pass could fail and corrupt
more state).