Вайб-кодинг и AI-DLC: где на самом деле проходит граница
Оба режима сегодня дают работающий продукт быстро, и разница между ними не в дисциплине и не в качестве кода. Разбираем, где живёт истина о системе в каждом из подходов и какие механизмы отличают машинно проверяемую разработку от проверяемой на глаз.
Авторы: slavb18
Вайб-кодинг за два года прошёл путь от мема до рабочего инструмента. Продукт, который раньше требовал команды и квартала, собирается за несколько вечеров одним человеком, и он действительно работает. Параллельно индустрия придумала на это ответ — Spec-Driven Development, Intent-Driven, AI-DLC — и объясняет, что так делать нельзя, надо иначе.
Когда спрашиваешь, в чём конкретно разница, обычно отвечают: в дисциплине. Сначала спецификация, потом код. Ревью внимательнее. Тесты обязательны.
Ответ неверный. Не потому что дисциплина не нужна, а потому что дисциплина — следствие, и на неё смотреть бесполезно. Настоящая граница проходит в другом месте, и увидеть её проще всего через один вопрос: где после работы остаётся истина о системе.
Вайб-кодинг: истина в работающем артефакте
Слово стало ругательным зря. Вайб-кодинг — режим со своими правилами, и правила эти внутренне непротиворечивы.
Единственный источник истины здесь — работающий продукт. Вы описали намерение, агент сгенерировал реализацию, вы запустили и посмотрели. Совпало с ожиданием — приняли, не совпало — переформулировали. Знание о том, почему система устроена именно так, живёт в двух местах: в голове автора и в контексте сессии.
Пока продукт делает один человек и он же принимает решения, это оптимально. Обмен «намерение → проверка» идёт с максимальной скоростью, потому что между ними нет ни одного промежуточного документа. Демо за вечер даёт именно этот режим, и никакой другой.
У режима есть свойство, которое обычно не проговаривают, хотя именно оно всё определяет: вайб-кодинг не производит побочных продуктов. Кроме самого приложения после работы не остаётся ничего. Нет плана, который можно перечитать. Нет утверждения, что вот это требование выполнено. Нет способа спросить у системы, что в ней проверено, а что нет.
Пока проверяющий один и это вы — вопрос не возникает: вы и так знаете. Как только появляется второй — соавтор, аудитор, разработчик, который придёт через полгода, вы сами через три месяца — спрашивать становится некого. Ответ был в сессии, сессия закончилась.
AI-DLC: агент как штатный участник цикла
AI-DLC (AI-Driven Development Lifecycle) описывает жизненный цикл, в котором ИИ-агент перестаёт быть ускорителем набора текста и становится штатным участником процесса. Он предлагает план, реализацию, тесты, конфигурацию инфраструктуры. Человек проверяет и утверждает предложенное до того, как оно исполнено. Единица работы при этом сжимается с недель до часов — цикл «предложение → проверка → исполнение» стал коротким, и держать вокруг него двухнедельный ритуал больше незачем.
Разработчик в такой схеме перестаёт быть автором текста программы. Он становится тем, кто принимает решения о предложенном.
Существенное в этом описании — не переименование спринтов и не требование писать больше документации. Существенное вот что: между намерением и исполнением на каждом шаге появляется объект, который кто-то утверждает. План. Критерий. Гейт. И существует этот объект отдельно от кода и отдельно от автора.
Вот это и есть механизм. Всё остальное — его последствия.
Конкретные реализации расходятся в деталях: как называть фазы, чем мерить единицу работы, что именно человек утверждает и в какой момент. Готовой схемы, которую снимают с полки и применяют, здесь нет — есть принцип, и каждая команда собирает под него свой конвейер. Поэтому дальше разговор не про инструменты, а про механизмы, которые из этого принципа вырастают в любой реализации.
Граница: побочные продукты, которые переживают сессию
В AI-DLC каждый шаг цикла оставляет после себя артефакт, существующий отдельно от кода и отдельно от автора. План, который утвердили. Критерий приёмки, который либо доказан прогоном, либо явно не доказан. Гейт в конвейере, который либо пропустил сборку, либо остановил её.
Каждый из них проверяется машиной без участия того, кто его создал. Именно это свойство — проверяемость третьим лицом — отличает один режим от другого. Не количество документов и не строгость процесса.
| Вайб-кодинг | AI-DLC | |
|---|---|---|
| Источник истины | работающее приложение | приложение плюс цепочка утверждённых артефактов |
| Где живёт «почему так» | в голове автора и в контексте сессии | в объектах, которые сессию переживают |
| Кто может проверить | автор, запустив и посмотрев | кто угодно, в том числе машина |
| Что остаётся через полгода | код и коммиты | код, требования, доказательства, история решений |
| Стоимость первого шага | минимальная | заметная: инфраструктуру доказательств надо построить |
| Скорость проверки гипотезы | максимальная | ниже |
| Скорость передачи другому | около нуля | штатная операция |
Обе колонки — рабочие режимы. Ошибка не в том, чтобы выбрать вайб-кодинг, а в том, чтобы остаться в нём после того, как условия изменились.
Четыре механизма, в которые это превращается
Принцип «артефакты, проверяемые машиной» ничего не значит, пока не увидишь его в конкретных вещах. Механизмов, которые из него вырастают, немного — по сути четыре. Ниже каждый с примером и живыми цифрами, чтобы разговор не остался на уровне лозунга.
Требование → критерий приёмки → тест → отметка, которую ставит прогон
Самый редкий механизм и самый содержательный.
Требования раскладываются на атомарные критерии с идентификаторами. Каждый критерий живёт в описании своего функционального модуля. Тест, который его доказывает, называет этот идентификатор. Отчёт о покрытии после этого генерируется командой, а не пишется руками, и выглядит так:
| Модуль | Покрыто | % |
|---|---|---|
| Права доступа — матрица роль×право | 10/10 | 100% |
| Сервисные учётные записи и ротация секрета | 30/30 | 100% |
| Шлюз — доступ к API и квоты | 31/32 | 97% |
| Кабинет пользователя — интерактивный вызов | 13/17 | 76% |
| Распределённая трассировка | 0/11 | 0% |
| Политика аккаунта: пароли, 2FA, лок-аут | 0/14 | 0% |
| Итого | 314/422 | 74% |
Строки с нулями — самое ценное, что есть в этом отчёте.
Они видны, потому что отчёт машинный. Поставить галочку из добрых побуждений невозможно: отметку ставит прогон. Система, устроенная так, знает про себя правду и не умеет её приукрашивать — и это работает не только на внешнего проверяющего, но и на команду, которая перестаёт спорить о том, сделано или нет.
Архитектурные границы как правила линтера
Договорённости об архитектуре, живущие в головах и в ревью, деградируют за квартал: каждое отдельное отступление выглядит оправданным, а сумма отступлений через полгода называется «исторически сложилось». Лечится это тем, что граница становится исполняемой — её нарушение валит сборку. Набор зависит от стека; смысл правил один и тот же:
- модуль не лезет во внутренности соседнего;
- доменный слой чист от ввода-вывода;
- обращение к базе живёт только в слое персистентности, а не там, где оказалось удобно;
- фичи не вкладываются друг в друга.
Несколько строк в конфигурации линтера делают то, чего не делает ни один регламент: превращают архитектурное решение в факт, который нельзя нарушить незаметно. Регламент можно не прочитать, договорённость — забыть; красную сборку не обойдёшь.
Проверки безопасности с объявленной политикой гейтинга
| Слой | Инструмент | Гейт |
|---|---|---|
| Секреты | gitleaks по всей истории репозитория | жёсткий: любая находка валит сборку |
| Зависимости | bun audit + Dependabot |
жёсткий: high/critical валит сборку |
| Статический анализ | CodeQL security-extended — по коду и по самим workflow CI |
отчёт |
| Статический анализ | Semgrep: OWASP Top-10, TypeScript, React | отчёт, затем перевод в блокирующий |
| Инфраструктура как код | Trivy по Terraform, Dockerfile, compose | отчёт |
| Работающее приложение | OWASP ZAP baseline — поднимает полный стек и сканирует живьём | еженедельно и по кнопке |
Две детали, которые обычно пропускают.
CodeQL сканир