work_item: ORCH-077
title: "ORCH-52d — канон Anthropic + эмиссия frontmatter-схемы в 6 промптах агентов"
framework: pytest
scope: >
  Структурная верификация 6 системных промптов (.openclaw/agents/*.md): наличие XML-секций,
  инструкции эмитить обязательную frontmatter-схему 52c, сохранение machine-verdict ключей и
  ключевых анти-регресс маркеров, валидность YAML-frontmatter. Вне покрытия: семантическое
  качество выхода агентов (оценивается A/B-проверкой вручную, TC-09) и любая логика src/
  (код не меняется).
notes: >
  Задача docs/prompts-only — src/ не трогается. Тесты читают файлы .openclaw/agents/*.md как
  текст/YAML. Существующий tests/test_agent_frontmatter_no_model.py (ORCH-074) ОБЯЗАН остаться
  зелёным. Полный регресс pytest tests/ -q должен оставаться зелёным. Имена тест-функций/файла —
  ориентир; точную реализацию определяет developer (например tests/test_agent_prompts_canon.py).
  Списки обязательных секций/полей/ключей вынести в параметризацию, чтобы тест шёл по всем 6
  ролям единообразно.

tests:
  - id: TC-01
    type: unit
    description: "Каждый из 6 промптов содержит все 5 XML-секций (<context>/<task>/<deliverables>/<constraints>/<output_format>), открывающий и закрывающий тег. (AC-1)"
    module: tests/test_agent_prompts_canon.py
    expected: PASS

  - id: TC-02
    type: unit
    description: "Каждый промпт перечисляет все 6 имён полей схемы 52c (work_item/stage/author_agent/status/created_at/model_used) в теле. (AC-2)"
    module: tests/test_agent_prompts_canon.py
    expected: PASS

  - id: TC-03
    type: unit
    description: "Для каждой роли в промпте присутствуют корректные конкретные значения author_agent (==роль) и stage (стадия роли по карте FR-2). (AC-2)"
    module: tests/test_agent_prompts_canon.py
    expected: PASS

  - id: TC-04
    type: unit
    description: "Каждый промпт ссылается на docs/_templates/ и хотя бы на один эталон (ORCH-073 или ORCH-088). (AC-3)"
    module: tests/test_agent_prompts_canon.py
    expected: PASS

  - id: TC-05
    type: unit
    description: "АНТИ-РЕГРЕСС machine-verdict ключей: reviewer.md содержит 'verdict:' (APPROVED|REQUEST_CHANGES), tester.md — 'result:' (PASS|FAIL), deployer.md — 'staging_status:' и 'deploy_status:' (SUCCESS|FAILED), регистр сохранён. (AC-4)"
    module: tests/test_agent_prompts_canon.py
    expected: PASS

  - id: TC-06
    type: unit
    description: "АНТИ-РЕГРЕСС deployer self-hosting: deployer.md содержит canonical 'docker exec orchestrator-staging' staging-команду, merge-guard 'pr_already_merged', запрет рестарта 8500 изнутри, ORCH-061 'INFRA-WAIVED'. (AC-4)"
    module: tests/test_agent_prompts_canon.py
    expected: PASS

  - id: TC-07
    type: unit
    description: "АНТИ-РЕГРЕСС ключевых маркеров остальных ролей: analyst — 4 deliverable + Write tool; architect — ADR-формат + сквозной ADR + эскалация; developer — TDD + 'не мержить свой PR' + 'не рестартить прод'; reviewer — правило 'src изменён, доки нет → REQUEST_CHANGES'. (AC-4)"
    module: tests/test_agent_prompts_canon.py
    expected: PASS

  - id: TC-08
    type: unit
    description: "Валидность frontmatter промптов: каждый .openclaw/agents/*.md парсится как YAML-mapping, name==роль, description непуст, ключа 'model:' нет (re-use существующего теста ORCH-074). (AC-8)"
    module: tests/test_agent_frontmatter_no_model.py
    expected: PASS

  - id: TC-09
    type: integration
    description: "A/B-проверка на репрезентативной стадии (старый vs новый промпт): новый не хуже по числу циклов REQUEST_CHANGES и полноте артефакта; вердикт корректно парсится. Ручной/полуавтоматический прогон; результат фиксируется в 13-test-report.md. (AC-6)"
    module: tests/manual/ab_prompt_compare.md
    expected: PASS

  - id: TC-10
    type: integration
    description: "Полный регресс: pytest tests/ -q зелёный (код не тронут, гейты и контракты целы). (AC-9)"
    module: tests/
    expected: PASS
