Tvijo wiki
Каталог

Темы

Ревью кода, написанного ИИ: зачем проверять его в чистой копии

Код от агента может пройти все тесты на вашей машине и упасть везде, потому что тихо зависит от файлов, которые так и не закоммитили. Смотрите код дважды: прочитайте дифф, затем запустите тесты в свежей копии того, что собираетесь влить.

🎯 Для Разработчик или ревьюер, который принимает код, написанный ИИ-агентом (его часто называют vibe coding)

📚 Вы узнаете
  • Почему зелёные тесты у автора мало что доказывают
  • Порядок ревью, где решает проверка в чистой копии
  • Как безопасно откатить, если ошибка проскочила

🎲 Риск кода, который вы не печатали

Vibe coding — это принятие сгенерированного кода потому, что он вроде работает. Это быстро, и для одноразового скрипта нормально. Беда начинается, когда та же привычка доходит до общего кода. Агент работает в вашем рабочем дереве, где лежат файлы, которые вы изменили и не закоммитили, локальные настройки и кэш. Тесты, которые он запускает, видят всё это. Коллега, получивший коммит, ничего этого не видит.

🧾 Один случай в цифрах

14 октября 2026 агент перенёс в git модуль аналитики на 1 123 строки из снимка живого сервера. В рабочем дереве модуль проходил 56 тестов из 56. В чистой копии того же коммита падали 10 из 56: модуль зависел от неотслеженных правок соседнего файла. Коммит откатили в тот же день. Следом случилась вторая ошибка: у команды отката нет флага тихого режима, первая попытка не удалась, и затем --amend переписал чужой коммит.

В диффе ничего не выглядело неправильным. Беда была в том, чего в диффе нет.

🔍 Порядок ревью

Читать дифф необходимо, но недостаточно. У нас пять ворот.

  1. Объём. Дифф затрагивает только файлы, названные в задаче? Неожиданные пути, удалённые файлы и изменённые права — первое, на что смотрят.
  2. Чтение. Ревьюер может объяснить, что делает каждая новая функция и что она возвращает на плохом входе? Если нет — код ещё не принят.
  3. Чистая копия. Создайте свежее рабочее дерево от целевой ветки, примените только этот коммит и запустите там тесты. Прохождение в рабочем дереве не считается.
  4. Коды возврата. Запускайте команду тестов без конвейера. pytest | tail -1 && git commit коммитит на красном, потому что код возврата принадлежит tail.
  5. Откат готов. Знайте команду, которая отменяет изменение, до слияния и проверьте её на временной ветке.

🛠️ Практика: настройте ворота чистой копии

  1. Выберите один репозиторий, куда пишут агенты.
  2. Напишите короткий скрипт: создаёт временное рабочее дерево от целевой ветки, применяет коммит-кандидат, запускает тесты и удаляет дерево.
  3. Пусть скрипт завершается с ненулевым кодом при любом упавшем тесте и при неожиданном файле в статусе.
  4. Прогоните его на последних пяти коммитах агента. Запишите, сколько упало.
  5. Сделайте скрипт обязательным шагом перед слиянием. Прохождение у автора — информация, а не одобрение.
  6. Добавьте в инструкции агента правило: «показывай результат в чистой копии, а не локальный».

✅ Проверьте себя

  • Возьмите коммит, зависящий от неотслеженного файла. Скрипт падает и называет недостающий импорт или файл.
  • Внесите падающий тест и прогоните ворота через конвейер. Ворота всё равно падают: вы читаете код возврата самой команды тестов.
  • Новый человек запускает ворота по README меньше чем за пять минут.
  • Вы можете сказать, какой из последних десяти коммитов агента затронул путь, которого не было в задаче.

🚧 Когда это не работает

  • Тесты, не проверяющие поведение. Чистая копия со слабыми тестами даёт чистый «зелёный» для сломанного кода. Агенты к тому же пишут тесты, которые сами проходят.
  • Зависимость от окружения. Тест, которому нужны база, ключ или хост, в свежем дереве не пройдёт. Пометьте его явно и запускайте там, где это есть, а не лечите подделкой данных.
  • Большие диффы. Дальше нескольких сотен строк ревью превращается в беглый просмотр. Просите изменения поменьше.
  • Сгенерированный код, к которому вы не вернётесь. Одноразовому скрипту ворота могут быть не нужны. Решите это сознательно.
  • Ревью той же моделью. Модель, написавшая код, часто с ним соглашается. Сначала детерминированная проверка, потом другой ревьюер.

📊 Доказательства

Что измерено Тесты в рабочем дереве и в чистой копии для одного модуля, написанного агентом
Когда Случай 14 октября 2026; записи проверены 3 ноября 2026, 22:06 UTC
Артефакт Наша история git: коммит отката от 14 октября 2026, 14:14 UTC, удаливший 1 123 строки, и запись в файле правил для агентов
Ограничение Один случай. Он показывает форму сбоя, а не его частоту

➡️ Дальше

Записывайте приёмку до начала работы по Разработке по спецификации на готовых пакетах задач и поймите, почему заявление об успехе не доказательство, в AI judging.

Источники

Связи опубликованных статей. Выберите узел, чтобы открыть статью у заголовка.

100%
→ Связанные статьи← Ссылаются сюда⋯ Та же тема
Связи статей · клавиатура / текст

💬 Комментарии

Комментарии публичны и модерируются. Не публикуйте персональные данные.
  • Комментариев пока нет. Будьте первым!

Следующие шаги

ИИ-агенты и MCP простыми словами

Векторная база — это карта, а не источник: чему нас научил поиск

Векторная база находит фрагменты, близкие по смыслу к вашему вопросу. Она не знает, какие из них верны или актуальны. Считайте каждое попадание указателем: откройте названный файл, сверьте хэш, а числа берите из артефакта, а не из найденного абзаца.

ИИ-агенты и MCP простыми словами

Когда неизвестно, сколько стоил вызов модели: заморозка, затем сверка

Иногда вызов модели обрывается по таймауту, и вы не знаете, списал ли провайдер деньги. Никогда не записывайте это как ноль. Пометьте как неопределённое, остановите новые платные вызовы и пусть названный человек сверит это с выпиской провайдера. Отказы до генерации — исключение.

ИИ-агенты и MCP простыми словами

Как разбить большую задачу для дешёвой модели: урок 24 000 байт

Дешёвая модель хорошо справляется с одной небольшой чёткой задачей и плохо — с большой кучей. Мы ограничиваем задачу 24 000 байт и отклоняем большие до вызова любой модели. Режьте по единицам — один файл или одна страна на задачу — и проверяйте размер до запуска.

ИИ-агенты и MCP простыми словами

Навыки, MCP-инструменты и правила: три способа дать агенту возможности

Агенты получают способности по-разному. Правило ограничивает, что они делают, навык говорит, как делать работу, а MCP-инструмент позволяет вызывать функцию. У каждого свой риск, поэтому объявляйте все три в реестре и проверяйте тестом, что ничего не существует вне списка.