earendil-works/pi · error · Error
Could not find edits
Error message
Could not find edits[${editIndex}] in ${path}. The oldText must match exactly including all whitespace and newlines. What it means
Multi-edit not-found error from applyEditsToNormalizedContent: the oldText of edits[editIndex] could not be found by fuzzyFindText in the normalized content (the index identifies which array element failed). The file does not currently contain that text, so nothing is written and the caller must re-read the file or correct the edit.
Solutions
- Re-read the file and copy the exact text, including all whitespace and newlines, into the edit's oldText.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/agent/src/harness/tools/edit-diff.ts:326 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24).
Data as JSON: /api/errors/314ff4def5582b4c.
Report an issue: GitHub.
Appendix: source
Thrown at packages/agent/src/harness/tools/edit-diff.ts:326
newText: normalizeToLF(edit.newText),
}));
for (let i = 0; i < normalizedEdits.length; i++) {
if (normalizedEdits[i].oldText.length === 0) {
throw getEmptyOldTextError(path, i, normalizedEdits.length);
}
}
const initialMatches = normalizedEdits.map((edit) => fuzzyFindText(normalizedContent, edit.oldText));
const usedFuzzyMatch = initialMatches.some((match) => match.usedFuzzyMatch);
const replacementBaseContent = usedFuzzyMatch ? normalizeForFuzzyMatch(normalizedContent) : normalizedContent;
const matchedEdits: MatchedEdit[] = [];
for (let i = 0; i < normalizedEdits.length; i++) {
const edit = normalizedEdits[i];
const matchResult = fuzzyFindText(replacementBaseContent, edit.oldText);
if (!matchResult.found) {
throw getNotFoundError(path, i, normalizedEdits.length);
}
const occurrences = countOccurrences(replacementBaseContent, edit.oldText);
if (occurrences > 1) {
throw getDuplicateError(path, i, normalizedEdits.length, occurrences);
}
matchedEdits.push({
editIndex: i,
matchIndex: matchResult.index,
matchLength: matchResult.matchLength,
newText: edit.newText,
});
}
matchedEdits.sort((a, b) => a.matchIndex - b.matchIndex);
for (let i = 1; i < matchedEdits.length; i++) {
const previous = matchedEdits[i - 1];View on GitHub (pinned to 4af9d21d3b)