diff --git a/docs/work-items/ORCH-074/13-test-report.md b/docs/work-items/ORCH-074/13-test-report.md new file mode 100644 index 0000000..59d9a10 --- /dev/null +++ b/docs/work-items/ORCH-074/13-test-report.md @@ -0,0 +1,82 @@ +--- +type: test-report +work_item_id: ORCH-074 +result: PASS +--- + +# Test Report — ORCH-074 + +Убрать мёртвый frontmatter `model:` из 6 промптов + валидация имени модели (never-break). +Скоп: G1 + G2 + опц. G4 (выключен). G3 routing снят. Review-вердикт: APPROVED. + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 +- Ветка: feature/ORCH-074-orch-52a-frontmatter-routing-e (worktree) +- prod health (8500): `{"status":"ok","service":"orchestrator"}` +- Дата: 2026-06-08 + +## Результаты по тест-плану (04-test-plan.yaml) + +| TC ID | Описание | Тест | Результат | +|-------|----------|------|-----------| +| TC-01 | Ни один `.openclaw/agents/*.md` не содержит `^model:` (G1, AC-1) | test_no_model_line_in_frontmatter[×6] | PASS | +| TC-02 | frontmatter валидный YAML, ключи name/description сохранены | test_frontmatter_still_valid_yaml_with_keys[×6] | PASS | +| TC-03 | Мусорный `agent_model_` → откат на default, warning, мусор не в `--model` | test_garbage_per_agent_env_falls_back_to_default | PASS | +| TC-04 | Мусорный project-override → откат на default | test_garbage_project_override_falls_back_to_default | PASS | +| TC-05 | Невалидны override И default → `""` (CLI-дефолт), без исключения | test_all_levels_invalid_returns_empty | PASS | +| TC-06 | Валидное `claude-opus-4-8` проходит без изменения (регрессия ORCH-041) | test_valid_canonical_unchanged | PASS | +| TC-07 | Все 6 агентов резолвятся в `claude-opus-4-8` (routing выкл) | test_all_six_agents_resolve_to_opus_4_8 | PASS | +| TC-08 | Валидный enduro per-project override не сломан валидацией | test_valid_per_project_override_unchanged | PASS | +| TC-09 | G4 выключен: `agent_fallback_model == ""` (дефолт) | test_fallback_model_disabled_by_default | PASS | +| TC-10 | Полный pytest зелёный; never-break graceful-деградация | tests/ (1012 passed) | PASS | +| TC-11 | G4 never-break (мусорный fallback не в `--fallback-model`) | — | N/A (G4 выключен, синхр. с ADR/AC-5) | + +Доп. предикат-юниты: `test_is_valid_model_accepts_canonical`, `test_is_valid_model_rejects_garbage` — PASS. + +## Проверка критериев приёмки + +| AC | Статус | Подтверждение | +|----|--------|---------------| +| AC-1 frontmatter `model:` убран | PASS | `grep -L "^model:" .openclaw/agents/*.md` → все 6 файлов; `grep -rn "^model:"` → пусто | +| AC-2 валидация never-break | PASS | TC-03..05 | +| AC-3 все 6 → `claude-opus-4-8` | PASS | TC-07 | +| AC-4 routing G3 | N/A | снят решением (ADR) | +| AC-5 fallback G4 | PASS | G4 выключен, `agent_fallback_model=""`, ADR фиксирует отказ (TC-09) | +| AC-6 синхронизация доков | PASS | проверено reviewer (README/CLAUDE.md/.env.example) | +| AC-7 pytest зелёный | PASS | 1012 passed | +| AC-8 enduro override | PASS | TC-08 | +| AC-9 ADR | PASS | 06-adr/ADR-001 присутствует | + +## Smoke test API (prod, read-only) +``` +GET /health → HTTP 200 {"status":"ok","service":"orchestrator"} +GET /status → HTTP 200 +GET /queue → HTTP 200 +``` + +## Вывод pytest +``` +$ python -m pytest tests/ -q +1012 passed, 1 warning in 22.07s + +$ python -m pytest tests/test_agent_frontmatter_no_model.py tests/test_resolve_agent_model.py -v +32 passed, 1 warning in 0.37s +``` +(1 warning — PydanticDeprecatedSince20 в `src/config.py:5`, существующий, вне скоупа задачи.) + +## AC-1 grep-проверка +``` +$ grep -L "^model:" .openclaw/agents/*.md +.openclaw/agents/analyst.md +.openclaw/agents/architect.md +.openclaw/agents/deployer.md +.openclaw/agents/developer.md +.openclaw/agents/reviewer.md +.openclaw/agents/tester.md +$ grep -rn "^model:" .openclaw/agents/*.md # пусто (exit 1) +``` + +## Итог +**PASS** — все применимые тест-кейсы (TC-01..10) зелёные, TC-11 корректно N/A (G4 выключен), +все AC выполнены (AC-4 — N/A по скоупу), smoke API OK. Задача готова к стадии deploy-staging.