19 KiB
02 — ТЗ (TRZ): ORCH-077 — ORCH-52d: оптимизация 6 системных промптов по Anthropic
Work Item: ORCH-077 · Repo: orchestrator (self-hosting) · Стадия: analysis
ТЗ описывает конкретные изменения (выведенные из BRD и фактического содержимого репозитория). Архитектурное обоснование (порядок секций, формулировки, нужен ли сквозной ADR) — задача архитектора (
06-adr). Это docs/prompts-only задача: код не меняется.
1. Сводка изменения
Переписать 6 системных промптов агентов (.openclaw/agents/*.md) в едином каноне Anthropic
(XML-секции) и научить каждый эмитить обязательную frontmatter-схему 52c в авторских документах.
Тело промпта (Markdown ниже frontmatter) реструктурируется; YAML-frontmatter промпта
(name, description, tools) сохраняется как есть (без model:). СОДЕРЖАНИЕ всех
функциональных требований переносится 1:1 (см. §3 — инвентарь анти-регресса). Параллельно
обновляется документация (§8).
2. Задействованные модули / пути
| Путь | Действие |
|---|---|
.openclaw/agents/analyst.md |
переписать (тело) |
.openclaw/agents/architect.md |
переписать (тело) |
.openclaw/agents/developer.md |
переписать (тело) |
.openclaw/agents/reviewer.md |
переписать (тело) |
.openclaw/agents/tester.md |
переписать (тело) |
.openclaw/agents/deployer.md |
переписать (тело) |
CLAUDE.md |
обновить (раздел про промпты / эпик 52) |
docs/architecture/README.md |
обновить (раздел про схему/handoff и слой промптов 52d) |
docs/work-items/ORCH-077/06-adr/ADR-001-*.md |
создать (архитектор) |
docs/architecture/adr/adr-NNNN-*.md |
создать при необходимости (архитектор, если сквозное) |
CHANGELOG.md |
добавить запись ## [Unreleased] |
tests/test_agent_prompts_canon.py (имя — на усмотрение dev) |
создать (структурные тесты, §7 / см. test-plan) |
| НЕ трогать | src/** (любой), включая config.py, agents/launcher.py, frontmatter.py, stages.py, qg/checks.py, stage_engine.py |
3. Функциональные требования
FR-1 — Единая XML-структура секций во всех 6 промптах (BR-1)
Тело каждого промпта организовано вокруг секций (XML-теги как разделители смысловых блоков):
<context>— кто агент, проект orchestrator, стек, self-hosting, что прочесть перед работой (обязательный пункт «прочтиCLAUDE.mdиdocs/architecture/README.md»).<task>— что делает роль на своей стадии; допускается вложенная<thinking>-подсказка (явное место для рассуждения, где уместно — FR-4).<deliverables>— какие файлы и куда роль создаёт через Write tool.<constraints>— запреты и обязательные правила (включая ролевые «Запрещено» из старых промптов).<output_format>— точный формат выходных документов, включая frontmatter-схему (FR-2) и machine-verdict ключи.
Дополнительные секции допустимы (напр. <success_criteria>, <escalation>), но 5 перечисленных
обязательны во всех 6 промптах.
FR-2 — Инструкция эмитить обязательную frontmatter-схему 52c (BR-2)
В секции <output_format> каждого промпта явно перечислены 6 обязательных полей схемы
(src/frontmatter.py::REQUIRED_FIELDS) с конкретными для роли значениями. Схема ставится
аддитивно — ПОВЕРХ существующих ключей документа, НЕ заменяя и НЕ смещая machine-verdict
ключи (NFR-1).
| Поле | Значение / источник |
|---|---|
work_item |
ID задачи (ORCH-NNN / ET-NNN) — подставляется агентом |
stage |
стадия роли (см. таблицу ниже) |
author_agent |
роль (см. таблицу ниже) |
status |
статус выхода стадии (роле-специфично; для вердикт-доков согласован с вердиктом) |
created_at |
текущая дата YYYY-MM-DD |
model_used |
резолв ORCH-41 — на текущий момент claude-opus-4-8 для всех ролей (README §«Модель и эффорт») |
Карта роль → стадия → author_agent → документы, несущие схему:
| Роль (prompt) | stage |
author_agent |
Документы со схемой | Machine-verdict ключ (НЕ трогать) |
|---|---|---|---|---|
| analyst | analysis |
analyst |
01-brd.md, 02-trz.md, 03-acceptance-criteria.md, 04-test-plan.yaml |
— (нет; гейт = наличие файлов + Approved) |
| architect | architecture |
architect |
06-adr/ADR-NNN-*.md, 07-infra-requirements.md, 08-data-requirements.md, 10-tech-risks.md |
— |
| developer | development |
developer |
when-applicable доки, если трогает (07/08/10); код/PR номерного вердикт-дока не несёт |
— (гейт = check_ci_green) |
| reviewer | review |
reviewer |
12-review.md |
verdict: (APPROVED|REQUEST_CHANGES) |
| tester | testing |
tester |
13-test-report.md |
result:/verdict:/status: (PASS|FAIL|BLOCKED) |
| deployer | deploy-staging, deploy |
deployer |
15-staging-log.md, 14-deploy-log.md, 17-security-report.md (when-applicable) |
staging_status:, deploy_status:, security_status: |
Примечание по
04-test-plan.yaml: это YAML-документ (не Markdown с frontmatter-блоком). Схема ложится как top-level ключи YAML рядом с существующими (work_itemуже присутствует в скелете; добавляютсяstage/author_agent/status/created_at/model_used). Архитектор фиксирует точную форму в ADR, если есть нюанс совместимости со скелетом 52b.
FR-3 — Few-shot и позитивные примеры (BR-3)
В каждом промпте (секция <deliverables> и/или <output_format>):
- ссылка на копируемый скелет роли в
docs/_templates/(напр. analyst →01-brd.md,02-trz.md,03-acceptance-criteria.md,04-test-plan.yaml); - ссылка на эталонный заполненный work item — ORCH-073 и/или ORCH-088 — как пример качества/полноты;
- каждый запрет в
<constraints>сопровождается позитивной альтернативой: формат «❌ не делай X → ✅ делай Y» (литеральность Opus 4.8).
FR-4 — Явное место для рассуждения (CoT/thinking)
Там, где роль принимает решение (architect — выбор решения; reviewer — вынесение вердикта;
tester — классификация PASS/FAIL/BLOCKED; deployer — трактовка exit-кодов/waiver), промпт
содержит явную <thinking>-подсказку «сначала рассуди, потом пиши вердикт». Для механических
ролей (минимально) — не обязательно.
FR-5 — Success-criteria артефакта стадии
В каждом промпте есть явный блок «выход считается готовым, когда…»: перечень файлов + наличие обязательных frontmatter-полей + (для вердикт-ролей) корректный machine-verdict ключ.
FR-6 — АНТИ-РЕГРЕСС: инвентарь сохраняемых инструкций (BR-4, критично)
Ниже — обязательный к переносу 1:1 минимум по каждому промпту. Reviewer проверяет ПОСТРОЧНО. Список не исчерпывающий: переносится ВСЁ функциональное содержание, перечисленное — обязательный костяк.
analyst.md:
- «Используй Write tool; не выводи содержимое в stdout».
- Список «что прочесть» (
CLAUDE.md, README,00-business-request.md,src/). - 4 обязательных deliverable:
01-brd.md,02-trz.md,03-acceptance-criteria.md,04-test-plan.yaml. - Формат TRZ (модули
src/, изменения API, изменения БД, требования к QG, артефакты pipeline). - Формат
test-plan.yaml(id/type/description/module/expected). - Запреты: не предлагать архитектурные решения, не писать код, не править чужие work item, не выводить в stdout.
architect.md:
- «Прочти CLAUDE.md и README».
- Контекст стека, конвейер, self-hosting-предупреждение (общий прод-контейнер).
- Deliverables:
06-adr/ADR-NNN-*.md(обяз.),07/08/10(по применимости). - Правило сквозного ADR
docs/architecture/adr/adr-NNNN-*для сквозных решений. - ADR-формат (Статус / Контекст / Решение / Последствия).
- «Документация = golden source»: обновлять README/internals при изменении стадий/QG.
- Self-hosting-запреты: не предлагать рестарт прода без staging-гейта, всё ORCH — через 8501.
- Принципы (Docker/один сервер, SQLite, conventional/trunk, без k8s/облака, без ORM при raw SQL).
- Запреты (multi-node/managed, лишний MQ, менять QG без ADR, рестарт прода без staging).
- Эскалация (
arch:major-change,back-to:analysis).
developer.md:
- «Прочти CLAUDE.md и README».
- Стек, список «что прочесть» (
02-trz— источник правды,03,04,06-adr/, код). - Алгоритм: fetch+rebase origin/main → TDD (тест, потом код) → миграции при смене схемы →
ruff check+pytest→ conventional commit (Refs: <plane-id>) → push → PR в Gitea. - «Документация = golden source в ТОМ ЖЕ PR» (API/конвейер/конфиг/компонент/CHANGELOG).
- Конвенции (conventional commits, ветки, docstring, содержательные тесты).
- Self-hosting: НЕ перезапускать прод, проверять через
pytestлокально. - Запреты: не менять ТЗ/ADR, без ADR не решать архитектуру, не коммитить секреты,
PR > 1500 строк без декомпозиции, не мержить свой PR, без
--no-verify/--force-push, не рестартить прод.
reviewer.md:
- «Прочти CLAUDE.md (правила документирования!) и README».
- 4 оси: соответствие ТЗ, соответствие ADR, качество кода, качество документации.
- Жёсткое правило: src/ изменён, а
docs//CHANGELOG/ADR НЕ обновлены → ОБЯЗАТЕЛЬНОREQUEST_CHANGES(приоритет над остальным). - Severity P0/P1/P2/P3 (с пунктом «документация не обновлена при изменении src/» = P0).
- Правило вердикта: любой P0/P1 →
REQUEST_CHANGES; только P2/P3 / нет findings →APPROVED. - Frontmatter-контракт
12-review.md: вердикт читается ТОЛЬКО изverdict:(UPPERCASE, строгоAPPROVED|REQUEST_CHANGES), упоминания в прозе не учитываются; без frontmatter → not-approved. - Запреты: не править код, не апрувить PR того же экземпляра developer, без subjective без ссылки на правило, не пропускать проверку документации.
tester.md:
- «Прочти CLAUDE.md и README».
- Что прочесть (
02/03/04/12-review.md— убедиться, что вердикт APPROVED). - Алгоритм: проверка окружения (
curl /health) →pytest tests/ -v --tb=short→ smoke API (/health,/status,/queue) → сверка покрытия ТЗ с04-test-plan.yamlи03. - Frontmatter
13-test-report.md:result:(PASS|FAIL) — машинный вердикт; таблица TC, вывод pytest, итог. - Вердикт: все PASS+smoke OK →
result: PASS→ deploy-staging; любой FAIL →result: FAIL→ откат на development. - Запреты: не писать прод-код, не подгонять тесты под код, не запускать деструктив на проде.
deployer.md (наиболее рискованный — self-hosting):
- Шапка-предупреждение: прочесть CLAUDE.md/README/INFRA.md; НЕ перезапускать прод 8500.
- Стадия
deploy-staging: canonical-командаdocker exec orchestrator-staging python3 /repos/orchestrator/scripts/staging_check.py --base-url http://localhost:8501 --mode stub(с обоснованием B6 registry-isolation — сохранить!); маппинг exit 0 →SUCCESS, ≠0 →FAILED. - ORCH-061: толерантность к waived C9a/C9b (
INFRA-WAIVED:копировать в лог; доверять exit-коду, не пересуживать); kill-switchORCH_STAGING_INFRA_TOLERANCE_ENABLED=false/--strict. staging_status:строгоSUCCESS|FAILED(UPPERCASE) — единственный машинный ключcheck_staging_status.- Merge
15-staging-log.mdвmain(commit+push). - Стадия
deploy: контрактdeploy_status: SUCCESS|FAILED(читает толькоcheck_deploy_status). - Идемпотентный merge-guard (ORCH-065): перед (повторным) merge feature-PR в
mainконсультироватьmerge_gate.pr_already_merged(repo, branch); MERGED=1 → не мержить повторно (no-op), MERGED=0 → мержить; guard never-raise. - Self-hosting (
orchestrator): ты НЕ деплоишь себя; Phase A/B/C оркестрируются кодом (stage_engine/self_deploy); НИКОГДА не запускатьdocker compose up -d orchestrator/--build/ рестарт 8500 изнутри;deploy_status: SUCCESS= реальный host health-ok. - Non-self репо (enduro): прежний синхронный ssh-деплой через
scripts/orchestrator-deploy-hook.sh. - Общие правила: всегда машинный YAML-frontmatter (гейты парсят только frontmatter); никогда
push в
mainнапрямую; не менять.env/.env.staging/docker-compose.yml/прод-инфру.
FR-7 — Валидность frontmatter промптов (NFR-3)
YAML-frontmatter каждого .openclaw/agents/*.md остаётся валидным YAML, сохраняет
name==роль и непустой description, и НЕ содержит ключа model:
(tests/test_agent_frontmatter_no_model.py остаётся зелёным).
4. Изменения API
Нет. Эндпоинты не добавляются/не меняются.
5. Изменения схемы БД
Нет. Миграции/таблицы/индексы не трогаются.
6. Требования к новым/изменённым QG checks
Нет. QG_CHECKS, check_*, _parse_*, STAGE_TRANSITIONS — без изменений.
frontmatter_validation_strict остаётся False (warning-only) — hard-fail НЕ включается.
7. Совместимость / регресс
- Обратная совместимость гейтов: схема эмитится аддитивно; machine-verdict ключи (имя, регистр) неизменны → все 5 вердикт-парсеров читают как раньше (NFR-1).
- Без kill-switch: изменение чисто текстовое (промпты + доки); поведение кода идентично.
- Обратимость:
git revertPR; нет миграций/состояния. - Тесты: добавляются структурные тесты промптов (присутствие 5 XML-секций; присутствие
инструкции по 6 полям схемы; присутствие сохранённых machine-verdict ключей и ключевых
маркеров анти-регресса). Существующий
test_agent_frontmatter_no_model.pyостаётся зелёным; полныйpytest tests/ -q— зелёный. - A/B (BR-6): на ≥1 репрезентативной стадии сравнить выход старого vs нового промпта;
критерий — новый не увеличивает число циклов
REQUEST_CHANGESи не теряет содержания артефакта. Метод фиксирует архитектор/исполнитель (напр. прогон одной стадии в staging / ручное сравнение артефактов на эталонной задаче).