Стена трёх месяцев


Вы строите SaaS с помощью vibe coding. Начинается быстро. «Сделай логин» — 30 секунд. «Добавь платежи» — 2 минуты. MVP выходит за три недели.

Три месяца спустя начинаются странности. ИИ «наводит порядок» в платёжной логике и молча меняет расчёт скидок. Добавление нового эндпоинта ломает существующую аутентификацию. Запрос на рефакторинг меняет имена полей публичного API, убивая всех клиентов.

Это называется logic drift — ИИ непреднамеренно изменяет существующую бизнес-логику. Регрессионные баги существуют и в традиционной разработке. Но logic drift — другое. Изменения, которых разработчик не планировал, происходят незаметно по всей кодовой базе. Каждый промпт начинается в чистом контекстном окне.


Drift в цифрах

Это не ощущения. Есть данные.

Скорость стоит сложности. Исследовательская группа Карнеги-Меллон сравнила 807 репозиториев GitHub до и после внедрения Cursor (MSR 2026). Объём добавленного кода вырос в 3–5 раз за первый месяц. Через два месяца преимущество в скорости исчезло. Осталось: предупреждения статического анализа выросли на 30%, сложность кода — на 41%. Навсегда.

Стало не быстрее — стало медленнее. Некоммерческая исследовательская организация METR провела рандомизированное контролируемое испытание с 16 опытными open-source-разработчиками (2025). На проектах, которые они хорошо знали, группа с ИИ-инструментами выполняла задачи на 19% дольше. При этом сами разработчики ощущали ускорение на 20%. Разрыв между восприятием и реальностью — 39 процентных пунктов. На новых проектах результаты могут отличаться, но допущение «ИИ = всегда быстрее» сломано.

В масштабе стабильность рушится. Согласно Google DORA Report (2025), каждые 25% роста внедрения ИИ коррелируют со снижением стабильности доставки ПО на 7,2%.

И она действительно рухнула. Amazon в 2025 году обязал всех использовать ИИ-инструменты для кодирования и развернул 21 000 ИИ-агентов. В тот же период около 30 000 сотрудников были уволены, что резко сократило возможности ревью. Сочетание быстрой ИИ-генерации кода и уменьшенного штата ревьюеров привело к 4 инцидентам Sev-1 за 90 дней. 5 марта 2026 года шестичасовой сбой обошёлся примерно в 6,3 миллиона потерянных заказов. Внутренние документы гласили: «Быстрая генерация кода GenAI непреднамеренно обнажает уязвимости, а текущие меры защиты совершенно недостаточны.»


«Делай TDD» — не ответ

Стандартный совет при drift в vibe coding: «пиши тесты». Направление верное, но как вы предоставляете тесты — определяет результат.

Исследование TDAD (arxiv 2026) проверило это точно. Qwen3-Coder 30B получил 100 задач из SWE-bench Verified.

УсловиеУровень регрессий
Базовый (без инструкций по тестам)6,08%
Процедурная инструкция «делай TDD»9,94% (хуже)
Затронутые тестовые файлы предоставлены в контексте1,82% (снижение на 70%)

Указание агенту «делай TDD» ухудшает результат. Агент отвлекается от основной задачи, пытаясь следовать процедурным инструкциям. Но предоставление «эти тестовые файлы должны проходить» как конкретного контекста снижает регрессии на 70%.

Разница очевидна. Не инструкции «как тестировать», а контракты «что должно проходить».


Hurl: контракты в plain text

Hurl — инструмент тестирования, который объявляет HTTP-запросы и ожидаемые ответы в plain text. Поддерживается Orange (France Télécom), бинарник на Rust без рантайм-зависимостей, 18,7 тысяч звёзд на GitHub. Достаточно быстр, чтобы запускаться на каждом коммите в CI.

# Login succeeds
POST http://localhost:8080/api/auth/login
{
  "email": "test@example.com",
  "password": "secret123"
}
HTTP 200
[Asserts]
jsonpath "$.token" exists
jsonpath "$.user.email" == "test@example.com"

