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

152 lines
9.9 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.
---
work_item: ORCH-092
stage: analysis
author_agent: analyst
status: ready-for-review
created_at: 2026-06-09
model_used: claude-opus-4-8
---
# 03 — Критерии приёмки (Acceptance Criteria): ORCH-092 — Промпт-аудит 6 агентов
Work Item: **ORCH-092** · Repo: **orchestrator** · Стадия: analysis
Формат: каждый критерий имеет **PASS** (что должно быть истинно для приёмки) и **FAIL**
(что считается провалом). Reviewer/tester проверяют буквально по файлам репозитория
(`.openclaw/agents/*.md`, `tests/`, `docs/`).
---
## AC-1 — `created_at` в примерах всех 6 промптов — плейсхолдер (P0-1, BR-1, FR-1)
**Условие:** В копируемом примере frontmatter каждого из 6 промптов дата не захардкожена.
- **PASS:** В `analyst/architect/developer/reviewer/tester/deployer.md` пример несёт
`created_at: <YYYY-MM-DD>` (плейсхолдер); рядом — явная инструкция «подставь фактическую дату
(`date +%F`), НЕ копируй из примера». Литерала `created_at: 2026-06-09` (или иной конкретной
даты) в **копируемом блоке** нет.
- **FAIL:** Хотя бы один промпт оставляет конкретную дату в примере, или отсутствует инструкция
«не копируй буквально».
---
## AC-2 — `model_used` в примерах — плейсхолдер/резолв (P0-2, BR-2, FR-2)
**Условие:** В копируемом примере frontmatter каждого из 6 промптов модель не захардкожена.
- **PASS:** Пример несёт `model_used: <resolve ORCH-41>` (или эквивалентный плейсхолдер) +
оговорку «подставь фактическую модель из конфига». Литерал `claude-opus-4-8` в **копируемом
блоке** отсутствует (допускается как справка в таблице полей вне блока).
- **FAIL:** Хотя бы один промпт оставляет `model_used: claude-opus-4-8` в копируемом примере,
или нет оговорки про подстановку.
---
## AC-3 — Имена гейтов сверены с `QG_CHECKS` (P0-3, BR-3, FR-3)
**Условие:** Все `check_*`/имена QG-функций в промптах соответствуют реестру `QG_CHECKS`.
- **PASS:** Каждое имя гейта, встречающееся в 6 промптах, присутствует ключом в
`QG_CHECKS` (`src/qg/checks.py`). Реальные несовпадения (если бы были) исправлены; ложные
(напр. `check_tests_passed` — верен) НЕ тронуты. Сверка закреплена тестом (см. AC-10/TC-03).
- **FAIL:** В промпте остаётся имя гейта, которого нет в `QG_CHECKS`; ИЛИ исправлено верное имя
«вслепую» (придуманная замена).
---
## AC-4 — developer: «PR>1500» → эскалация (P1-1, BR-4, FR-4)
**Условие:** Нереализуемая инструкция о разбиении PR переформулирована.
- **PASS:** `developer.md` НЕ содержит инструкции «разбивай на меньшие PR»; вместо неё —
эскалация: слишком большой PR → флагировать/эскалировать (нужна декомпозиция на уровне задач,
1 задача = 1 ветка = 1 PR). Маркер «свой PR» («не мержи свой PR») сохранён.
- **FAIL:** Старая формулировка «разбивай на меньшие PR» осталась; ИЛИ при правке удалён маркер
«свой PR».
---
## AC-5 — `<escalation>` в developer/reviewer/tester (P1-3, BR-5, FR-5)
**Условие:** Три промпта получили секцию `<escalation>` с чёткими маршрутами.
- **PASS:** `developer.md`, `reviewer.md`, `tester.md` содержат `<escalation>``</escalation>`
(после `</success_criteria>`), с маршрутами: developer → `back-to:analysis`; tester →
`back-to:dev` (при FAIL); reviewer → `REQUEST_CHANGES`. Нормативный порядок 5 обязательных
секций НЕ нарушен.
- **FAIL:** Хотя бы у одного из трёх нет `<escalation>`; ИЛИ её добавление сломало порядок/
наличие 5 обязательных секций.
---
## AC-6 — deployer: рамка запретов + решённый язык (P2-1/P2-2, BR-6/BR-10, FR-6/FR-10)
**Условие:** Критичные self-hosting-запреты подняты в видную рамку; вопрос языка решён.
- **PASS:** `deployer.md` несёт **в начале** видную рамку с критичным запретом «NEVER restart
prod 8500». Язык deployer решён архитектором в `06-adr/`: либо унифицирован на ru, либо
зафиксировано явное исключение (en) с обоснованием. Маркеры `docker exec orchestrator-staging`,
`pr_already_merged`, `8500`, `INFRA-WAIVED` сохранены; verdict-ключи и команды не сломаны.
- **FAIL:** Критичный запрет не выделен/утоплен в тексте; ИЛИ язык не решён (нет ADR-решения);
ИЛИ потерян анти-регресс-маркер / сломан verdict-ключ при переводе.
---
## AC-7 — tester обогащён (P2-3, BR-7, FR-7)
**Условие:** tester получил worktree-путь, serial_gate smoke и покрытие ТЗ.
- **PASS:** `tester.md`: (а) явно указывает worktree-путь ветки задачи (а не общий
`/repos/orchestrator`) для прогона тестов; (б) smoke `/queue` проверяет наличие блока
`serial_gate` (ORCH-088); (в) `<success_criteria>` требует покрытия каждого TC из
`04-test-plan.yaml` (а не только «файл записан»). Маркеры `pytest`/`/health`/`/status`/`/queue`
сохранены.
- **FAIL:** Отсутствует любой из трёх пунктов; ИЛИ потерян анти-регресс-маркер tester.
---
## AC-8 — Удалена мёртвая инструкция reviewer (P2-4, BR-8, FR-8)
**Условие:** Строка про «тот же экземпляр Developer» удалена без потери живых инвариантов.
- **PASS:** `reviewer.md` НЕ содержит «не апрувь PR от того же экземпляра Developer». Маркеры
`REQUEST_CHANGES` и «НЕ обновлена», ось документации, ось трассировки (`TRACEABILITY.md`),
ось обзорных доков (`Известные ограничения`, `ORCH-079`) сохранены.
- **FAIL:** Мёртвая строка осталась; ИЛИ при удалении пострадал живой инвариант reviewer.
---
## AC-9 — АНТИ-РЕГРЕСС: verdict-ключи + канон + `src/` не тронут (NFR-1/2, BR-11)
**Условие:** Машинные контракты и канон сохранены, код не тронут.
- **PASS:** verdict-ключи `verdict:`/`result:`/`staging_status:`/`deploy_status:`/
`security_status:` (+ значения APPROVED/REQUEST_CHANGES/PASS/FAIL/SUCCESS/FAILED) — байт-в-байт.
5 XML-секций в нормативном порядке + 6 полей 52c во всех 6 промптах. `src/**`,
`STAGE_TRANSITIONS`, `QG_CHECKS`, схема БД — без изменений в diff. `git diff --stat` не содержит
`src/`. `tests/test_agent_prompts_canon.py` и `tests/test_agent_frontmatter_no_model.py`
зелёные.
- **FAIL:** Любой verdict-ключ изменён по имени/регистру/значению; нарушен порядок/наличие 5
секций или 6 полей; есть правка `src/`; целевые тесты красные.
---
## AC-10 — Документация и тесты обновлены (BR-11, FR-11)
**Условие:** Обзорная документация и анти-регресс-тесты отражают изменение.
- **PASS:** `CHANGELOG.md` несёт запись ORCH-092; `CLAUDE.md`/`docs/architecture/README.md`
обновлены при необходимости; `06-adr/ADR-001-*.md` фиксирует решения P1-2/P2-2; новые
структурные TC (плейсхолдеры даты/модели, `<escalation>`, удаление мёртвой строки, обогащение
tester, рамка deployer, сверка гейтов) добавлены в `tests/test_agent_prompts_canon.py` и
зелёные; полный `pytest tests/ -q` зелёный.
- **FAIL:** Отсутствует ADR-решение P1-2/P2-2; нет записи в CHANGELOG; новые инварианты не
покрыты тестом; регресс красный.
---
## Сводная матрица 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-4 |
| AC-5 | BR-5 / FR-5 |
| AC-6 | BR-6 / BR-10 / FR-6 / FR-10 |
| AC-7 | BR-7 / FR-7 |
| AC-8 | BR-8 / FR-8 |
| AC-9 | NFR-1 / NFR-2 / FR-9 (rebase по ADR без слома канона) |
| AC-10 | BR-9 / BR-11 / FR-9 / FR-11 |