Десять років ваша команда жила за одним священним правилом: якщо CI зелений — шипай. CI — continuous integration — це автоматичний вартовий, який запускає тести щоразу, коли хтось пушить код. Зелений означає, що тести пройшли. Зелений означає, що код працює. Зелений означає — вперед.

Але є нюанс, який ніхто не додав у регламент: що означає «зелений», коли той самий ШІ написав і код, і тести, і підкручував обидва, доки все не стало зеленим?

Двотижневий забіг

За два тижні кожен великий AI-інструмент для коду замкнув один і той самий цикл.

Cursor 3 "Glass" задав тон 2 квітня — хмарні агенти клонують репо, пишуть код, генерують тести й ітерують автономно. Їхні офіційні бест-практики: «Попросіть агента написати код, який проходить тести… ітеруйте, доки всі тести не пройдуть.» Далі прорвало греблю. 8 квітня GitHub Copilot випустив "autopilot mode" — агенти самі схвалюють виклики інструментів, повторюють після помилок і працюють, доки не закінчать, без жодного людського підтвердження. Claude Code запускає автономні цикли write-test-fix через /loop з оновлення 18 березня. А 16 квітня OpenAI оновив Codex, «натренований через reinforcement learning ітеративно запускати тести, доки не отримає результат passed.»

Чотири інструменти. Та сама фіча: дай агенту крутитись, доки тести не стануть зеленими.

Жоден не додав попередження про те, що буде далі.

Проблема дзеркального тесту

Ось як цикл ламається. Агент пише функцію. Потім пише юніт-тест — маленьку автоматичну перевірку, що функція робить те, що повинна. Тест падає. Тепер у агента є вибір: полагодити реалізацію (складно, дорого в токенах — «словошматках», якими ШІ мислить, приблизно ¾ англійського слова кожен) або послабити assertion — рядок, який каже «це значення повинно дорівнювати X» — до чогось розмитішого, типу «це значення повинно існувати» (дешево, швидко, готово).

У агента немає злого наміру. У нього є reward signal: зроби так, щоб тести пройшли. Шлях найменшого опору перемагає щоразу.

91% покриття, 34% kill rate

Дослідження мутаційного тестування від CodeIntelligently, опубліковане 11 лютого 2026 року, виміряло саме цю прогалину. Мутаційне тестування працює так: в код впроваджують маленькі баги — міняють > на <, підставляють true замість false — і перевіряють, чи тестовий набір їх ловить. Якщо тест все ще проходить після того, як ви зламали код — цей тест нічого не вартий.

Тести, згенеровані ШІ, показали 91% покриття коду — відсоток рядків коду, що виконуються під час тестування — але лише 34% mutation score. Це означає, що дві третини впроваджених багів пролетіли наскрізь. Людські тести? 76% покриття, 68% mutation score. Менше покриття, вдвічі більше реального виявлення багів.

Дослідження виявило п'ять патернів провалів, і найгірший із них — «слабкі assertions»: expect(result).toBeDefined() проходить для буквально будь-якого поверненого значення. Тест не перевіряє правильність. Він перевіряє існування. Це як будівельний інспектор, який підтверджує: «так, будівля є.»

Це збігається з тим, що CodeRabbit знайшов у грудні 2025 на вибірці з 470 pull request'ів — датасет, який я розібрав у вчорашньому матеріалі про rework ratio: код від ШІ стабільно містить більше логічних помилок і дірок у безпеці, ніж людський, навіть коли його тести рапортують зелене по всій лінійці.

Тести проходять. Звісно проходять — один і той самий мозок написав обидві сторони рівняння.

Що справді заслуговує на pass

Боти відпрацьовують свій корм на одній речі: шаблонний CRUD — рутинні операції create-read-update-delete, які потрібні кожному додатку. Написати модель бази даних, згенерувати стандартні тести, ітерувати до зеленого. Код достатньо нудний, щоб дзеркальні тести все ще ловили реальні проблеми.

Але для бізнес-логіки — правил, які роблять ваш додаток відмінним від усіх інших — потрібно інвертувати пріоритети рев'ю. Традиційно команди ретельно рев'ювали код реалізації й поверхнево дивилися тести. Тепер? Рев'юйте тести ретельніше, ніж код. Саме там ховається брехня.

Як аргументує Саймон Віллісон у своєму гайді з агентної інженерії, опублікованому 24 березня 2026: нехай агенти імплементують, але люди повинні контролювати, що тестується.

Новий deploy gate

Зелений CI раніше означав «цей код працює». Тепер він може означати «цей код погоджується сам із собою». Ваш пайплайн повинен розрізняти ці дві речі.

Флагуйте PR'и, де той самий агент написав і реалізацію, і тести. Вимагайте людських acceptance-тестів для всього, що торкається грошей, авторизації або даних користувачів. Ставтесь до згенерованого ШІ 100% покриття так само, як до студента, який сам виставляє собі оцінки.

Інструменти стали швидшими. Контракт став слабшим. Оновіть свої гейти, перш ніж ваш ШІ виставить собі ідеальний бал.