mirror of
https://github.com/multica-ai/multica.git
synced 2026-08-05 09:30:05 +02:00
Addresses review on #6158. Upstream's format_file_change_diff only produces a unified diff for `update`. For `add` and `delete` it returns the whole file's contents under the same `diff` field, and for a moved `update` it appends a trailing "\n\nMoved to: <path>" line: FileChange::Add { content } => content.clone(), FileChange::Delete { content } => content.clone(), FileChange::Update { unified_diff, move_path } => ... (codex-rs/app-server-protocol/src/protocol/item_builders.rs, rust-v0.145.0) Recording that as a diff mislabels every line of an added or deleted file as context, and actively inverts any line whose content begins with '+' or '-' — so an added file containing "-minus lead" rendered as a deletion. The payload is now routed by `kind` rather than by field name, and the "Moved to:" sentence is stripped since move_path already carries the destination. The previous v2 tests hid this by using a fixture the real protocol never emits (an `add` carrying "@@ ... +package main"). They now use upstream's shape, plus cases for delete, an empty add, and an add whose contents look like diff headers. Empty bodies are also kept on both paths: presence of the field, not its non-emptiness, decides whether a body was reported, so an empty added file renders as an empty body instead of "no content reported". Verified: the new assertions fail against the previous normalizer — where an `add` came through as {"diff": "package main\n"} — and pass now. Co-authored-by: multica-agent <github@multica.ai>