Files
orchestrator/docs/work-items/ORCH-077/03-acceptance-criteria.md

9.1 KiB
Raw Permalink Blame History

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), canonical docker exec orchestrator-staging … staging_check.py, идемпотентный merge-guard pr_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, не рестартить прод, не коммитить секреты).
  • 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