14 KiB
01 — BRD (бизнес-требования): ORCH-077 — ORCH-52d: оптимизация 6 системных промптов по Anthropic
Work Item: ORCH-077 · Repo: orchestrator (self-hosting) · Стадия: analysis
1. Бизнес-контекст и проблема
Эпик ORCH-52 строит сквозной контракт документации конвейера тремя слоями:
- 52b (ORCH-075) — описательный стандарт документов:
docs/_standards/PIPELINE_DOCS.md(карта «стадия → агент → документ → гейт → machine-key») + копируемые скелеты вdocs/_templates/. - 52c (ORCH-076) — машинный контракт: единый
src/frontmatter.py(reader + writer + валидаторvalidate_schema/REQUIRED_FIELDS) и спекаdocs/_standards/HANDOFF_PROTOCOL.mdс обязательной frontmatter-схемой (work_item,stage,author_agent,status,created_at,model_used). - 52d (эта задача, ORCH-077) — слой промптов: замыкающее звено.
Боль 1 (разрыв цепочки 52b→52c→52d). 52c заложила writer и валидатор обязательной схемы,
но работает в режиме обратной совместимости (frontmatter_validation_strict=False,
warning-only) — агенты физически не проставляют эти поля в своих выходных документах. Пока
6 системных промптов не научены эмитить схему, петля 52 не замкнута: writer есть, валидатор
есть, а данных на входе нет.
Боль 2 (форма промптов). 6 системных промптов агентов (.openclaw/agents/*.md) написаны
в свободной разнородной форме (часть по-русски, deployer — по-английски), без единой структуры.
Это снижает предсказуемость поведения агентов прода и затрудняет сопровождение. Канон Anthropic
по построению системных промптов (XML-разметка секций, few-shot с эталонами, явное место для
рассуждения, позитивные примеры рядом с запретами, литеральный scope) даёт измеримо более
стабильный выход.
Установленные факты (проверено в репозитории):
- Промпты в
.openclaw/agents/:analyst.md,architect.md,developer.md,reviewer.md,tester.md,deployer.md— все 6 в объёме. - Модель/эффорт каждого агента резолвятся ТОЛЬКО из config (
resolve_agent_model/resolve_agent_effort, ORCH-41); frontmattermodel:удалён как мёртвый (ORCH-074, тестtests/test_agent_frontmatter_no_model.py). Все 6 ролей сейчас наclaude-opus-4-8. - Обязательная схема:
src/frontmatter.py::REQUIRED_FIELDS = ("work_item", "stage", "author_agent", "status", "created_at", "model_used"). - Machine-verdict ключи (регистрозависимы, читаются гейтами ТОЛЬКО из frontmatter):
verdict:(12-review.md),result:/verdict:/status:(13-test-report.md),staging_status:(15-staging-log.md),deploy_status:(14-deploy-log.md),security_status:(17-security-report.md).
2. Объём (scope)
В объёме
- Переписать все 6 промптов
.openclaw/agents/*.mdв едином каноне Anthropic с XML-структурой секций:<context>/<task>/<deliverables>/<constraints>/<output_format>(допустимы дополнительные семантические секции, напр.<thinking>-подсказка). - Добавить в каждый промпт явную инструкцию эмитить обязательную frontmatter-схему 52c
(
work_item/stage/author_agent/status/created_at/model_used) в тех выходных документах, которые роль авторствует, с конкретными для роли значениями (author_agent= роль,stage= стадия роли,model_used= резолв ORCH-41). - Few-shot: ссылки на скелеты 52b (
docs/_templates/) и эталонные work item (ORCH-073 / ORCH-088) как примеры заполнения; позитивные примеры рядом с запретами («делай Y вместо X»). - Явное место для рассуждения (CoT/thinking) там, где это уместно для роли.
- Чёткие success-criteria артефакта стадии (что считается готовым выходом).
- Обновить документацию:
CLAUDE.md,docs/architecture/README.md, ADR (per-work-item + при необходимости сквозной),CHANGELOG.md.
Вне объёма
- Любая правка кода:
src/config.py,src/agents/launcher.py,resolve_agent_model/resolve_agent_effort,src/frontmatter.py(сделана в 52c),src/stages.py,src/qg/checks.py,src/stage_engine.py. - Включение жёсткой валидации схемы (
frontmatter_validation_strict) — остаётсяFalse(warning-only). 52d учит промпты эмитить схему добровольно; enforcement не включается. - Изменение состава/семантики Quality Gates,
STAGE_TRANSITIONS, набора machine-verdict ключей. - Model-routing / смена моделей ролей (вне эпика).
- Изменение
tools:-блока (разрешённые инструменты) в frontmatter промптов.
3. Заинтересованные стороны
- Заказчик / Owner (Слава) — принимает результат; ручной BRD-гейт.
- Потребитель прямой — 6 агентов прода, которые исполняют эти промпты на КАЖДОЙ задаче ВСЕХ проектов (orchestrator + enduro-trails) из общего инстанса.
- Косвенно затронуты — все будущие work item (качество артефактов конвейера) и петля 52 (наполнение frontmatter-схемы реальными данными).
4. Бизнес-требования (BR)
- BR-1 — Все 6 промптов (
.openclaw/agents/*.md) переписаны единым XML-стилем секций (<context>/<task>/<deliverables>/<constraints>/<output_format>). - BR-2 — Каждый промпт явно инструктирует агента проставлять обязательную frontmatter-схему 52c (все 6 полей) в выходных документах, которые роль авторствует, с конкретными для роли значениями.
- BR-3 — Few-shot: каждый промпт ссылается на скелеты 52b (
docs/_templates/) и эталоны (ORCH-073 / ORCH-088); запреты сопровождаются позитивным примером («делай Y вместо X»). - BR-4 (АНТИ-РЕГРЕСС, критично для self-hosting) — НИ ОДНА функциональная инструкция
старого промпта не потеряна: гейты, machine-verdict ключи и их регистр, маркеры
ORCH-NNN, правилаCLAUDE.md, ролевые запреты, идемпотентный merge-guard, canonical staging-команда (docker exec), self-hosting-запреты. Агенты продолжают проходить свои гейты. - BR-5 — Код НЕ изменён: правятся только
.openclaw/agents/*.md+ документация;STAGE_TRANSITIONS/QG_CHECKS/check_*нетронуты. - BR-6 — Проведена A/B-проверка минимум на одной репрезентативной стадии (старый vs новый
промпт): новый промпт НЕ хуже по числу циклов
REQUEST_CHANGES/ качеству артефакта. - BR-7 — Документация (
CLAUDE.md/README/ ADR /CHANGELOG) обновлена в том же PR.
5. Нефункциональные требования (NFR)
- NFR-1 (обратная совместимость гейтов) — Новые промпты эмитят схему аддитивно: рядом с
существующими machine-verdict ключами, не меняя их имени/регистра/позиции. Гейты читают вердикты
ровно как раньше (схема при
strict=Falseв вердикте не участвует). - NFR-2 (безопасность прода) — Промпт = поведение агента прода для ВСЕХ проектов. Рефактор формы не должен ослабить ни одну рабочую инструкцию (особенно self-hosting-запреты deployer'а: «не рестартить 8500 изнутри», merge-guard).
- NFR-3 (валидность frontmatter промпта) — YAML-frontmatter каждого
.openclaw/agents/*.mdостаётся валидным YAML, сохраняетname/description, НЕ возвращает удалённыйmodel:(тестtest_agent_frontmatter_no_model.pyостаётся зелёным). - NFR-4 (читабельность/сопровождаемость) — Единый канон облегчает будущие правки; объём каждого промпта остаётся соразмерным (без раздувания «воды»).
- NFR-5 (обратимость) — Изменение чисто текстовое; откат = git revert PR, без миграций состояния/БД.
6. Допущения и ограничения
- Допущение 1 —
model_usedдля всех 6 ролей сейчас =claude-opus-4-8(README §«Модель и эффорт по ролям»); промпт инструктирует ставить именно эту модель как резолв ORCH-41. Если model-routing включат позже — значение пересматривается, но это вне ORCH-077. - Допущение 2 —
created_atагент берёт как текущую дату (YYYY-MM-DD); источник — доступный агенту способ (напр.date +%Fчерез Bash там, где Bash вtools:). - Ограничение 1 —
tools:-блок и разрешённые пути записи каждого промпта НЕ расширяются: агент эмитит схему только в те документы, которые и так авторствует. - Ограничение 2 — Developer не авторствует номерного handoff-вердикт-документа (его выход —
код + PR, гейт
check_ci_green); для него инструкция схемы применяется к when-applicable докам (07/08/10), если он их трогает, а основной акцент — на сохранении dev-инструкций. - Ограничение 3 —
frontmatter_validation_strictостаётсяFalse; ORCH-077 НЕ включает hard-fail (это была бы правка config = вне scope).
7. Критерии успеха
Резюме: 6 промптов переписаны по канону Anthropic, эмитят схему 52c, не потеряли ни одной
функциональной инструкции, код не тронут, документация обновлена, A/B подтверждает «не хуже».
Детальные PASS/FAIL — 03-acceptance-criteria.md.
8. Риски
Краткий перечень (детали — 10-tech-risks.md, заполняет архитектор):
- R-1 (регресс поведения агента) — при рефакторе формы потерять рабочую инструкцию → агент ломает выход для ВСЕХ проектов. Митигация: построчная карта «старая инструкция → где в новом промпте» (AC-4), A/B-прогон.
- R-2 (ложный гейт-провал) — случайно изменить регистр/имя machine-verdict ключа или сместить его так, что парсер не найдёт. Митигация: явный инвентарь ключей, структурные тесты.
- R-3 (некорректный
model_used) — захардкодить неверную модель. Митигация: ссылка на резолв ORCH-41 и таблицу README. - R-4 (раздувание промпта) — XML-канон + few-shot увеличат объём и «утопят» ключевые запреты. Митигация: ссылки на эталоны вместо инлайна, контроль объёма.