--- type: test-report work_item_id: ORCH-066 result: PASS --- # Test Report — ORCH-066 Осмысленная статусная модель Plane (слой B — индикация). Прогон полного регресса + покрытие тест-плана `04-test-plan.yaml` + проверка инвариантов слоя A. ## Окружение - Python: 3.12.13 - pytest: 8.3.3 - Ветка: feature/ORCH-066-plane - Дата: 2026-06-07 ## Результаты по тест-плану (04-test-plan.yaml) | TC ID | Покрывает | Описание | Модуль | Результат | |-------|-----------|----------|--------|-----------| | TC-01 | AC-1 | To Analyse без task → start_pipeline | test_status_trigger.py | PASS | | TC-02 | AC-2,BR-11 | To Analyse resume аналитика, без двойного task | test_plane_to_analyse_resume.py | PASS | | TC-03 | AC-3 | Старт/relaunch → статус Analysis | test_plane_status_model.py | PASS | | TC-04 | AC-4 | Busy-guard: active-job → не relaunch | test_plane_to_analyse_resume.py | PASS | | TC-05 | AC-5 | review → статус Code-Review | test_plane_status_model.py | PASS | | TC-06 | AC-6,AC-13 | Phase A → Awaiting Deploy (не In Review) | test_deploy_approve.py | PASS | | TC-07 | AC-7 | Phase B → Deploying | test_deploy_approve.py | PASS | | TC-08 | AC-8 | Phase C self → Monitoring after Deploy | test_deploy_terminal_sync.py | PASS | | TC-09 | AC-9 | Не-self deploy→done → Done (без регресса) | test_deploy_terminal_sync.py | PASS | | TC-10 | AC-10 | Post-deploy HEALTHY → Done | test_post_deploy.py | PASS | | TC-11 | AC-11 | Post-deploy DEGRADED → Blocked | test_post_deploy.py | PASS | | TC-12 | AC-12 | Self-тик не рестартит прод | test_post_deploy.py | PASS | | TC-13 | AC-13 | In Review только за approve-pending | test_analyst_status_only_regression.py | PASS | | TC-14 | AC-14,BR-10 | Needs Input без изменений | test_plane_status_model.py | PASS | | TC-15 | AC-15 | Cancelled → нет действий конвейера | test_plane_webhook.py | PASS | | TC-16 | AC-16,BR-12 | Fail-closed default-алиасы, нет исключений | test_plane_status_failclosed.py | PASS | | TC-17 | AC-16 | Plane API down → fallback, never-raise | test_plane_status_failclosed.py | PASS | | TC-18 | AC-17 | enduro In Progress стартует через алиас | test_plane_status_failclosed.py | PASS | | TC-19 | AC-18 | Резолв по имени → корректный UUID | test_orch10_states.py | PASS | | TC-20 | AC-19 | F-2 реконсилирует To Analyse | test_reconciler_plane.py | PASS | | TC-21 | AC-20,BR-13 | Guard 2 skip активных ожиданий | test_reconciler.py | PASS | | TC-22 | AC-21 | STAGE_TRANSITIONS не изменён | test_plane_status_model.py | PASS | | TC-23 | AC-22 | QG_CHECKS/check_deploy_status не изменены | test_plane_status_model.py | PASS | | TC-24 | AC-23 | Полный регресс pytest зелёный | tests/ | PASS | Все 24 тест-кейса — PASS. ## Инварианты слоя A (AC-21 / AC-22) Diff против `origin/main` (merge-base `4815e378`): - `src/stages.py` (STAGE_TRANSITIONS) — diff пуст ✔ - `src/qg/checks.py` (QG_CHECKS, check_deploy_status) — diff пуст ✔ - `src/config.py` (без kill-switch) — diff пуст ✔ ## Smoke test API (TestClient — прод-контейнер 8500 не трогался) > `curl` в окружении недоступен; smoke прогнан через FastAPI TestClient (lifespan), > без рестарта/обращения к прод-контейнеру (self-hosting safety). | Endpoint | Статус | Тело (фрагмент) | |----------|--------|-----------------| | GET /health | 200 | `{"status":"ok","service":"orchestrator"}` | | GET /status | 200 | `{"active_tasks":[...]}` | | GET /queue | 200 | `{"counts":{...},"max_concurrency":1,...}` | ## Вывод pytest ``` ======================= 774 passed, 1 warning in 17.68s ======================== ``` (единственный warning — PydanticDeprecatedSince20 в src/config.py, предсуществующий, не связан с ORCH-066) Прогон по модулям тест-плана: `117 passed` (ORCH-066-специфичные файлы). ## Итог PASS — все тесты зелёные (774 passed), все 24 TC покрыты, инварианты слоя A сохранены (diff пуст), smoke-эндпоинты отвечают 200. Review-вердикт APPROVED. Задача готова к переходу на стадию deploy-staging.