Гейт 10/10: как движок доводит задачу и не галлюцинирует «готово»
Что это
Главная болезнь AI-агентов — объявить «готово», когда не готово. Гейт 10/10 (engine.doneCriteria) лечит это структурно: он превращает «готовность» из vibe-оценки в набор критериев, каждый из которых закрывается только выполненным доказательством.
Статус. Гейт 10/10 — это слой конструктора: он поддержан схемой и экспортёром, но в базовый флагманский сид Quest пока не входит (в разработке для флагмана). То есть купленный пакет Quest не приносит
doneCriteriaиз коробки — это то, что вы собираете поверх, когда описываете свой движок в конфигураторе. Ниже — как этот слой устроен, а не «поведение установленного Quest».
Когда слой включён, в экспортируемый пакет попадает буквальный рецепт с жёстким правилом: ровно два исхода, третьего нет.
- VERIFIED 10/10 — по КАЖДОМУ required-критерию есть ВЫПОЛНЕННОЕ доказательство (вставь вывод команды/теста, скрин браузера). Без доказательства критерий НЕ закрыт.
- HONEST GAP REPORT — если хоть один required не доказан: честно перечисли, что осталось и почему. Это равноправный исход, а не провал.
BANNED — сфабрикованные 10/10: объявить «10/10» без выполненного доказательства запрещено. Нет вывода команды = нет закрытого критерия.
Честный отчёт о разрыве — не поражение, а легитимный второй исход. Именно это убирает стимул врать: модели не нужно притворяться, у неё есть разрешённый способ сказать «вот это не доказано».
ENFORCED vs ADVISORY критерии
У каждого критерия есть checker, и он делится на два класса:
- ENFORCED (
cmd/test/file/http) — доказывается кодом выхода: команда, тест, наличие файла, HTTP-ответ. Машина проверяет, а не суждение. - ADVISORY (
behavior/human/rubric/reference) — доказывается суждением и помечается честно как advisory.
Это разделение прямо видно в пакете, так что никто не выдаёт «человек посмотрел, вроде норм» за машинно-проверенный факт.
Пропорциональность
Гейт не давит церемонией на мелочь. proportionality: full (каждый required доказан) или light (для quest-fix — доказывай только required, без церемоний). В режиме auto мелкий фикс (kind: quest-fix) сам уходит в light.
Когда применять
- Любая задача, где важно не «почти работает», а «доказано работает»: фичи, багфиксы, релизы.
- Особенно ценно на слабой целевой модели, которая склонна рапортовать успех преждевременно.
Как это выглядит на слое конструктора
Пример ниже иллюстрирует форму слоя doneCriteria — как он был бы описан в конфигураторе. Это не сценарий из базового Quest; это то, во что превращается ваш собственный набор критериев после экспорта.
Вход: «добавь эндпоинт POST /login с rate-limit». Движок с doneCriteria.criteria:
[required]«Тесты авторизации зелёные» — checkertest, detailnpm test -- auth[ENFORCED][required]«Rate-limit срабатывает после 5 попыток» — checkerhttp, detailcurl -X POST /login × 6[ENFORCED][required]«Секретов в диффе нет» — checkercmd, detailgit diff | grep -E 'SECRET|TOKEN'[ENFORCED][additional]«Формулировки ошибок понятны новичку» — checkerhuman[ADVISORY]
Что делает движок с таким слоем:
- Реализует эндпоинт.
- Идёт по required-критериям и исполняет проверки. Прогоняет
npm test -- auth→ 12 passed. Шлёт 6 запросов curl → 6-й возвращает429. Грепает дифф → пусто. - К каждому критерию прикрепляет вывод: лог тестов, тело
429-ответа, пустой результат грепа. - Additional-критерий (advisory) отмечает как суждение, честно помеченное.
Результат: «VERIFIED 10/10 — все 3 required доказаны выполненным выводом» с приложенными артефактами.
Альтернативный (честный) исход: если curl-проверка показала, что 6-й запрос всё ещё 200 — движку ЗАПРЕЩЕНО писать «готово». Он выдаёт HONEST GAP REPORT: «2 из 3 required доказаны; rate-limit не срабатывает (6-й запрос вернул 200 вместо 429), критерий не закрыт». Именно этот исход и защищает вас от галлюцинированного «done».
Честная оговорка
Сначала о статусе: гейт 10/10 — слой конструктора, а не встроенное поведение базового Quest. Схема и экспортёр его поддерживают, но во флагманский сид он пока не входит (в разработке). Всё, что описано выше, относится к движку, в который вы этот слой явно добавили.
Дальше о границе гарантии. Сила гейта — ровно там, где критерий ENFORCED (есть код выхода). ADVISORY-критерии держатся на добросовестности модели и помечены как advisory — они не гарантия. Полностью убрать возможность соврать нельзя, но BANNED — сфабрикованные 10/10 плюс равноправный HONEST GAP REPORT снимают у модели мотив это делать: честно признать разрыв — разрешённый и ожидаемый ход.