Громкие падения — это легко. Опаснее версия с AI, в которой CI зеленеет, потому что команда тихо передоговорилась, что значит «зелёный».
Гнать до зелёного
Система продолжает править файлы, пока тесты не перестанут жаловаться.
- тесты ослабляются почти случайно
- дизайн начинает плыть
- diff становится всё труднее ревьюить
Дисциплинированный цикл исправлений
Команда сначала понимает, где именно разошлись ожидание и факт.
- код, тесты и документация сводятся осознанно
- изменения остаются обратимыми
- зелёный CI по-прежнему что-то значит
Зелёный CI — состояние доверия
Репозиторий зелёный, когда код собирается, тестам можно верить, контракты означают то, что команда думает, и правка достаточно понятна, чтобы её можно было взять на себя через квартал. «Все проверки прошли» — условие необходимое, не достаточное.
AI умеет довести тесты до прохода очень разными способами. Полезны не все. Остальные тихо размывают кодовую базу так, что никто не замечает до ноября.
Сначала диагноз
Когда изменение ломает тесты, обычно три варианта. Сломан код. Сломан тест. Оба разошлись с задумкой. Не ново. И именно здесь разваливаются циклы исправлений с AI.
Модель хорошо предлагает патчи. Хуже определяет, какой слой надо двигать, если замысел нигде не зафиксирован. Поэтому цикл исправлений начинается с диагностики. Какое поведение ожидалось? Какой файл выражает это ожидание убедительнее? Это ошибка логики, контракта, окружения или устаревшей тестовой гипотезы?
Если этот шаг пропустить, агент начинает договариваться с тестами.
Маленькие правки — механизм безопасности
Если фикс трогает слишком много файлов, ревью падает, диагностика портится. С AI это острее. Модель генерирует «правдоподобные» широкие правки быстрее, чем человек успевает их осмыслить.
Ритм, который я предпочитаю:
- воспроизвести падение
- локализовать причину
- поправить один слой
- сразу прогнать проверки
- идти дальше, только если устранён сам класс ошибки
На бумаге медленнее. На практике быстрее, потому что не приходится вечером распутывать патч на четырнадцать файлов, который убрал два симптома и породил ещё пять.
Тесты — контракт, не реликвия
Нет ничего умного в том, чтобы держать сломанный тест из принципа, и ничего дисциплинированного в удалении теста, потому что он мешает.
Критерий простой. Меняем тест, если он описывает поведение, которое системе больше не нужно. Меняем код, если тест правильно фиксирует ожидаемый контракт. Меняем оба слоя, только когда дизайн уже изменился, а ни тест, ни код его не отражают.
Эмоциональная защита теста тут ни при чём. Цель — оставить набор контрактом, которому ещё можно верить.
AI помогает там, где есть структура
Сильнее всего модель в задачах с локальной структурой. Шаблонный код. Повторяющиеся рефакторинги. Заготовки тестов. Механика миграций. Очевидные правки на согласованность.
Слабее там, где работа в основном — инженерное суждение. Выбрать контракт. Решить, какой компромисс верный. Определить путь отката. Договориться, что считать «готово».
Это не значит, что модель бесполезна. Рамку держит инженер.
Быстрая обратная связь лучше героической сессии
Исследования DORA много лет говорят одно. Маленькие изменения и быстрый цикл обратной связи здоровее больших залпов. AI это не отменяет, только усиливает.
Когда генерация стала дешёвой, появляется соблазн отложить суждение. Полезнее наоборот. Раньше прогонять проверки, раньше падать, раньше сужать задачу, раньше откатываться. AI ускоряет движение и не делает проверку необязательной.
Обратимость — часть дизайна
Откат должен быть не героизмом, а нормой. Сначала добавляющие изменения, потом ломающие старую форму. Понятные границы ответственности по файлам, ясные границы коммитов, без смешивания целей в одной правке, возможность откатить один шаг, не уничтожая сеанс.
По кодовой базе должно быть видно, что произошло во вторник вечером, без догадок.
Ответственность не передаётся
Системе безразлично, откуда регрессия. От человека, от code model, от слишком бодрого вечера. Позже имеет значение другое. Кто отвечает за сценарий поломки. Достаточно ли хороши логи. Читается ли контракт. Можно ли откатиться.
Именно поэтому мне близка human-in-the-loop модель. Причина не в слабости модели, а в том, что ответственности нужен адрес.
Контур, которому я доверяю
Для исправлений с AI:
- воспроизвести падение
- диагностировать: код, тест или дрейф замысла
- поправить самый маленький правдоподобный слой
- сразу прогнать type-check и тесты
- остановиться, когда правку уже трудно ревьюить
- остаток вынести отдельно, а не добивать одним широким патчем
Не кинематографично. Тот, которому верю.
Что я бы запретил
- удалять тесты без явного объяснения
- мёржить широкие AI-рефакторинги, которые никто не может объяснить
- менять код и тесты одновременно, не проговорив, какой слой был неправ
- считать зелёный CI доказательством, что система стала здоровее
Зелёные тесты — хорошая новость. Не мировоззрение.