# Unauthenticated access returns 401
GET http://localhost:8080/api/pages
HTTP 401

Два контракта. Логин должен вернуть 200 с токеном. Неаутентифицированный доступ должен вернуть 401.

Когда этот файл зафиксирован в git и запускается на каждом коммите в CI — в момент, когда ИИ «наводит порядок» в логике авторизации и 401 становится 200, коммит отклоняется. Drift ловится до попадания в продакшен.


Почему Hurl

Юнит-тесты тоже могут ловить drift — если не давать ИИ права изменять тестовые файлы. Но юнит-тесты проверяют внутренние функции, что делает их структурно связанными с реализацией. Меняются имена функций — ломаются тесты. Каждый рефакторинг требует обновления тестов.

Hurl работает на границе HTTP. Он объявляет только запросы и ответы. Ему ничего не известно о внутренностях кода. Как бы ИИ ни менял код, если внешне наблюдаемое поведение сохраняется — тесты проходят; если отличается — падают. Он естественно независим от реализации.

Юнит-тестыHurl
ПроверяетВнутренности функцийHTTP-контракт
При рефакторинге ИИМеняются вместеНе меняется
Обнаружение driftУсловное (если заблокированы)Естественное
Зависимость от структуры кодаВысокаяОтсутствует
Читаемость для человекаУровень кодаPlain text
Генерация LLMТребует понимания структуры кодаДостаточно знать HTTP

Hurl проверяет не код, а поведение. Код может свободно изменяться ИИ. Поведение — не должно. Это различие — ключ к обнаружению drift.


Рэтчет-фиксация

Когда Hurl-тесты проходят — зафиксируйте их. Это рэтчет.

1. Write Hurl tests for current API (or auto-extract)
2. Run on every commit in CI
3. Passing tests cannot be deleted or modified
4. New features require new Hurl tests
5. All existing + all new tests must pass to merge

Скажите агенту «отрефактори этот код» — и он свободно меняет код. Но если Hurl-тесты ломаются, коммит отклоняется. Агент должен сохранить всё существующее поведение при рефакторинге. Drift в краевых случаях, не покрытых Hurl, всё ещё возможен, но для покрытого поведения drift структурно подавлен.

Это точно совпадает с выводом исследования TDAD. Не процедурная инструкция «пиши тесты», а конкретный контракт «эти Hurl-файлы должны проходить». Агент может выбирать метод, но не может нарушить контракт.


Работает и на legacy

Уже запустили продакшен на vibe-coded ПО? Начинать заново не нужно.

Шаг 1: Зафиксируйте текущее поведение в Hurl.

Если есть API-документация — переведите её напрямую в Hurl. Если нет — попросите агента прочитать существующий код и написать Hurl-тесты. Цель — объявить «вот как это работает сейчас» в plain text для каждого эндпоинта.

Шаг 2: Подключите к CI.

Убедитесь, что все Hurl-тесты проходят, и добавьте их как условие для мержа.

Шаг 3: Теперь вы в безопасности.

Рефакторит ли ИИ или добавляет фичи — Hurl защищает существующее поведение. Если возникает drift, CI ловит его немедленно.

Не закладка фундамента — сейсмическое усиление. Укрепление здания без закрытия магазина.


Не конец vibe coding — его эволюция

Андрей Карпатый, придумавший термин «vibe coding», ровно через год, в феврале 2026, заявил: «Эра vibe coding закончилась.» Новая парадигма — agentic engineering — люди не пишут код, а оркестрируют агентов, которые автономно планируют, реализуют и тестируют.

Thoughtworks Technology Radar (2025) поместил Spec-Driven Development на уровень «Assess». Команда Мартина Фаулера опубликовала анализ инструментов SDD. Индустрия сходится в одном направлении.

Hurl-тесты — минимальная единица этого перехода. Не нужно 10 спецификаций. Не нужно учить OpenAPI. Один Hurl-файл — один контракт. И этот контракт структурно предотвращает drift, не ограничивая свободу агента.

Не меняйте модель. Добавьте контракт.


Связанное


References