9.1 KiB
03 — Критерии приёмки (Acceptance Criteria): ORCH-077 — ORCH-52d: оптимизация 6 системных промптов по Anthropic
Work Item: ORCH-077 · Repo: orchestrator (self-hosting) · Стадия: analysis
Формат: каждый критерий имеет PASS (что должно быть истинно для приёмки) и FAIL (что считается провалом). Reviewer/tester проверяют их буквально по файлам репозитория.
AC-1 — Единый XML-стиль во всех 6 промптах
Условие: Все 6 файлов .openclaw/agents/{analyst,architect,developer,reviewer,tester,deployer}.md
переписаны единым каноном с XML-секциями.
- PASS: Тело каждого из 6 промптов содержит все 5 обязательных секций-тегов:
<context>,<task>,<deliverables>,<constraints>,<output_format>(открывающий и закрывающий тег). - FAIL: Хотя бы в одном промпте отсутствует одна из 5 секций, ИЛИ структура осталась прежней свободной формой без XML-разметки.
AC-2 — Инструкция эмитить обязательную frontmatter-схему 52c
Условие: Каждый промпт явно инструктирует агента проставлять 6 обязательных полей схемы
(work_item, stage, author_agent, status, created_at, model_used) в авторских документах.
- PASS: В секции
<output_format>каждого из 6 промптов перечислены ВСЕ 6 имён полей схемы; для роли указаны конкретные значенияstage(стадия роли) иauthor_agent(роль) согласно карте TRZ §FR-2;model_usedпривязан к резолву ORCH-41 (claude-opus-4-8). - FAIL: В любом промпте отсутствует хотя бы одно из 6 имён полей, ИЛИ
author_agent/stageне конкретизированы для роли, ИЛИ инструкция отсутствует вовсе.
AC-3 — Few-shot и позитивные примеры рядом с запретами
Условие: Каждый промпт ссылается на скелеты 52b и эталоны, запреты имеют позитивную альтернативу.
- PASS: Каждый из 6 промптов содержит (а) ссылку на
docs/_templates/для своих документов; (б) ссылку хотя бы на один эталонный work item (ORCH-073илиORCH-088); (в) минимум один запрет, оформленный с позитивной альтернативой («делай Y вместо X» / «❌ … → ✅ …»). - FAIL: В любом промпте нет ссылки на шаблоны, ИЛИ нет ссылки на эталон, ИЛИ запреты поданы только негативно (без позитивной альтернативы ни в одном пункте).
AC-4 — АНТИ-РЕГРЕСС: ни одна функциональная инструкция не потеряна
Условие: Все функциональные инструкции старых промптов перенесены в новые (инвентарь TRZ §FR-6).
- PASS: Для каждого промпта присутствуют все ключевые элементы инвентаря §FR-6, в частности
(минимальный машинно-проверяемый набор):
- reviewer.md содержит machine-key
verdict:со значениямиAPPROVED|REQUEST_CHANGES(UPPERCASE) и правило «вердикт читается только из frontmatter»; правило «src/ изменён, доки нет → REQUEST_CHANGES». - tester.md содержит
result:со значениямиPASS|FAILкак машинный вердикт; алгоритм pytest + smoke (/health,/status,/queue). - deployer.md содержит
staging_status:(SUCCESS|FAILED),deploy_status:(SUCCESS|FAILED), canonicaldocker exec orchestrator-staging … staging_check.py, идемпотентный merge-guardpr_already_merged, self-hosting-запрет «не рестартить 8500 изнутри», ORCH-061 waiver-логику. - analyst.md содержит 4 deliverable (
01/02/03/04), «использовать Write tool», формат TRZ и test-plan. - architect.md содержит ADR-формат, правило сквозного ADR, self-hosting-запрет «без рестарта прода без staging», эскалацию.
- developer.md содержит TDD-алгоритм, «документация в том же PR», запреты (не мержить свой PR,
без
--no-verify/--force-push, не рестартить прод, не коммитить секреты).
- reviewer.md содержит machine-key
- FAIL: Любой элемент инвентаря §FR-6 отсутствует или искажён (изменён регистр/имя machine-verdict ключа; пропал self-hosting-запрет; пропал merge-guard; пропала canonical-команда).
AC-5 — Код не изменён, гейты нетронуты
Условие: Правятся только .openclaw/agents/*.md + документация; код и контракты гейтов не тронуты.
- PASS:
git diffзатрагивает ТОЛЬКО.openclaw/agents/*.md,CLAUDE.md,docs/**,CHANGELOG.mdи (новые)tests/test_*prompt*/tests/test_*canon*. Файлыsrc/config.py,src/agents/launcher.py,src/frontmatter.py,src/stages.py,src/qg/checks.py,src/stage_engine.pyНЕ изменены.frontmatter_validation_strictостаётсяFalse. - FAIL: Изменён любой файл
src/**, ИЛИ затронутSTAGE_TRANSITIONS/QG_CHECKS/check_*, ИЛИ включён hard-fail валидации схемы.
AC-6 — A/B-проверка на репрезентативной стадии: «не хуже»
Условие: Проведено сравнение старого vs нового промпта минимум на одной стадии.
- PASS: В артефактах задачи (
13-test-report.mdи/или ADR/12-review.md) зафиксирован результат A/B: новый промпт даёт артефакт не хуже старого — число цикловREQUEST_CHANGESне выросло, обязательные элементы артефакта присутствуют, машинный вердикт корректно парсится. - FAIL: A/B не проводилось/не зафиксировано, ИЛИ новый промпт показал регресс (больше циклов REQUEST_CHANGES, потеря содержания, непарсимый вердикт).
AC-7 — Документация обновлена
Условие: CLAUDE.md, docs/architecture/README.md, ADR и CHANGELOG.md обновлены в том же PR.
- PASS: Есть per-work-item ADR
docs/work-items/ORCH-077/06-adr/ADR-001-*.md;CLAUDE.mdиdocs/architecture/README.mdотражают слой промптов 52d (эмиссия схемы);CHANGELOG.mdсодержит запись под## [Unreleased]. - FAIL: Отсутствует ADR, ИЛИ README/CLAUDE.md не упоминают 52d-изменение, ИЛИ нет записи в CHANGELOG.
AC-8 — Валидность frontmatter промптов сохранена
Условие: YAML-frontmatter каждого промпта валиден и не возвращает model:.
- PASS:
tests/test_agent_frontmatter_no_model.pyзелёный: каждый frontmatter парсится как YAML-mapping,name==роль,descriptionнепуст, ключаmodel:нет. - FAIL: Любой промпт сломал YAML-frontmatter, потерял
name/description, ИЛИ вернулmodel:.
AC-9 — Полный регресс тестов зелёный
Условие: Изменение не ломает существующий набор тестов.
- PASS:
pytest tests/ -qзелёный; новые структурные тесты промптов проходят. - FAIL: Любой тест падает.
Сводная матрица AC ↔ FR/BR
| AC | Покрывает |
|---|---|
| AC-1 | BR-1 / FR-1 |
| AC-2 | BR-2 / FR-2 |
| AC-3 | BR-3 / FR-3 |
| AC-4 | BR-4 / FR-6 / NFR-2 |
| AC-5 | BR-5 / TRZ §4–§6 |
| AC-6 | BR-6 / FR-7(A/B) |
| AC-7 | BR-7 |
| AC-8 | NFR-3 / FR-7 |
| AC-9 | NFR-1 / TRZ §7 |