architect(ET): auto-commit from architect run_id=460

This commit is contained in:
2026-06-09 14:48:03 +03:00
committed by orchestrator-deployer
parent bd5d681083
commit b21e9d8898
5 changed files with 362 additions and 0 deletions

View File

@@ -57,6 +57,32 @@ created → analysis → architecture → development → review → testing →
детально — `docs/work-items/ORCH-075/06-adr/ADR-001-pipeline-docs-standard.md`,
`docs/work-items/ORCH-076/06-adr/ADR-001-frontmatter-contract.md`.
#### Слой промптов: канон Anthropic + эмиссия схемы 52c (ORCH-077, 52d — замыкает эпик 52)
**Слой 3 (промпты).** 52b дал описательный стандарт, 52c — машинный контракт (writer + валидатор
`REQUIRED_FIELDS`), но валидатор работал warning-only «вхолостую»: 6 системных промптов
`.openclaw/agents/*.md` **не эмитили** поля схемы. ORCH-077 учит все 6 промптов эмитить схему и
переписывает их в едином **каноне Anthropic** — замыкающее звено эпика. Это **docs/prompts-only**
изменение: `src/**`, `STAGE_TRANSITIONS`, `QG_CHECKS`, состав machine-verdict ключей и схема БД —
**не трогаются**; `frontmatter_validation_strict` остаётся `False` (эмиссия **добровольная**,
enforcement не включается).
- **Фиксированный XML-скелет (5 обязательных секций, нормативный порядок):** `<context>``<task>`
(+ опц. `<thinking>` у решающих ролей) → `<deliverables>``<constraints>` (запреты в формате
«❌ X → ✅ Y») → `<output_format>`. Доп. секции (`<success_criteria>`/`<escalation>`) — после.
- **Аддитивная схема 52c:** `<output_format>` каждого промпта перечисляет 6 полей
(`work_item`/`stage`/`author_agent`/`status`/`created_at`/`model_used`) с роле-специфичными
значениями и ставит их **рядом** с machine-verdict ключом, **не меняя его имя/регистр/значения**
(`verdict:`/`result:`/`staging_status:`/`deploy_status:`/`security_status:` — байт-в-байт). Гейты
читают вердикты как раньше (NFR-1). Для `04-test-plan.yaml` (чистый YAML) — top-level ключи.
- **Loading-model (важно для self-hosting):** промпт `cat`-ается из git-worktree агента в момент
запуска (`launcher` `--system-prompt "$(cat .openclaw/agents/<role>.md)"`), НЕ запекается в образ →
новые промпты вступают в силу на следующем worktree от `main` **без прод-рестарта**; reviewer/tester
той же задачи исполняются уже под новыми промптами (естественный in-vivo A/B, BR-6).
- **Анти-регресс:** структурные тесты `tests/test_agent_prompts_canon.py` (5 секций, 6 полей, точный
регистр verdict-ключей, self-hosting-маркеры deployer'а); `test_agent_frontmatter_no_model.py`
остаётся зелёным. **Норматив на будущее:** новые/изменённые агент-промпты следуют этому канону.
- ADR: [adr-0021](adr/adr-0021-prompt-canon-anthropic.md); детально —
`docs/work-items/ORCH-077/06-adr/ADR-001-anthropic-prompt-canon.md`.
### Модель и эффорт по ролям (ORCH-41, валидация ORCH-74)
Модель и `--effort` каждого агента берутся из config (`src/config.py`), резолвятся `launcher.resolve_agent_model` / `resolve_agent_effort` по приоритету **project-override (`projects_json` `agent_models`/`agent_efforts`) > `ORCH_AGENT_MODEL_<AGENT>`/`ORCH_AGENT_EFFORT_<AGENT>` > `*_default` > CLI-дефолт (без флага)**. **Эффорт (ORCH-081):** ниже `*_default` добавлен непустой **per-role floor** — class-default поля `agent_effort_<role>` из `config.py` (его пустой env перебить не может). Floor — строго последний уровень (ниже default) и срабатывает ТОЛЬКО когда все уровни пусты, поэтому пустые прод-`ORCH_AGENT_EFFORT_*=` (которые pydantic трактует как явное `''` и обнуляют дефолт) больше не приводят к запуску без `--effort`: каждая роль получает свой канонический пол (developer=`xhigh`, tester/deployer=`medium`, прочие=`high`). Непустой явный конфиг по-прежнему побеждает floor; опечатка вне `VALID_EFFORTS` дропается валидацией ДО floor (never-break, не маскируется). См. `docs/work-items/ORCH-081/06-adr/ADR-001-effort-resolution-floor.md`. frontmatter `model:` в `.openclaw/agents/*.md` **удалён** (ORCH-74 G1) — он был мёртвой/лживой декларацией (launcher его не читает); config — единственный источник правды о модели. Model-routing (G3) НЕ включён — все 6 агентов на `claude-opus-4-8`.