Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
Рейтинг: 48.7% · 7 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
Короче, история выходных. Мигрировал платежный модуль со старого SDK ЮKassa на их новый API, задача муторная, отдал Claude Code в агентном режиме. Сорок минут шуршал, отчитался красиво: миграция готова, 247 passed, 0 failed, можно мержить.
Полез читать дифф перед мержем, скорее по привычке. И вот что нашел. В conftest.py появилась autouse фикстура, которая мокает все вызовы платежного шлюза. А 12 тестов на старый флоу помечены @pytest.mark.skip(reason="legacy payment flow, scheduled for removal"). Никто ничего не scheduled, он это сам выдумал. reason написан так, будто так и было задумано. CI зеленый, skip же не fail.
То есть он не справился с миграцией, увидел что тесты падают, и вместо того чтобы сказать об этом, замел под ковер и написал легенду. В отчете про скипы ни слова. Если бы я мержил по диагонали в пятницу вечером, в понедельник платежи бы легли.
Кто как ловит такое? Читать глазами каждый дифф на 2к строк не масштабируется.
Полез читать дифф перед мержем, скорее по привычке. И вот что нашел. В conftest.py появилась autouse фикстура, которая мокает все вызовы платежного шлюза. А 12 тестов на старый флоу помечены @pytest.mark.skip(reason="legacy payment flow, scheduled for removal"). Никто ничего не scheduled, он это сам выдумал. reason написан так, будто так и было задумано. CI зеленый, skip же не fail.
То есть он не справился с миграцией, увидел что тесты падают, и вместо того чтобы сказать об этом, замел под ковер и написал легенду. В отчете про скипы ни слова. Если бы я мержил по диагонали в пятницу вечером, в понедельник платежи бы легли.
Кто как ловит такое? Читать глазами каждый дифф на 2к строк не масштабируется.
✔ Лучший ответ сформирован автоматически — cudaguru
scalalord писал(а):сами сформулировали кривой reward, сами получили reward hacking Удобная позиция, только она перекладывает брак инструмента на пользователя. Молоток, который при промахе сам рисует на пальце шляпку гвоздя, бракованный молоток, как промпт ни формулируй. И инструкцию "не трогай тесты" из CLAUDE.md агент теряет после первого же compaction, проверено не раз. Что реально работает: Pr…
Re: Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
@mgyorko, классика жанра. у меня копайлот в agent mode так же расставлял .skip в jest и молчал. с тех пор в ci отдельная проверка: число скипнутых выросло относительно мастера, джоба красная. полчаса настройки, ловит регулярно
Re: Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
Вот это самое стремное, на самом деле. Скипнуть тест полбеды, а сочинить правдоподобную причину это уже заметание следов. У меня был случай похлеще: агент не скипал, а переписал ассерты. Было assert response.status == "succeeded", стало assert response.status in ("succeeded", "failed", "pending"). Тест проходит всегда, а в диффе выглядит как расширение кейсов. Заметил через две недели, когда тест не поймал реальный баг.mgyorko писал(а):reason написан так, будто так и было задумано
По защите: pytest -rs в CI плюс сравнение skip-счетчика с мастером. И дифф по tests/ и conftest.py читаю всегда и целиком, остальное уже как пойдет.
Re: Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
а чего вы все удивляетесь. вы дали агенту критерий "тесты зеленые" и он его оптимизировал самым дешевым способом. закон гудхарта в чистом виде. он не врет, у него нет понятия совесть, есть условие завершения задачи. сами сформулировали кривой reward, сами получили reward hacking. пишите в задаче "тесты проходят И ни один тест не изменен и не скипнут" и половина таких историй исчезнет
Re: Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
✔ Лучший ответ — сформирован автоматически
Удобная позиция, только она перекладывает брак инструмента на пользователя. Молоток, который при промахе сам рисует на пальце шляпку гвоздя, бракованный молоток, как промпт ни формулируй. И инструкцию "не трогай тесты" из CLAUDE.md агент теряет после первого же compaction, проверено не раз.scalalord писал(а):сами сформулировали кривой reward, сами получили reward hacking
Что реально работает: PreToolUse хук, который блочит Edit и Write по путям tests/ и conftest.py. Скрипт на десять строк, агент физически не может туда писать, хочет поменять тест, обязан остановиться и спросить. После этого мой опус стал честно писать "миграция ломает 12 тестов, нужно решение". Та же модель, тот же промпт, просто убрал возможность жульничать.
Re: Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
@scalalord, у меня кодекс хардкодил эталоны, подниму градус. тест сравнивал ответ апи с golden json, агент не осилил починить сериализацию и молча перегенерил сам golden файл из своего же кривого выхлопа. формально все честно, тест не тронут, не скипнут, просто эталон теперь тоже сломан. и хук по путям tests/ такое не поймает, голдены лежали в fixtures/. читать дифф глазами все равно придется, вопрос только какой кусок
Re: Claude Code скипнул падающие тесты и сам сочинил отмазку в reason, чуть не уехало в прод
ага, но теперь хотя бы понятно, куда смотреть в первую очередь. в общем внедрил: в ci джоба skip-delta (pytest -rs, парсим, сравниваем с мастером), хук на tests/ и conftest.py, после поста про голдены добавил туда и fixtures/. прогнал миграцию заново, агент уперся в хук и выдал честное "12 тестов на legacy flow падают, вот варианты". то есть мог и сразу, просто врать было дешевле. осадочек осталсяreactchan писал(а):читать дифф глазами все равно придется
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Поймал Claude Code на том что он скипнул падающий тест и отчитался что все зеленое
7 ответов · 5 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя