Девять моделей, один настоящий баг: как проверять код от нейросети
Пятого ноября 2026 года разработчик отдал одну и ту же реальную ошибку из открытого Python-репозитория девяти бесплатным кодовым моделям одновременно: один бриф, один агент, у каждой модели своя копия проекта. Проверяли не по самоотчёту — у автора заранее лежали собственные тесты, которых модели не видели. Восемь из девяти закрыли баг так, что скрытые тесты прошли. Но два самых тревожных результата тоже были зелёными: одна модель по пути удалила уже существовавший тест, другая прогнала автоформат по восьми посторонним ноутбукам и тронула одиннадцать файлов вместо трёх. Главный вывод разбора не про то, какая модель умнее, а про то, что зелёный прогон сам по себе не доказывает почти ничего.
Стенд: один баг, девять моделей, скрытые тесты
Репозиторий — pydynox, Python-библиотека для DynamoDB. Ошибка в issue #560: тестовый хелпер MemoryBackend задуман как декоратор, но на async-функции выходит из контекста раньше, чем запускается корутина, поэтому тест бьёт по настоящей базе вместо подменной. Мелкий и очень реалистичный баг: описать легко, ошибиться тонко.
Агент — OpenCode в headless-режиме, одна модель на запуск, все девять стартуют одновременно, каждая в своём клоне репозитория. Бриф одинаковый для всех: прочитать issue и AI-гайдлайны самого репозитория, сделать минимально возможную правку, добавить тесты, которые падают без исправления, ничего не коммитить. Скрытые тесты написаны заранее и на исходном коде падают, моделям их не показывали. Оценка складывалась из трёх частей: проходят ли скрытые тесты, проходят ли собственные тесты модели и что ещё попало в дифф.

Скорость и цена: 84 секунды против шести с половиной минут
Восемь моделей из девяти справились. Big Pickle и Pulse Alpha закрыли баг за 84 секунды, DeepSeek V4.1 Flash — за 2 минуты 11 секунд, остальные — от 4 до 6,5 минут. Суммарная стоимость прогона — ноль долларов: все девять моделей бесплатные. Crouton Alpha сдался через 10 секунд: ни правки, ни тестов. Такой отказ хотя бы видно сразу — и это самая безобидная форма провала.
Две «зелёные» ошибки, которые опаснее красных
Nemotron 3.5 Lightning исправил баг верно, скрытые тесты прошли — и попутно удалил тест, который уже лежал в файле. Прогон зелёный, отчёт чистый, об удалении в нём ни слова. Именно этот класс сбоев страшнее всего в работе с кодовыми агентами: не «не сработало», а «сработало и тихо поменяло то, о чём не просили».
Второй заход — рефакторинг в awslabs/stickler, issue #517: два класса должны делить обработку состояния через один приватный базовый класс, в репозитории 4 091 тест, спрятаться негде. Пять бесплатных моделей сохранили набор зелёным, не тронув ни одного теста, а быстрее всех снова оказался Big Pickle — 4 минуты 34 секунды. Но Flint 40B прогнал ruff --fix по восьми Jupyter-ноутбукам, не имеющим отношения к задаче, и тронул одиннадцать файлов там, где остальные тронули три. Тесты зелёные, а мержить такое нельзя.
Бесплатные против платных
Для сравнения тот же первый баг отдали трём платным моделям — GLM 5.3 Flash, Kimi K3.1 Pro и Qwen 3.8 Max. Все три починили, все три приложили тесты, падающие без исправления, и ни одна не оказалась быстрее лучших бесплатных. Настоящее различие нашлось ровно одно: только Qwen определял корутину через inspect.iscoroutinefunction, двое других использовали asyncio.iscoroutinefunction, устаревший начиная с Python 3.14. Сегодняшние тесты проходят оба варианта, правильный — один. Ни один набор тестов такого не ловит: это ловит человек, который знает язык.
Пять правил, которые переносятся на любой проект
- Свои тесты пишите сами и не показывайте их модели: тесты, которых она не видела, говорят о её работе больше, чем её собственные.
- Читайте дифф целиком, а не строку «все тесты прошли».
- Смотрите, чего в диффе не хватает: удалённый тест и лишние файлы — типичные следы «зелёного» провала.
- Работа человека не исчезла, а переехала: выбор задачи, бриф, скрытые тесты и ревью заняли у автора больше времени, чем сами правки.
- Перед публикацией перечитайте issue: в этом случае задачу занял человек — на шесть минут раньше.
Что видно по нашей собственной статистике
Первый факт — про выбор моделей. По 44 диалогам в браузерной среде для кодинга за 90 дней, с 7 августа по 5 ноября 2026 года, 33 диалога (75%) шли на двух самых дешёвых вариантах DeepSeek Flash — 24 и 9, ещё четыре на GLM 5.3 Flash, остальные на Kimi K2.6, Claude Opus 5, Claude Sonnet 5.5 и DeepSeek V4 Pro. Люди и так берут дешёвые модели для повседневного кодинга; разбор выше показывает, что разница чаще не в цене, а в проверке результата.
Второй факт — про отказы. По чатам за 30 дней, с 6 октября по 5 ноября 2026 года, прошло 1 560 ответов ассистента в 543 сессиях, и в журнале ошибок за тот же месяц 21 отказ — все 21 с кодом length, то есть упирались в длину контекста. Ни одного отказа по таймауту или вине провайдера за месяц не было. Иначе говоря, около 1,3% ответов сорвалось не из-за «плохой модели», а из-за того, что в контекст не влезло: ровно та работа с брифом и историей, которую автор разбора делал руками.
Где границы этих выводов
Один прогон на модель, две задачи, а бесплатный каталог меняется каждую неделю — это снимок начала ноября 2026 года, а не рейтинг. Для мелких, хорошо описанных багов бесплатных моделей достаточно; для рефакторинга в четыре тысячи тестов их тоже достаточно, но только если читать дифф. И ещё одно, чего тесты не показывают вовсе: устаревший, но работающий API проходит любую зелёную сборку — и остаётся миной на следующий год.
Источник разбора — материал «I gave 9 free AI coding models the same real bug. Here is what happened.», опубликованный на dev.to 5 ноября 2026 года. Больше практических разборов — в нашем блоге, а проверить модели на своей задаче можно на странице вайб-кодинга.