Между словами код написан и задача сделана лежит целая фаза, которую легко пропустить. Итоговое сообщение агента описывает намерение: что он хотел изменить и почему. Diff показывает фактическую реализацию - то, что действительно попадёт в репозиторий. Эти две вещи расходятся чаще, чем хотелось бы, и не по злому умыслу: сообщение пишется по плану, а код получается по ходу дела. Единственный способ узнать о расхождении вовремя - смотреть на diff, а не на пересказ.
Наивная проверка выглядит так: прочитать финальный абзац, увидеть слово готово и принять изменения. Она пропускает целые классы правок. В diff остаются неотслеживаемые файлы, сгенерированные артефакты, обновлённые файлы блокировок зависимостей и правки конфигурации, о которых в сообщении не было ни слова - не потому, что агент скрыл, а потому, что для него это побочный результат работы, а не предмет рассказа.
Поэтому обзор устроен как отдельная фаза с собственным интерфейсом: изменения можно посмотреть, принять, отклонить или прокомментировать. Ценность в том, что решение принимается по каждому изменению отдельно, а не по задаче целиком. Это ровно та гранулярность, которой не хватает, когда diff большой: принять полезное и отклонить лишнее дешевле, чем откатывать всё и объяснять заново.
Вторая половина обзора - доказательства, и у них есть уровни. Синтаксис доказывает форматтер или компилятор. Типы - проверка типов с кодом возврата. Поведение - сфокусированный тест или воспроизводимый сценарий. Регрессии - более широкий прогон в разумной области. Интерфейс - взаимодействие в браузере со снимком экрана. Интеграция - сборка или контрактный тест. И само изменение - ручной просмотр diff плюс чистый ожидаемый git status.
Полезно один раз свести эти уровни в таблицу и держать перед глазами. К ней возвращаются, когда нужно ответить на вопрос, достаточно ли проверено: уровень доказательства подбирают под цену ошибки, а не под желание побыстрее закрыть задачу. Мелкая правка текста не требует прогона всего набора тестов, а изменение расчёта денег не закрывается тем, что проект собрался.
| Уровень | Доказательство |
|---|---|
| Синтаксис | Форматтер, парсер, компилятор |
| Типы | Проверка типов проекта с кодом возврата |
|---|
| Поведение | Сфокусированный тест или воспроизводимый сценарий |
|---|
| Регрессии | Более широкий прогон в допустимой области |
|---|
| Интерфейс | Взаимодействие в браузере, снимок экрана или запись |
|---|
| Интеграция | Сборка или контрактный тест и явные внешние ограничения |
|---|
| Изменение | Ручной просмотр diff и чистый ожидаемый git status |
|---|
Полезен и приём независимого обзора: попросить агента проверить собственную работу как рецензента - сначала перечислить риски по серьёзности с указанием файлов, затем запустить существующие сфокусированные проверки и не исправлять найденное, пока не показал находки. Разделение находок и правок здесь принципиально: иначе рецензия превращается в новую партию изменений, которую опять никто не рассматривал.
У доказательств есть свойство, о котором вспоминают поздно: проверка что-то доказывает, только если она чувствительна к изменению. Зелёный прогон после правки означает лишь то, что набор тестов не заметил разницы, - а это ровно то, что произойдёт, если изменённая ветка тестами не покрыта. Проверить чувствительность дешевле, чем кажется: назовите тест, который упал бы, если правку откатить. Если такого теста нет, поведение не доказано, сколько бы галочек ни стояло рядом.
У обзора по каждому изменению есть цена, и она растёт быстрее размера diff. Двадцать правок в трёх файлах разбираются за несколько минут; двести правок в тридцати файлах внимательно прочитать уже не выходит, и решение принимается пачкой. Поэтому размер задачи выбирают не по амбиции, а по читаемости результата: задача должна давать diff, который вы разберёте за один заход. Признак, что граница нарушена, простой - вы принимаете изменения, не открыв часть файлов.
Отсюда формула завершения, которую стоит запомнить. Код написан - это промежуточное состояние. Завершение - это ожидаемый diff плюс наблюдаемое поведение плюс выполненные проверки плюс явный список того, что проверить не удалось. Последний пункт не признак слабости, а признак честности: он показывает, где ваше внимание нужнее всего.
Типичные провалы обзора предсказуемы. Судить по итоговому сообщению вместо diff. Пропустить неотслеживаемые и сгенерированные файлы, которые не видны в привычном просмотре. Принять зелёный прогон за доказательство поведения, которое этот прогон не покрывает. И согласиться на исправление найденного до того, как находки показаны и оценены.
Проверь выполненную работу как независимый рецензент.
Сначала перечисли риски по серьёзности и укажи файлы.
Затем запусти существующие сфокусированные проверки.
Не исправляй найденное, пока не показал находки.