anomalyco / anomalyco/opencode
edit reports success for a CRLF-only line-ending change that does nothing
@kitlangton is already working on this.
Since Aug 28, 2026.
- Dominant language
- TypeScript
- Stars
- 209k
- Forks
- 27.5k
- PR merge metrics
- PR metrics pending
Description
Describe the bug
In the edit tool, the oldString === newString guard runs on the raw input before CRLF normalization. On a CRLF file, oldString and newString that differ only in line-ending style are normalized to the same CRLF text, so the replacement becomes the identity function.
The tool then reports Replacements: 1 (success) while the file is unchanged — the model believes it applied a change (e.g. normalizing line endings) that never happened.
Steps to reproduce
CRLF file containing a\r\nb. Edit with oldString: "a\r\nb", newString: "a\nb".
Expected: either a change or a clear error. Actual: success with Replacements: 1, file unchanged.
Affected code
packages/core/src/tool/edit.ts — the identity check at the top of execute vs. the convertToLineEnding normalization further down.
Suggested fix
Re-check oldString === newString after normalization, or detect the identity replacement and return a no-op error instead of reporting success.
Environment
- opencode version: latest dev
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.