DeployProof — инструмент для проверки тестов, написанных ИИ. Ловит пустые тесты, галлюцинированные зависимости и утечки секретов за секунды до пуша. Попробуйте сейчас!
Если вы последние месяцы строили проекты с ИИ-ассистентами (Antigravity, Claude Code, Cursor, Copilot), то наверняка сталкивались с этой болью: агент пишет тесты, вы запускаете pytest, видите 100% покрытие строк и уверенно пушите в прод. А после деплоя обнаруживаете, что тесты были пустышками и пропустили критические edge-кейсы.
Покрытие строк показывает, что код выполнился, но не то, что его логика проверена утверждениями. Чтобы решить эту проблему, я создал и открыл DeployProof — детерминированный инструмент пред-проверки для Python, который ловит пустые тесты, галлюцинированные зависимости и ловушки безопасности за секунды до того, как код покинет вашу локальную машину.
Рассмотрим простой калькулятор скидок с ограничением порога 50%:
# calculator.py
def calculate_discount(price: float, rate: float) -> float:
if rate > 0.5:
return price * 0.5
return price * (1.0 - rate)
Попросите LLM написать юнит-тесты — и она может сгенерировать такое:
# test_calculator.py
from calculator import calculate_discount
def test_calculate_discount_standard():
assert calculate_discount(100.0, 0.2) == 80.0
Этот тест покрывает каждую ветку стандартной скидки и даёт 100% покрытие строк. Однако, если мутировать логику:
rate > 0.5 на rate > 1.5return price * 0.5 на return price * 1.5* на /Тест всё равно пройдёт на 100% зелёным. Он никогда не проверял порог или граничные условия.
Традиционные инструменты мутационного тестирования (например, mutmut или cosmic-ray) мощные, но обычно запускаются на всей кодовой базе. На проекте с сотнями тестов полный мутационный прогон может занять 5–20 минут — слишком долго для хуков git commit или pre-push.
DeployProof решает это с помощью Diff-Scoped AST Mutation:
Вместо мутации всего репозитория DeployProof анализирует ваш активный git diff (или незакоммиченные файлы сессии) и применяет AST-мутации строго к строкам, которые вы только что написали или изменили.
Это сокращает время проверки с минут до 2–4 секунд.
$ deployproof check
DeployProof - LOCAL PRE-CHECK
====================================================================
Target Scope (1 file evaluated): * calculator.py
Local Pre-Check Mutation Verification:
Score: 57.1% (4/7 mutants killed)
Status: FAILED (score 57.1% below 80.0%) (threshold: 80.0%)
Time: 2.27s
Surviving Mutants (3 unverified changes):
[1] calculator.py:2
Mutation: Replace numeric constant '0.5' with '1.5'
Original: if rate > 0.5:
Mutated: if rate > 1.5:
[2] calculator.py:3
Mutation: Replace numeric constant '0.5' with '1.5'
Original: return price * 0.5
Mutated: return price * 1.5
[3] calculator.py:3
Mutation: Replace binary operator '*' with '/'
Original: return price * 0.5
Mutated: return price / 0.5
====================================================================
Pre-check FAILED: Score 57.1% is below threshold 80.0% (3 surviving mutants).
Как только вы добавите тесты для порога (rate = 0.8) и точной границы (rate = 0.5), все мутанты будут убиты, и пред-пуш гейт пройдёт на 100%.
Помимо пустых тестов, ИИ-код часто содержит смежные сбои. DeployProof запускает 5 дополнительных статических проверок вашего активного диффа:
Запрашивает живой реестр PyPI, чтобы убедиться, что каждый новый импортированный модуль существует, защищая от выдуманных имён пакетов.
Ловит симлинки, указывающие за пределы корня репозитория, предназначенные для побега из песочницы разработчика.
Помечает пустые блоки except Exception: pass и мёртвый код, генерируемый для подавления ошибок.
Помечает вновь введённые @patch и использование unittest.mock, маскирующие сломанную бизнес-логику.
Ловит незакавыченные секреты в .env и захардкоженные API-ключи (OpenAI, Anthropic, AWS, Stripe).
DeployProof бесплатен, с открытым исходным кодом (MIT) и устанавливается через pip:
pip install deployproof
Инициализируйте его в вашем репозитории (создаёт .deployproof.json и настраивает гейт .git/hooks/pre-push для блокировки пушей при провале проверок):
deployproof init
Запускайте проверку по требованию в любое время:
deployproof check
Для CI/CD пайплайнов (GitHub Actions, GitLab CI) доступен структурированный JSON-вывод:
deployproof check --json
0 — PASSED: все проверки пройдены.1 — FAILED: сработал гейт качества или безопасности (мутационный счёт ниже порога, утечка секретов, фейковые зависимости, побег симлинка).2 — ERROR: сбой тестового окружения (тестовый набор не собрался до начала мутационного тестирования).Я создал DeployProof как независимый соло-разработчик после того, как неоднократно сталкивался с тонкими регрессиями в ИИ-тестах в своих проектах.
Если вы используете ИИ-агентов в повседневной работе, буду рад, если вы попробуете инструмент, оставите issue, поставите звезду репозиторию или внесёте свой вклад:
Не доверяйте слепо зелёным проверкам. Прямо сейчас установите DeployProof и запустите deployproof check в своём проекте. Убедитесь, что ваши тесты убивают мутантов, а не просто исполняют код. Это займёт меньше минуты, но сэкономит часы отладки после деплоя.
Какие тонкие сбои или пустые тесты вы замечали в своих ИИ-рабочих процессах? Поделитесь в комментариях!
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →