---
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`.
