Как проверять работу AI-агента
Разбираем уровни проверки: TypeScript, lint, tests, build, HTTP smoke, mutation smoke, idempotency и forbidden files.
AI-агент может написать убедительный код и красивый отчет, но принимать работу нужно не по интонации. Проверка должна быть многоуровневой. В AI Academy использовались `tsc --noEmit`, `npm run lint`, `npm test`, `npm run build`, HTTP smoke и Server Action smoke. Каждый слой ловит свой класс проблем.
TypeScript проверяет контракты и server/client boundaries. Lint ловит стиль и React-ошибки. Tests защищают существующие domain rules, включая Scanner logic. Production build проверяет Next routes и bundling. HTTP smoke подтверждает, что реальные pages доступны. Mutation smoke проверяет не просто наличие кнопки, а поведение state: first view, repeat view, Complete, repeated Complete, Continue Learning и user isolation.
- 1TypeScript
`tsc --noEmit` подтверждает, что типы content blocks, services и actions согласованы.
- 2Lint
`npm run lint` проверяет кодовую дисциплину и часто ловит ошибки, которые не видны в UI.
- 3Tests
`npm test` защищает существующую логику проекта. Даже если Academy не трогает Scanner, Scanner tests должны остаться зелеными.
- 4Production build
`npm run build` проверяет маршруты, server components и финальную сборку.
- 5Smoke
HTTP и mutation smoke проверяют реальные пути пользователя, а не только компиляцию.
npx tsc --noEmit
npm run lint
npm test
npm run build
# HTTP smoke: /academy, course page, all lessons, unknown lesson
# Mutation smoke: view, complete, repeat complete, user isolationЧто именно проверять в Academy
- Все 10 уроков доступны по URL.
- Previous и Next идут в правильном порядке.
- 4 модуля отображаются на странице курса.
- Progress считает 10 уроков, а не старые 6.
- Continue Learning появляется после просмотра.
- Unknown lesson не создает запись progress.
- Repeated Complete не создает дубликаты.
- Forbidden files не изменились.
Сообщение `passed` полезно только вместе с пониманием, что именно проверялось. `build passed` не доказывает idempotency, а `mutation smoke passed` не заменяет typecheck.
Отдельно проверяется forbidden scope. Если задача запрещает менять Scanner, финальный отчет должен явно подтвердить, что `src/features/scanner`, `scripts/scanner-ws-probe.ts` и `docker/scanner-ws-probe-entrypoint.sh` не были изменены. Это часть acceptance criteria, а не декоративная фраза.
Practice
A real WorkerHubs scenario for this lesson.
Для feature, созданной AI-агентом, напиши checklist проверки. Раздели compile checks, route checks, mutation checks и forbidden scope.