analyst(ET): auto-commit from analyst run_id=393
This commit is contained in:
@@ -5,6 +5,18 @@ Work Item ID: ORCH-074
|
||||
Приоритет: **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 и **работает корректно**:
|
||||
|
||||
@@ -49,6 +49,11 @@ grep -L "^model:" .openclaw/agents/*.md # должны вернуться ВС
|
||||
формат-чек `claude-*` (forward-compatible — новые версии моделей не требуют
|
||||
правки allowlist) ЛИБО явный `VALID_MODELS` allowlist (строже, но требует
|
||||
поддержки при выходе новых моделей). **Выбор и обоснование — в ADR.**
|
||||
- **Рекомендация аналитика (форма):** оформить предикат как отдельный
|
||||
чистый helper (напр. `is_valid_model(name) -> bool` рядом с `VALID_EFFORTS`),
|
||||
а не инлайнить в `resolve_agent_model` — тогда ОДИН валидатор переиспользуется
|
||||
и резолвом модели, и чтением fallback (G4, см. §4). Финальная форма — за
|
||||
архитектором.
|
||||
- Инвариант обратной совместимости: ВСЕ ныне используемые валидные имена
|
||||
(`claude-opus-4-8`, а также enduro per-project override) проходят валидацию
|
||||
без изменения поведения. Невалидным считается только мусор (опечатка,
|
||||
@@ -60,8 +65,16 @@ grep -L "^model:" .openclaw/agents/*.md # должны вернуться ВС
|
||||
|
||||
- `src/config.py::agent_fallback_model` сейчас `""` (флаг не прокидывается).
|
||||
- Если архитектор решит включить — задать каноничное имя модели; launcher уже
|
||||
прокидывает его в `--fallback-model` (строки 374-375 launcher.py). Имя fallback
|
||||
ТОЖЕ должно проходить валидацию G2 (или быть гарантированно валидным).
|
||||
прокидывает его в `--fallback-model` (`launcher.py:374-375`, попадает в cmd
|
||||
на строке 388).
|
||||
- **⚠️ Код-факт (проверено 08.06):** fallback читается НАПРЯМУЮ —
|
||||
`fb = settings.agent_fallback_model` (`launcher.py:374`) — и **НЕ проходит**
|
||||
через `resolve_agent_model`, значит валидация G2, добавленная внутри
|
||||
`resolve_agent_model`, его НЕ покроет. Следствие для архитектора: если G4
|
||||
включается, валидацию имени модели (G2) надо применить ТАКЖЕ к fallback на
|
||||
его месте чтения (или вынести валидатор в отдельный helper, который вызывают
|
||||
ОБА: и резолв модели, и чтение fallback). Иначе опечатка в `agent_fallback_model`
|
||||
обходит G2 и уезжает в `--fallback-model` — нарушение never-break.
|
||||
- Если архитектор решит НЕ включать — оставить `""`, AC-5 помечается N/A в ADR.
|
||||
|
||||
## 5. Изменения API / схемы БД
|
||||
|
||||
@@ -41,11 +41,14 @@ Work Item ID: ORCH-074
|
||||
## AC-5 — fallback_model (G4, опционально)
|
||||
|
||||
- **PASS (если G4 включён):** `agent_fallback_model` задан каноничным именем,
|
||||
проходит валидацию G2, прокидывается в `--fallback-model` (launcher 374-375),
|
||||
задокументирован.
|
||||
проходит валидацию G2, прокидывается в `--fallback-model` (launcher 374-375).
|
||||
Доп. инвариант never-break: МУСОРНЫЙ fallback НЕ попадает в `--fallback-model`
|
||||
(валидируется тем же предикатом G2; учтено, что fallback читается напрямую на
|
||||
`launcher.py:374`, минуя `resolve_agent_model` — см. TRZ §4). Задокументирован.
|
||||
- **PASS (если G4 НЕ включён):** `agent_fallback_model = ""`, ADR явно фиксирует
|
||||
отказ; AC-5 помечен N/A.
|
||||
- **FAIL:** fallback задан невалидным именем, ИЛИ включён без документации/ADR.
|
||||
- **FAIL:** fallback задан невалидным именем, ИЛИ невалидный fallback проходит в
|
||||
`--fallback-model`, ИЛИ включён без документации/ADR.
|
||||
|
||||
## AC-6 — синхронизация документации
|
||||
|
||||
|
||||
@@ -82,6 +82,17 @@ tests:
|
||||
module: tests/test_resolve_agent_model.py
|
||||
expected: PASS
|
||||
|
||||
# ---- G4 never-break: fallback читается напрямую (launcher.py:374), мимо
|
||||
# resolve_agent_model — валидация G2 должна покрыть и его (см. TRZ §4) ----
|
||||
- id: TC-11
|
||||
type: unit
|
||||
description: >
|
||||
ЕСЛИ G4 включён: мусорное agent_fallback_model НЕ попадает в --fallback-model
|
||||
(валидируется тем же предикатом G2, дропается с warning, never-break).
|
||||
ЕСЛИ G4 выключен: кейс помечается N/A в test-report (синхронно с ADR).
|
||||
module: tests/test_resolve_agent_model.py
|
||||
expected: PASS
|
||||
|
||||
# ---- AC-7: общий зелёный прогон / never-break regression ----
|
||||
- id: TC-10
|
||||
type: integration
|
||||
|
||||
Reference in New Issue
Block a user