Files
orchestrator/docs/work-items/ORCH-074/03-acceptance-criteria.md

82 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Критерии приёмки — ORCH-074
Work Item ID: ORCH-074
Скоп (Слава 08.06): G1 + G2 + опц. G4. **G3 routing снят — AC-4 не применяется.**
Каждый критерий: чёткое условие PASS/FAIL.
---
## AC-1 — frontmatter `model:` убран из всех 6 промптов (G1)
- **PASS:** ни один файл `.openclaw/agents/*.md` не содержит строки `^model:` в
frontmatter. Команда `grep -L "^model:" .openclaw/agents/*.md` возвращает все 6
файлов (analyst, architect, developer, reviewer, tester, deployer).
- **FAIL:** хотя бы в одном файле осталась строка `model:`.
- Доп. инвариант: frontmatter остаётся валидным YAML; ключи `name`/`description`/`tools`
сохранены.
## AC-2 — валидация имени модели, never-break (G2)
- **PASS:** при невалидном `agent_model_*` / project-override (мусорное имя)
`resolve_agent_model` возвращает откат на default (или `""`), пишет
`logger.warning`, и мусор **никогда** не попадает в `--model`. Покрыто
unit-тестом с мусорным именем (см. `04-test-plan.yaml`, TC-03..TC-05).
- **FAIL:** мусорное имя проходит насквозь в `--model`, или валидация роняет
запуск агента (исключение вместо graceful-деградации).
## AC-3 — resolve_agent_model осмыслен для всех 6 агентов
- **PASS:** для каждого из 6 агентов `resolve_agent_model(agent)` (без
project_id) возвращает `claude-opus-4-8` (routing G3 выключен → intelligence-
модель для всех). Значение документировано в README (таблица env) и `.env.example`.
- **FAIL:** хотя бы один агент резолвится в пустую/невалидную/устаревшую модель,
либо документация не отражает фактическую модель.
## AC-4 — routing (G3) — **СНЯТ (N/A)**
- Routing НЕ включается в этой задаче. Критерий не применяется. ADR фиксирует
отказ от G3 как осознанное решение Славы (08.06).
## AC-5 — fallback_model (G4, опционально)
- **PASS (если G4 включён):** `agent_fallback_model` задан каноничным именем,
проходит валидацию 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 задан невалидным именем, ИЛИ невалидный fallback проходит в
`--fallback-model`, ИЛИ включён без документации/ADR.
## AC-6 — синхронизация документации
- **PASS:** `docs/architecture/README.md`, `CLAUDE.md`, `.env.example`
синхронизированы — таблица «модель по ролям» актуальна (все = `claude-opus-4-8`);
НЕТ упоминаний `claude-sonnet-4-6` / `claude-opus-4-7` как «модели агента»
(если они не используются). `.env.example` содержит блок
`ORCH_AGENT_MODEL_*` / `ORCH_AGENT_EFFORT_*` / `ORCH_AGENT_FALLBACK_MODEL`.
- **FAIL:** документация противоречит config, или остались мёртвые упоминания
sonnet/opus-4-7 как модели агента.
## AC-7 — pytest зелёный + never-break
- **PASS:** `pytest tests/ -q` зелёный. Невалидная модель/эффорт НЕ роняет запуск
агента (graceful-деградация подтверждена тестами).
- **FAIL:** падают тесты, или невалидный вход роняет запуск.
## AC-8 — enduro per-project override не сломан
- **PASS:** валидный per-project override (`projects.py agent_models`) для не-self
проекта (enduro) резолвится и проходит валидацию без изменения поведения
(покрыто существующими тестами `test_resolve_agent_model.py`).
- **FAIL:** валидация ломает корректный per-project override.
## AC-9 — ADR зафиксирован
- **PASS:** ADR в `06-adr/` фиксирует: (а) выбран вариант G1 «убрать frontmatter»
(не «читать»); (б) предикат валидации G2 (формат-чек vs allowlist) с обоснованием;
(в) решение по G4 (вкл/выкл) и по отказу от G3.
- **FAIL:** ADR отсутствует или не покрывает эти решения.