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