Почему ИИ-агент правит не тот файл — три причины и как проверить каждую

Симптом знакомый до зубовного скрежета. Ты просишь поправить текст на кнопке. Агент бодро отчитывается: готово, изменил. Ты открываешь приложение — кнопка прежняя. Открываешь файл — там тоже всё по-старому.
Агент не соврал. Он честно отредактировал файл. Просто не тот.
Хорошая новость: причин, по которым это происходит, всего три, и каждая проверяется за минуту. Начнём с самой частой.
Причина 1: он работает не в той папке
Агент правит файл по пути src/ui/Button.tsx. Ты смотришь в свой src/ui/Button.tsx. Пути совпали, а файлы разные — потому что корень у вас разный.
Так бывает чаще, чем кажется: агент запущен из подпапки или из другого каталога; ты открыл второй клон проекта для эксперимента; или работаешь через git worktree, и агент сидит в соседнем дереве, где ветка другая.
Как проверить. Попроси его показать, где он находится и на какой ветке:
pwd && git branch --show-current
Сравни с тем, что открыто у тебя в редакторе. И ещё: требуй от агента абсолютные пути в отчёте — /home/me/shop/src/ui/Button.tsx вместо «изменил Button.tsx». Половина таких загадок раскрывается прямо на этой строчке.
Как починить. Запускай агента из корня проекта. Если параллельно работают несколько — каждому своя рабочая папка, а не общая. И проверяй ветку перед правкой: файл может быть правильный, а ветка — не та, с которой ты собираешь.
Причина 2: в проекте живёт файл-двойник
Вторая по частоте и самая коварная. В репозитории два файла с одинаковым именем:
src/components/Button.tsxиsrc/legacy/Button.tsx;- копия страницы, оставшаяся после рефакторинга;
utils.tsв четырёх местах;- компонент и его же «старая версия», которую забыли удалить.
Агент ищет по имени, находит первое совпадение — и уверенно правит его. Логика у него та же, что у тебя при поиске в редакторе: совпало имя — значит, тот самый.
Как проверить. Найди все совпадения разом:
git ls-files | grep -i button
Если строк больше одной — ты нашёл причину. Дальше выясни, какой файл реально попадает в сборку: посмотри, что импортируется в том месте, где кнопка показывается на экране.
Как починить. Давай точный путь прямо в просьбе: не «поправь кнопку», а «поправь src/components/Button.tsx». Мёртвые копии удаляй — они путают не только агента. Если старый код пока нужен, скажи об этом в правилах проекта: «файлы в src/legacy/ не трогать».
Причина 3: он правит сгенерированный файл
Тут правка действительно уходит в тот файл, который ты смотришь — и всё равно исчезает. Потому что этот файл делает не человек, а сборщик.
Типичные жертвы: всё внутри dist/, build/, out/; скомпилированный CSS; клиент API, сгенерированный по схеме; конфиги проектов, которые собираются генератором. Ты видишь изменение, запускаешь сборку — и файл перезаписывается исходной версией.
Как проверить. Два быстрых признака: файл перечислен в .gitignore (значит, он продукт, а не источник) и в его шапке стоит что-то вроде «autogenerated — do not edit».
Как починить. Правь источник: шаблон, схему, конфиг генератора — то, из чего файл собирается. И скажи агенту прямо: «dist/ не трогай, это сборка». Сам по себе он такую границу не чувствует — для него текст есть текст.
Быстрый чеклист на минуту
Прежде чем спорить с агентом, пройди сверху вниз:
- Он в той же папке и на той же ветке, что и ты?
- Файл с таким именем в проекте один?
- Этот файл — источник или результат сборки?
- Ты перезапустил сервер или собрал проект заново после правки?
Три из четырёх случаев закрываются здесь. Остальное — уже обычная отладка вместе с ИИ.
Почему агент не проверяет это сам?
Потому что он видит файловую систему, а не твои намерения. Файл с подходящим именем существует, права на запись есть, правка применилась — с его точки зрения задача выполнена. Он не знает, что у тебя в редакторе открыт другой каталог. Это один из системных источников ошибок в коде от ИИ: формально верное действие не в том месте.
Как сделать, чтобы это не повторялось?
Приучи себя к двум привычкам. Первая: просить показывать абсолютные пути изменённых файлов — тогда ошибка видна сразу, а не через полчаса. Вторая: заканчивать правку проверкой результата, а не отчётом — «покажи, что изменилось» или git diff. Отчёт врёт не потому, что агент хитрый, а потому что он отчитывается о своём действии, а не о твоём результате.
Он говорит «файл не найден», хотя файл есть
Та же причина номер один, с другой стороны: агент смотрит из другого корня. Дай абсолютный путь целиком — и «пропавший» файл найдётся мгновенно.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





