v0.19.2 — file-edit data integrity
Dies ist die Release Note so, wie sie veröffentlicht wurde, keine Neufassung davon. Release Notes werden in der Sprache veröffentlicht, in der sie geschrieben wurden.
An eleventh adversarial review, of the file-mutation surface (edit_file / apply_patch / write_file). The logic guards (unique-anchor, path-jail, write-region) reviewed clean — the exposure was entirely at the byte-I/O layer, and it's the kind of silent corruption this surface exists to prevent.
Fixed
- File edits no longer silently rewrite every line ending. Reads/writes went through
Path.read_text/write_text, whose universal-newline translation flipped the WHOLE file to the platform's line ending — a one-line edit on an LF file became a whole-file CRLF diff on Windows (and an LF-flatten on Linux). Edits now read as bytes normalized to\nfor matching and write back preserving the file's original newline convention. (A CRLF file also now anchors a model's\n-based match string correctly.) - File writes are crash-atomic — temp file +
os.replace, so a crash or I/O error mid-write can't truncate the user's existing file. apply_patchanchors every hunk against the ORIGINAL content (not a copy mutated by earlier hunks) and rejects overlapping target regions.- Non-UTF-8 files get a clear "not a UTF-8 text file" error instead of an opaque failure — and are never touched.
Note: the newline bug predates the 0.19.x line (it's been in the file tools since surgical editing landed) — this is the fix, not a fresh regression.
Gate: 1447 passed / 3 skipped, mypy + ruff green (+8 byte-level tests).
Upgrade (recommended for anyone using edit_file/apply_patch): `pip install --upgrade 'chimera-agent[full]'`