AltimateAI / AltimateAI/altimate-code

`edit` tool: "Could not find oldString" failure — model context drift

未關閉
#470 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
TypeScript
星號
811
分支
134
平均合併
3 天 2 小時
30 天內合併 PR
50

描述

## Problem

The `edit` tool fails with:

```
Could not find oldString in the file. It must match exactly, including whitespace, indentation, and line endings.
```

236 occurrences in a single day. This is the second most common tool failure after `webfetch`.

## Root cause

The model's in-context representation of a file drifts from the actual file content. This happens when:

1. **External processes** (formatters, linters) modify files after the model reads them — partially addressed by #450
2. **Multiple edits** to the same file where the model uses stale oldString from before previous edits
3. **Context compaction** drops or summarizes file content, leaving the model with an outdated view
4. **Model hallucination** — generating oldString that was never in the file

## Impact

- Each failed edit wastes a tool call
- Model often retries with the same incorrect oldString, creating short failure bursts
- The existing doom loop detector (threshold=3) catches identical inputs but not semantically similar ones

## Suggested investigation

1. Analyze whether failures correlate with files that were recently edited (context drift) vs. files never read (hallucination)
2. Consider including a snippet of the actual file content in the error response so the model can self-correct (similar approach to #450 for stale files)
3. Evaluate whether the fuzzy matchers (LineTrimmedReplacer, WhitespaceNormalizedReplacer, etc.) are catching enough cases or if thresholds need tuning

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。