# 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 |
