architect(ET): auto-commit from architect run_id=727
All checks were successful
CI / test (push) Successful in 1m7s

This commit is contained in:
2026-06-15 23:56:27 +03:00
parent 70171eb1c1
commit 7597804f8c
4 changed files with 480 additions and 0 deletions

View File

@@ -416,6 +416,34 @@ ORCH-079 синхронизирует витрину с кодом и закры
- ADR: [adr-0023](adr/adr-0023-overview-docs-reviewer-axis-and-epic52-close.md); детально —
`docs/work-items/ORCH-079/06-adr/ADR-001-readme-sync-and-reviewer-overview-docs-axis.md`.
#### Карта LLM-консультаций + политика использования LLM (ORCH-118 — design)
Зонтичный follow-up RCA-трека ORCH-114/117: оркестратор не имел нормативного критерия «где LLM нужен,
а где это avoidable control path» и карты мест вызова LLM, прибитой к коду. ORCH-118 — **inventory +
карта + roadmap + политика + структурные тесты** (реализация детерминированных раннеров — follow-up'ы
**по роли**, без выдуманных Plane-ID). Это **docs + tests only**: `STAGE_TRANSITIONS` / реестр и имена
`QG_CHECKS`/`check_*` / machine-verdict-ключи / схема БД — **байт-в-байт не тронуты**; kill-switch не
нужен (нет рантайм-поведения), как ORCH-077/079/101/102/103/011.
- **Три ортогональных оси (ground-truth — код):** (1) consultation ≠ transport/slot (единственный
транспорт LLM-консультации в `src/**` — `launcher._spawn`, `launcher.py:472/610-614`; иного нет;
D1/D2 `deploy-finalizer`/`post-deploy-monitor` занимают слот, но перехватываются в `launch_job` до
`_spawn`, `launcher.py:389/394` — консультации нет); (2) **control-path (C) ≠ artifact-producer (P)**
по коду-потребителю в `src/qg/checks.py` (C: `check_*` ветвится на LLM-вердикте; P: детерминированный
гейт судит артефакт независимо — файлы/CI); (3) деривируемость вердикта из tool-сигналов.
- **Нормативное определение** «avoidable LLM control path» = двухбитный предикат: C-консультация **И**
вердикт деривируем из tool-сигналов. Целевой набор (поимённо, доказательно): **avoidable =
{tester, deployer}**; control-path-но-keep = `{reviewer}`; не-control-path (P, keep) =
`{analyst, architect, developer}`; уже детерминированы = `{deploy-finalizer, post-deploy-monitor}`.
- **Документы (durable, `docs/architecture/`):** `llm-call-sites.md` (карта + control-path-разметка +
классификация, снимок, прибитый тестами), `llm-determinization-roadmap.md` (порядок замен; первый
срез — **deployer staging-status**, чистый маппинг exit-кода `staging_check.py`; прод уже
детерминирован Phase A/B/C ORCH-036), `llm-usage-policy.md` (нормативный принцип «LLM — только где
нужно настоящее суждение»). Анти-дрейф — `tests/test_llm_call_site_inventory.py` (offline; включая
control-path-инвариант сверки с `src/qg/checks.py` и фиксацию avoidable-набора).
- **Норматив сопровождения:** менял места вызова LLM **или** потребителя вердикта в `src/qg/checks.py`
→ обнови карту/разметку и политику в том же PR.
- ADR: [adr-0047](adr/adr-0047-llm-usage-policy-and-call-site-map.md); детально —
`docs/work-items/ORCH-118/06-adr/ADR-001-llm-call-site-map-and-determinization-roadmap.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`.