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

5.3 KiB
Raw Permalink Blame History

Критерии приёмки — 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 отсутствует или не покрывает эти решения.