--- type: test-report work_item_id: ORCH-089 result: PASS --- # Test Report — ORCH-089 Авто-режим по лейблам: autoApprove (авто-BRD) + autoDeploy (авто-деплой). ## Окружение - Python: 3.12.13 - pytest: 8.3.3 - Branch: feature/ORCH-089-autoapprove-brd-autodeploy - Дата: 2026-06-09 ## Предусловия - Review verdict: **APPROVED** (`12-review.md`, P0/P1 — нет). - Prod health (8500): `{"status":"ok"}` — конвейер всех проектов жив, деструктивные операции не выполнялись. ## Результаты (test-plan `04-test-plan.yaml`) Все 26 TC из плана покрыты 43 целевыми тестами (7 модулей). Сопоставление с критериями приёмки (`03-acceptance-criteria.md`): | TC ID | Описание | AC | Результат | |-------|----------|-----|-----------| | TC-01 | has_label=True когда лейбл присутствует | AC-1 | PASS | | TC-02 | has_label=False когда лейбла нет | AC-4 | PASS | | TC-03 | has_label при ошибке Plane/таймауте → fail-safe, never-raise | AC-6 | PASS | | TC-04 | Нормализация имени лейбла; неоднозначность → нет авто | AC-6 | PASS | | TC-05 | applies: scope CSV + self-hosting; пустой scope по дефолту | AC-8 | PASS | | TC-06 | auto_label_enabled=False → нет авто без сетевых вызовов | AC-8 | PASS | | TC-07 | fetch_issue_labels парсит labels + резолв uuid→имя | AC-1 | PASS | | TC-08 | Карта лейблов проекта кэшируется с TTL | AC-8 | PASS | | TC-09 | set_issue_approved PATCH в Approved-UUID; never-raise | AC-1 | PASS | | TC-10 | autoApprove → авто-advance analysis→architecture, Approved, клок закрыт | AC-1 | PASS | | TC-11 | Без лейбла autoApprove → In Review, return без advance | AC-4 | PASS | | TC-12 | autoApprove без артефактов → НЕ advance | AC-5 | PASS | | TC-13 | autoApprove через тот же advance-путь; идемпотентно | AC-1 | PASS | | TC-14 | autoApprove: лог + Telegram/карточка + Plane-коммент | AC-7 | PASS | | TC-15 | autoDeploy + Phase A → авто _handle_self_deploy_phase_b | AC-2 | PASS | | TC-16 | Без лейбла autoDeploy → Awaiting Deploy, ждёт человека | AC-4 | PASS | | TC-17 | autoDeploy идемпотентен: маркер INITIATED → no-op | AC-2 | PASS | | TC-18 | autoDeploy не-self/вне scope → no-op | AC-8 | PASS | | TC-19 | autoDeploy: лог + Telegram + Plane-коммент | AC-7 | PASS | | TC-20 | Только autoApprove: BRD авто, деплой ждёт человека | AC-9 | PASS | | TC-21 | Только autoDeploy: BRD ждёт человека, деплой авто | AC-9 | PASS | | TC-22 | auto_label_enabled=False → оба гейта ручные | AC-8 | PASS | | TC-23 | Оба лейбла + зелёные тех-гейты → analysis→deploy автономно | AC-3 | PASS | | TC-24 | autoDeploy + красный staging/merge-gate → Phase B НЕ инициирован | AC-5 | PASS | | TC-25 | Регресс: без лейблов оба гейта как до ORCH-089 | AC-4 | PASS | | TC-26 | Инвариант: STAGE_TRANSITIONS и QG_CHECKS не изменены | AC-10 | PASS | ## Smoke test API (prod 8500) - `GET /health` → `{"status":"ok","service":"orchestrator"}` — OK - `GET /status` → 200, активные задачи перечислены (ORCH-089 = `testing`) — OK - `GET /queue` → 200, блоки наблюдаемости присутствуют — OK > Примечание: блок `auto_labels` в `GET /queue` на 8500 пока отсутствует — это ожидаемо: > прод-контейнер исполняет код до ORCH-089 (задача ещё в `testing`, не задеплоена). > Блок добавляется кодом ветки и покрыт юнит-тестами (snapshot/observability) выше. ## Вывод pytest (полный регресс) ``` ======================= 1157 passed, 1 warning in 37.99s ======================= ``` Целевой набор ORCH-089 (7 модулей): ``` tests/test_labels.py ................ (14) tests/test_plane_sync_labels.py ..... (11) tests/test_auto_approve_brd.py ...... (5) tests/test_auto_deploy.py ........... (5) tests/test_auto_label_combinations.py (3) tests/test_auto_labels_integration.py (3) tests/test_auto_labels_invariants.py . (2) ======================== 43 passed, 1 warning in 1.09s ========================= ``` Единственный warning — `PydanticDeprecatedSince20` (class-based config в `src/config.py`), не связан с ORCH-089, присутствует в baseline. ## Итог **PASS** — все 26 TC плана зелёные, полный регресс 1157/1157 пройден, smoke-тесты OK, инварианты (STAGE_TRANSITIONS/QG_CHECKS, AC-10) подтверждены. Задача готова к `deploy-staging`.