Aider-AI/aider · error · DiffError

Update File Error - missing file content for: {path}

Error message

Update File Error - missing file content for: {path}

What it means

Raised by PatchCoder._parse_patch_text when an '*** Update File:' path is not in the current_files dict preloaded by get_edits. current_files only contains paths returned by identify_files_needed (those seen under '*** Update File:'/'*** Delete File:' headers during the pre-scan), so this fires when the parse-time path differs from the pre-scan path or the preload silently skipped it.

Source

Thrown at aider/coders/patch_coder.py:325

                break  # Successfully reached end

            # ---------- UPDATE ---------- #
            if norm_line.startswith("*** Update File: "):
                path = norm_line[len("*** Update File: ") :].strip()
                index += 1
                if not path:
                    raise DiffError("Update File action missing path.")

                # Optional move target
                move_to = None
                if index < len(lines) and _norm(lines[index]).startswith("*** Move to: "):
                    move_to = _norm(lines[index])[len("*** Move to: ") :].strip()
                    index += 1
                    if not move_to:
                        raise DiffError("Move to action missing path.")

                if path not in current_files:
                    raise DiffError(f"Update File Error - missing file content for: {path}")

                file_content = current_files[path]

                existing_action = patch.actions.get(path)
                if existing_action is not None:
                    # Merge additional UPDATE block into the existing one
                    if existing_action.type != ActionType.UPDATE:
                        raise DiffError(f"Conflicting actions for file: {path}")

                    new_action, index, fuzz = self._parse_update_file_sections(
                        lines, index, file_content
                    )
                    existing_action.chunks.extend(new_action.chunks)

                    if move_to:
                        if existing_action.move_path and existing_action.move_path != move_to:
                            raise DiffError(f"Conflicting move targets for file: {path}")
                        existing_action.move_path = move_to

View on GitHub (pinned to 5dc9490bb3)

Solutions

  1. Make every occurrence of the path in the patch byte-identical (same case, same './' prefix, no trailing spaces).
  2. Check the exact path string in the error against an ls of the repo root.
  3. If the file genuinely exists, ensure get_edits' preload succeeded for it (no earlier read errors).
  4. Regenerate the patch with consistent paths and feed the error back to the model.

Example fix

# before
*** Update File: ./src/App.py
...
*** Update File: src/app.py   (second, inconsistent spelling → missing content)

# after
*** Update File: src/app.py   (one consistent spelling everywhere)
Defensive patterns

Strategy: validation

Validate before calling

def path_spelling_is_consistent(patch_text: str) -> bool:
    import re
    paths = [m.group(1).strip() for m in re.finditer(r"\*\*\* (?:Update|Delete) File: (.+)", patch_text)]
    return len(paths) == len(set(paths))  # False → mixed spellings; normalize first

Try / catch

try:
    coder.get_edits(patch_text)
except ValueError as e:
    if "missing file content for:" in str(e):
        patch_text = normalize_paths(patch_text)  # one canonical spelling per file
        coder.get_edits(patch_text)
    else:
        raise

Prevention

When it happens

Trigger: A path that reaches the UPDATE branch in _parse_patch_text but was never loaded: typically path spelling/case differences between the identify_files_needed pre-scan and the parse loop, or a preload that failed to populate the entry for an exactly matching path (the None-return read case raises earlier, so mismatches are the usual cause).

Common situations: Trailing whitespace, case differences, or './' prefixes that make the parsed path differ string-wise from the scanned one; patches produced against a different filesystem where case matters; duplicated update headers with inconsistent path spellings.

Related errors


AI-assisted analysis of Aider-AI/aider@5dc9490bb3 (2026-08-15). Data as JSON: /api/errors/da85db887d497f4f. Report an issue: GitHub.