14 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-092 | analysis | analyst | ready-for-review | 2026-06-09 | claude-opus-4-8 |
02 — ТЗ (TRZ): ORCH-092 — Промпт-аудит 6 агентов
Work Item: ORCH-092 · Repo: orchestrator · Стадия: analysis
ТЗ описывает конкретные изменения к реализации, выведенные из BRD и фактического кода. Архитектурное обоснование/решения (P1-2 rebase, P2-2 язык deployer) — задача архитектора (
06-adr/).
1. Сводка изменения
Точечная правка 6 системных промптов .openclaw/agents/*.md + обзорной документации + структурных
анти-регресс-тестов. Код приложения не трогается (docs/prompts-only). Цель — устранить класс
дефектов промптов (хардкод даты/модели, размазанная эскалация, нереализуемые/конфликтующие
инструкции, мёртвые инструкции, недообогащённые промпты), сохранив канон 52d/52c/52e и
машинные verdict-ключи байт-в-байт.
2. Задействованные модули / пути
| Путь | Действие |
|---|---|
.openclaw/agents/analyst.md |
изменить — расхардкод created_at/model_used в примере (FR-1, FR-2) |
.openclaw/agents/architect.md |
изменить — расхардкод created_at/model_used в примере (FR-1, FR-2) |
.openclaw/agents/developer.md |
изменить — расхардкод (FR-1/2); «PR>1500»→эскалация (FR-4); <escalation> (FR-5); rebase по решению ADR (FR-9) |
.openclaw/agents/reviewer.md |
изменить — расхардкод (FR-1/2); <escalation> (FR-5); удалить мёртвую инструкцию (FR-8) |
.openclaw/agents/tester.md |
изменить — расхардкод (FR-1/2); <escalation> (FR-5); worktree-путь + serial_gate smoke + покрытие ТЗ (FR-7) |
.openclaw/agents/deployer.md |
изменить — расхардкод (FR-1/2); рамка критичных запретов (FR-6); язык по решению ADR (FR-10) |
tests/test_agent_prompts_canon.py |
изменить — добавить TC анти-регресса новых инвариантов (FR-11) |
CLAUDE.md |
изменить — отразить ORCH-092 (норматив промптов), при необходимости |
docs/architecture/README.md |
изменить — when-applicable (если затрагивается обзорная карта) |
CHANGELOG.md |
изменить — запись под ## [Unreleased] |
docs/work-items/ORCH-092/06-adr/ADR-001-*.md |
создать (архитектор) — решения P1-2, P2-2 |
src/**, src/qg/checks.py, STAGE_TRANSITIONS, QG_CHECKS, схема БД |
НЕ трогать |
3. Функциональные требования
FR-1 — Расхардкод created_at в примерах (BR-1, P0-1)
Во всех 6 промптах в копируемом примере frontmatter заменить created_at: 2026-06-09 на
плейсхолдер created_at: <YYYY-MM-DD>. Рядом — явная инструкция (в <output_format>): «подставь
фактическую текущую дату (date +%F); НЕ копируй дату из примера буквально». Инвариант: имя поля
created_at остаётся (канон-тест проверяет наличие имени).
FR-2 — Расхардкод model_used в примерах (BR-2, P0-2)
Во всех 6 промптах в копируемом примере заменить model_used: claude-opus-4-8 на
model_used: <resolve ORCH-41> + оговорку «подставь фактическую модель из конфига, не копируй
буквально». Факт «сейчас claude-opus-4-8» допустимо оставить как справку в таблице полей
(вне копируемого блока). Инвариант: имя поля model_used остаётся.
FR-3 — Сверка имён гейтов с QG_CHECKS (BR-3, P0-3)
Пройти по каждому промпту, сверить все упомянутые check_*/имена QG-функций с реальным реестром
QG_CHECKS в src/qg/checks.py. Установленный факт: на момент анализа несовпадений НЕТ
(check_ci_green, check_reviewer_verdict, check_tests_passed, check_deploy_status,
check_staging_status, check_security_gate — все присутствуют в реестре; check_tests_passed
верен — подозрение было ложным). Требование: исправлять только реально несовпадающие имена
(не выдумывать); закрепить сверку воспроизводимым тестом (FR-11/TC-03).
FR-4 — «PR>1500» → эскалация (BR-4, P1-1)
В developer.md (секция <constraints>) заменить запрет «❌ Не делай PR > 1500 строк без
декомпозиции → ✅ разбивай на меньшие PR» на эскалацию: PR оказался слишком большим → флагируй/
эскалируй (задача слишком крупная, нужна декомпозиция на уровне задач, не внутри стадии;
1 задача = 1 ветка = 1 PR). Инвариант FR-6-анти-регресс: маркер «свой PR» («не мержи свой PR»)
сохраняется отдельно.
FR-5 — Секция <escalation> в developer/reviewer/tester (BR-5, P1-3)
Добавить секцию <escalation> (формат — как у architect.md, после </success_criteria>,
чтобы не нарушать нормативный порядок 5 обязательных секций):
- developer: негодное/нереализуемое ТЗ → вернуть в Анализ (
back-to:analysis); нужна новая архитектурная развилка → эскалация к архитектору. - tester: обоснованный FAIL → откат на development (
back-to:dev); смок-сбой инфраструктуры → зафиксировать как FAIL с диагностикой. - reviewer: любой P0/P1 →
REQUEST_CHANGES(единая точка); неоднозначность требований → finding со ссылкой на ТЗ/ADR.
Эскалационные строки консолидируют (не дублируют слепо) то, что было размазано по <constraints>.
FR-6 — Рамка критичных запретов в deployer (BR-6, P2-1)
В deployer.md вынести самые критичные self-hosting-запреты в видную рамку в начале (сразу
после frontmatter / в начале <context>), как минимум: «NEVER restart the prod orchestrator
(8500) container». Существующий blockquote усилить/поднять. Инвариант анти-регресса: маркеры
docker exec orchestrator-staging, pr_already_merged, 8500, INFRA-WAIVED сохраняются.
FR-7 — Обогащение tester (BR-7, P2-3)
В tester.md:
- worktree-путь: явно указать, что тесты гоняются в worktree ветки задачи (а не в общем
/repos/orchestrator), чтобы исключить гонки checkout; зафиксировать корректный путь алгоритма. - serial_gate smoke: в smoke
/queueдобавить проверку наличия блокаserial_gate(ORCH-088) в ответе. - покрытие ТЗ: в
<success_criteria>добавить, что готовность = каждый TC из04-test-plan.yamlвыполнен и сопоставлен с03-acceptance-criteria.md, а не только «файл записан». Инвариант анти-регресса: маркерыpytest,/health,/status,/queueсохраняются.
FR-8 — Удаление мёртвой инструкции reviewer (BR-8, P2-4)
В reviewer.md удалить строку-запрет «❌ Не апрувь PR от того же экземпляра Developer →
✅ выноси независимый вердикт» (защита от несуществующего кейса — reviewer всегда отдельный
agent-run). Перед удалением убедиться, что ни один тест на неё не опирается (анти-регресс reviewer
держит только REQUEST_CHANGES и «НЕ обновлена» — они сохраняются). Ось «независимый вердикт по
4 осям» остаётся выражена через <task>/<thinking>.
FR-9 — Ручной rebase developer по решению ADR (BR-9, P1-2) — зона архитектора
Установленный факт (A-2): движок уже выполняет rebase автоматически (auto_rebase_onto_main в
check_branch_mergeable, premerge_rebase_always=True; serial-gate режет ветку от свежего
origin/main). Требование: архитектор в ADR решает — убрать/смягчить/оставить-с-пояснением шаг
git fetch origin && git rebase origin/main в алгоритме developer; developer.md приводится в
соответствие. БЕЗ ADR-решения промпт-строку rebase не менять.
FR-10 — Язык deployer по решению ADR (BR-10, P2-2) — зона архитектора
Архитектор решает: унифицировать deployer на русский (как остальные 5) ЛИБО явно задокументировать
исключение («deployer — en по причине критичных команд/контрактов»). Инвариант: при любом исходе
machine-verdict ключи (staging_status:/deploy_status:/security_status: + значения
SUCCESS/FAILED/PASS/FAIL) и shell-команды НЕ переводятся/не ломаются. БЕЗ ADR-решения язык
не менять.
FR-11 — Анти-регресс-тесты новых инвариантов (BR-11)
В tests/test_agent_prompts_canon.py (pure-text, без импорта src/, кроме TC-03 сверки реестра)
добавить проверки: плейсхолдеры даты/модели в примерах (нет литерала created_at: 2026-/
model_used: claude-opus-4-8 в копируемом блоке); наличие <escalation> у developer/reviewer/
tester; отсутствие удалённой мёртвой строки reviewer; обогащение tester (serial_gate/worktree/
покрытие ТЗ); рамка в deployer. Существующие проверки (5 секций, 6 полей, verdict-ключи,
анти-регресс-маркеры) остаются зелёными.
4. Изменения API
Нет. Эндпоинты не добавляются и не меняются.
5. Изменения схемы БД
Нет. Схема БД не трогается.
6. Требования к новым/изменённым QG checks
Нет. QG_CHECKS / check_* / STAGE_TRANSITIONS не трогаются. Имена гейтов в промптах лишь
сверяются с существующим реестром (FR-3). frontmatter_validation_strict остаётся False
(enforcement не включается).
7. Совместимость / регресс
- Машинные verdict-ключи — байт-в-байт:
verdict:(APPROVED|REQUEST_CHANGES),result:(PASS|FAIL),staging_status:/deploy_status:(SUCCESS|FAILED),security_status:(PASS|FAIL). Гарант —test_machine_verdict_keys_preserved_exact_case. - Канон 52d/52c/52e — 5 секций в нормативном порядке (context→task→deliverables→constraints→
output_format), 6 полей схемы, правило трассировки.
<escalation>добавляется как 6-я необязательная секция ПОСЛЕ</output_format>/</success_criteria>— порядок обязательной пятёрки не нарушается. Гаранты —test_five_xml_sections_present,test_six_schema_field_names_present,test_schema_pins_role_specific_author_and_stage. - Frontmatter определения агента — верхний
----блок (name/description, безmodel:) не трогается; примеры схемы живут в теле. Гарант —tests/test_agent_frontmatter_no_model.py. - Область раската / обратимость — docs/prompts-only; вступает в силу на следующем worktree
от
main; прод-рестарт НЕ требуется; полностью ревертируемо одним PR. - Полный регресс
pytest tests/ -qостаётся зелёным.
8. Артефакты pipeline, создаваемые/обновляемые этой задачей
- Анализ (этот пакет):
01-brd.md,02-trz.md,03-acceptance-criteria.md,04-test-plan.yaml. - Архитектура:
06-adr/ADR-001-*.md(решения P1-2 FR-9, P2-2 FR-10), при сквозном эффекте — возможный10-tech-risks.md. - Разработка: 6 промптов +
tests/test_agent_prompts_canon.py+CLAUDE.md/README/CHANGELOG.md.