---
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_<agent>` → откат на 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.
