Проверка работы
Модель с каменным лицом скажет «баг починен, все тесты зелёные», даже если не запускала ни одного. Это не злой умысел — в обучающих данных финал часто звучит именно так. Научим промпт требовать честный отчёт: что реально гоняли, что заблокировал шлюз, чего в проекте просто нет.
prompts.py новая секция # Verification.
После правок агент обязан писать конкретику
(«запустил pytest: …»), а не «вроде всё ок».
Слова по делу
- Verification — проверка после изменений: тесты, линтер, typecheck — что есть в этом проекте.
- Scoped claim (узкое утверждение) — «прогнал X, результат Y», а не «всё работает во Вселенной».
Быстрый путь
- Открыть
prompts.py. - Добавить секцию
# Verificationперед return. - Попросить агента проверить работу проекта (без правок файлов).
Какие файлы трогаем
| Файл | Что делать |
|---|---|
prompts.py |
Править. Добавить блок Verification в build_system_prompt. |
main.py |
Не обязательно. Если в белом списке нет pytest / uv run — добавьте префиксы в approval.py, иначе проверка упрётся в блок. |
Шаг 1. Вставьте секцию в prompts.py
После Guardrails (и до блока AGENTS.md, если он уже есть) добавьте:
prompts.py — фрагмент внутри build_system_prompt
parts.append("""
# Verification
После изменений проверяй работу по факту, не по настроению:
1. Если в проекте есть тесты — запусти их (часто: `uv run pytest` или `pytest`).
2. Если настроен typecheck (pyright / mypy) — запусти и его.
3. Lint/build — только если такие команды реально есть и их пускает текущий режим approval.
4. В ответе явно напиши: что запустил, что заблокировал шлюз, чего в проекте нет.
НЕ говори «тесты прошли», если не запускал.
Честно: «Verification ограничен: pytest заблокирован approval» — нормально.
«Всё зелёное», когда ты ничего не гонял — нет.
""")
Главная фраза — «не ври без запуска». Модели хорошо избегают того, что названо прямо; плохо — того, что только намекнули.
Как звучит хороший отчёт
| Плохо (вайн) | Хорошо (контракт) |
|---|---|
| «Все тесты прошли» | «Запустил uv run pytest: 12 passed, 0 failed» |
| «Баг починен» | «Поправил null-check в auth.py:42. pytest: ok. pyright не запускал — нет в проекте» |
| «Должно работать» | «Команду test заблокировал interactive approval; правку сделал, проверку не гонял» |
approval.py → SAFE_PREFIXES (режим interactive)
добавьте префиксы вроде "pytest", "uv run",
"python -m pytest". Иначе секция Verification будет
правильно писать «заблокировано» — тоже ок, но скучно для демо.
Проверьте
Сейчас у агента только read / grep / bash —
edit/write ещё нет (появятся позже). Поэтому не просите
«переименуй переменную»: он честно ответит, что править нечем.
Проверяем именно отчёт о verification:
uv run python main.py . "Проверь работу проекта: есть ли тесты, можно ли их запустить, что скажет approval. Не выдумывай зелёный результат."
В ответе ищите прошедшее время и конкретику: «запустил …», «exit 0», «заблокировано …», «тестов нет». Фразы «должно быть нормально» / «looks fine» без запуска — красный флаг.
SAFE_PREFIXES с pytest работает только в
interactive. В delegated смотрится список
trust в main.py. Команда
uv run pytest не совпадёт с префиксом "pytest" —
пускайте именно pytest или добавьте "uv run"
в тот список, который реально активен.
Готово, если:
- В
prompts.pyесть секция# Verification - Там явно сказано не заявлять успех без запуска
- Требуется отчёт: что запущено / заблокировано / отсутствует
- На тестовом задании агент пишет конкретику, а не «вроде ок»
AGENTS.md.