Тиммейт прогоняет задачу через ИИ-агента. Диф почти правильный: логика работает, но обработка ошибок слабая, а ретрай-путь молча отваливается. Быстрый вариант — исправить самому. Тридцать секунд, коммит, готово.
Это маленькое решение важнее, чем кажется. Когда ревьюер молча правит код, паттерн отказа агента не фиксируется, промпт и контекст не корректируются, а в истории версий остаётся чистый фикс — без отвергнутой попытки. Система не учится ничему. Альтернатива — hand-back: ревьюер возвращает работу агенту, прикладывая причину отказа. Разберём карточку для такого возврата, таблицу решений, протокол проверки и ограничения.
Почему тихое исправление — плохой дефолт
Тихое исправление оптимизирует текущий момент, но налог платит вся система. Ревьюер своими правками показывает агенту, что именно тот сделал не так, — это самый ценный фидбек, и он испаряется. Ревьюер превращается в неоплачиваемого призрака-доработчика: команда говорит «агент отлично работает», пока старшие тихо допиливают каждый диф. А когда исправленный код падает, коммит обвиняет человека, хотя дефект зародился в поведении агента. Реконструировать это уже нельзя.
Сделать возврат структурированным и менее затратным, чем правка кода, — вот дизайн-фикс. Он не в том, чтобы просить ревьюеров писать больше комментариев.
Карточка hand-back
Когда ревьюер отклоняет результат агента, он не открывает файл: он заполняет небольшую карточку. Предлагаемые поля:
- Причина отказа (одно из): неверный подход, пропущенный случай, стиль, безопасность/побочные эффекты, непроверяемое утверждение.
- Где отказало: файл:строка или цитата.
- Доказательства: тест-ран, строка спеки, личное знание.
- Ограничение для ретрая: одно предложение, которому должна удовлетворять следующая попытка.
- Область ретрая: только этот файл / новый контекст / эскалация мне.
Ключевые решения здесь такие. Поле «ограничение» обязательно и занимает одну строку: ревьюер обязан превратить «что-то не так» в исполнимую инструкцию. Если он не может — значит, задача была недоспецифицирована, а не агент плох. Селектор области ретрая страхует от самого частого сбоя авторетрая — петли. Пункт «новый контекст» требует приложить новые доказательства (падение теста, фрагмент спеки), иначе агент не запускается снова. И наконец, карточка становится частью коммита: отвергнутый вывод агента, карточка и принятая версия хранятся как единое целое. Ничего не теряется.
Таблица решений для ревьюера
| Ситуация | Исправить самому | Вернуть с карточкой | Эскалация / стоп |
|---|---|---|---|
| Опечатка, одна строка, однозначно | ✅ | ||
| Пропущенный крайний случай, который можно назвать одной фразой | ✅ | ||
| Не могу сформулировать, что не так, одной фразой | ✅ задача недоспецифицирована | ||
| Ошибка затрагивает auth, потерю данных или биллинг | ✅ никогда молча не фиксить и не авторетраить | ||
| Второе отклонение одного и того же ретрая | ✅ стоп-условие |
Цикл hand-back от начала до конца
- Агент выдаёт диф.
- Ревьюер открывает карточку: прикладывает диф, план агента, лог инструментов.
- Вариант «Принять» — мёрдж, карточка архивируется как «принято без правок».
- Вариант «Вернуть» — карточка и ограничение уходят агенту. Разрешён ровно один ретрай; если область «новый контекст», нужны новые доказательства.
- Если ретрай не принят — стоп, эскалация человеку, агент отстраняется от этой задачи.
Стоп-условие — несущая конструкция: ровно один авторетрай, дальше агент блокируется. Без этого «возврат» превращается в бесконечный бесплатный труд для обучения агента за счёт ревьюера.
Дешёвый прототип: где место бесплатным моделям и серверу
Команды редко строят такие циклы не из-за разногласий, а потому что тестировать отказ-и-ретрай — это жечь платные токены на намеренно плохой вывод, плюс нужен хостинг.
Для прототипа подойдут бесплатные модели и бесплатный сервер: можно прогнать полный цикл — генерация, ревью, отказ с карточкой, один ретрай, стоп — без затрат. Процесс:
- Возьмите 8–12 реальных задач из трекера, включая минимум две-три, где агент, по вашему ожиданию, провалится.
- Запустите агента. Каждый результат пропускайте через карточку, а не через редактор.
- Замеряйте: как часто однострочное ограничение приводит к приемлемому ретраю? Как часто срабатывает стоп? Сколько времени занимает заполнение карточки по сравнению с тихим исправлением?
- Сохраняйте полный рекорд — отклонённые попытки, карточки, ретраи. Это база для решения о переносе цикла на платные модели.
Честные ограничения. Бесплатные модели подходят только для проверки процесса. Для бенчмарка качества они не годятся: не переносите вывод «ретрай провалился» с бесплатного уровня на сильную модель. Усталость от карточек реальна: если заполнение дольше, чем правка кода, ревьюеры найдут обходной путь — и это снова тихое исправление. И на необратимых путях (миграции, секреты, внешние эффекты) отказ должен останавливать конвейер, а не запускать ретрай.
Протокол исследования: помогает ли hand-back?
Предложение — не факт. Прежде чем внедрять, проведите небольшое сценарное исследование.
- Участники: 6–8 ревьюеров, которые уже смотрят вывод агентов. Сценарий: каждый ревьюит 4 диффа — два заведомо приемлемых, два с пропущенным крайним случаем. Половина ревьюится тихим исправлением, половина — через карточку, порядок контрбалансируется.
- Метрики успеха: время до решения; переиспользовалось ли ограничение из карточки при ретрае или переписывалось; уверенность ревьюера в финальном диффе; сохранились ли доказательства отказа в записи.
- Стоп-метрики (заранее заданные): если заполнение карточки дольше тихого исправления более чем вдвое, или ревьюеры пропускают поле «ограничение» чаще, чем в трети случаев, — остановитесь и переделайте карточку, не трогая модель.
- Доступность: карточка должна полностью управляться с клавиатуры (причина отказа и область — нативные радио-группы, не кастомные виджеты); у причин — видимые текстовые подписи, не только иконки; смена состояния области ретрая должна объявляться скринридером; пункт «Эскалация» должен быть доступен без прохождения через «Ретрэй» — порядок табов здесь свойство безопасности.
Отделяйте то, что установило исследование, от того, что заявлено как гипотеза. Поля карточки, лимит в один ретрай и таблица решений — гипотезы, пока их не потрогали ваши ревьюеры.
Суть
Каждая команда, внедряющая кодинг-агентов, строит культуру ревью — осознанно или нет. Тихое исправление делает ошибки агента невидимыми, а стоимость перекладывает на старших ревьюеров. Карточка, жёсткое стоп-условие и рекорд с отвергнутой работой строят культуру, где агент отвечает за то, что он сделал не так, а однострочное ограничение человека становится ценным артефактом.
Перед следующим запуском агента спросите себя: какие недостающие доказательства должны остановить ретрай, а какое дополнительное поле в карточке будет шумом? Если ответа нет — сначала сделайте эту дизайн-работу.
Комментарии (0)
Войдите, чтобы комментировать.
Пока нет комментариев. Будьте первым.