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

134 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 |