6.8 KiB
BRD — ORCH-074: фикс модели агентов (мёртвый frontmatter → валидация имени)
Work Item ID: ORCH-074 Эпик: ORCH-052 (слой 3), под-задача ORCH-52a Приоритет: urgent Тип: доработка механизма выбора модели агентов (self-modifying).
0. История ревизий
- rev.1 (08.06): первичный пакет аналитики по фиксированному скоупу Славы.
- rev.2 (08.06, текущая): задача возвращена стейкхолдером в In Progress.
Проверены последние комментарии и описание issue в Plane — НОВЫХ субстантивных
ответов/изменений скоупа нет (только bot-комменты + служебный маркер
«Агент перезапущен с ответами стейкхолдера»). Скоуп остаётся прежним
(G1 + G2 + опц. G4; G3 снят; эффорт не трогаем). Пакет переподтверждён против
фактического кода (
launcher.py,config.py); уточнён код-факт по G4: fallback читается напрямую наlauncher.py:374мимоresolve_agent_model, поэтому валидация G2 должна покрыть и fallback (детали — ТЗ §4, AC-5, TC-11).
1. Контекст и проблема
Каркас выбора модели агентов реализован в ORCH-041 и работает корректно:
src/agents/launcher.py::resolve_agent_model(agent, project_id) резолвит модель
по приоритету project-override → ORCH_AGENT_MODEL_<AGENT> → agent_model_default
→ CLI-дефолт. Все 6 агентов сейчас резолвятся в claude-opus-4-8 (через
agent_model_default).
Аудит кода (08.06) выявил два дефекта данных/валидации (НЕ дефект механизма):
-
P1. Лживый/мёртвый
model:во frontmatter.openclaw/agents/*.md. Все 6 промптов содержатmodel:в YAML-frontmatter:claude-sonnet-4-6(analyst, developer, tester, deployer) иclaude-opus-4-7(architect, reviewer). launcher НЕ читает frontmattermodel:— это мёртвая декларация, которая лжёт о реально используемой модели и нарушает принцип «документация = golden source». Мина: если кто-то «починит» launcher читать frontmatter → все агенты молча упадут на устаревшие модели. -
P2. Нет валидации ИМЕНИ модели. В отличие от effort (есть
VALID_EFFORTS-гард, невалидный effort логируется и дропается), имя модели не валидируется. Опечатка вagent_model_*/ project-override →--model <мусор>→ CLI падает или тихо деградирует. Нарушение принципа never-break.
2. Решение Славы (08.06) — фиксированный скоп
G3 model-routing НЕ включаем — ВСЕ 6 агентов остаются на
claude-opus-4-8. Скоп: G1 (убрать лживыйmodel:из frontmatter) + G2 (валидация имени модели, never-break) + опц. G4 (fallback_model— на усмотрение архитектора, НЕ routing). Эффорт НЕ трогать. AC-4 (routing) снят.
3. Бизнес-цели
| ID | Цель | Драйвер |
|---|---|---|
| G1 | Устранить лживый frontmatter: убрать model: из всех 6 .openclaw/agents/*.md. config — единственный источник правды модели. |
Наблюдаемость (frontmatter не лжёт) |
| G2 | Добавить валидацию имени модели: невалидное имя → лог + откат на default, никогда не передаётся в --model. |
Надёжность (never-break) |
| G4 | (опц., решает архитектор) Задать agent_fallback_model для страховки доступности. |
Надёжность (availability) |
4. Не-цели (явно вне скоупа)
- G3 routing НЕ включаем. Все 6 агентов остаются
claude-opus-4-8. AC-4 снят. - Эффорт НЕ трогать — уже корректно настроен (
thinking → high,tester/deployer → medium). - Не менять resolve-механизм ORCH-041 — он корректен. Меняются только данные (frontmatter, опц. config) + добавляется валидация.
- Не трогать non-self поведение — per-project override (
projects.py agent_models) для enduro-trails остаётся рабочим.
5. Заинтересованные стороны
- Owner (Слава) — зафиксировал скоп; деплой через штатный «Confirm Deploy».
- Агенты оркестратора — потребители resolve-механизма (self-hosting).
- Проект enduro-trails — НЕ должен пострадать (общий инстанс/БД/очередь).
6. Риски и инварианты
- Self-hosting: изменение применяется к БУДУЩИМ запускам агентов. НЕ ломать текущий конвейер; не ронять прод-контейнер. Деплой только через «Confirm Deploy».
- never-break: невалидная модель/эффорт НЕ должны ронять запуск агента — деградация на default/CLI-дефолт + лог.
- frontmatter автогенерация: убедиться, что инструмент (если автогенерит
frontmatter) не вернёт
model:обратно. Frontmatter остаётся описательным (name/description/tools). - enduro per-project override не должен сломаться валидацией (валидные имена проходят без изменения поведения).
7. Бизнес-эффект
- Frontmatter перестаёт лгать → меньше риск «починки», ломающей агентов.
- Опечатка в имени модели больше не роняет/деградирует запуск агента.
- (опц.) fallback повышает доступность при перегрузке основной модели.