# 01 — BRD: Авто-режим по лейблам (autoApprove + autoDeploy)

**Work Item:** ORCH-089
**Repo:** orchestrator (self-hosting)
**Стадия:** analysis
**Приоритет:** Бэклог (запуск по решению Славы, serial e2e после ORCH-88)

> ⚠️ Прошлый подход (09.06) ОТМЕНЁН: «Стрим ревьюит и апрувит BRD» — НЕ реализовывать.
> Актуальная модель: автономность управляется **лейблами Plane на задаче**, без участия людей.

## 1. Проблема / зачем

В конвейере два **человеческих** гейта — точки, где конвейер останавливается и ждёт
ручного клика человека (Слава/Стрим):

1. **Гейт BRD** (стадия `analysis`): после завершения analyst задача переводится в
   `In Review` и ждёт, пока человек вручную выставит Plane-статус **Approved**, чтобы
   уйти на `architecture`.
2. **Гейт деплоя** (стадия `deploy`): после зелёного staging задача переводится в
   `Awaiting Deploy` (Phase A, ORCH-036/059) и ждёт, пока человек вручную выставит
   статус **Confirm Deploy**, чтобы запустить прод-деплой (Phase B).

Для задач, которым **доверяем**, оба ручных решения избыточны и тормозят пакетный
автономный прогон («10–20 задач за ночь», эпик ORCH-088). Нужно снять эти два
человеческих решения **выборочно и декларативно** — через лейблы на конкретной задаче.

## 2. Бизнес-цель

Дать оператору возможность пометить задачу лейблом и тем самым **разрешить орку
самому пройти соответствующий человеческий гейт**, не трогая ни одну техническую
проверку. Доверие выражается лейблом — на уровне отдельной задачи, обратимо, прозрачно.

## 3. Модель (решение Славы, 09.06)

| Лейбл на задаче | Эффект |
|-----------------|--------|
| `autoApprove` | Орк САМ подтверждает BRD (гейт 1: `In Review → Approved`), без человека. Конвейер идёт на `architecture`. |
| `autoDeploy`  | Орк САМ подтверждает прод-деплой (гейт 2: `Confirm Deploy`) и деплоит в прод после зелёного staging + всех тех-гейтов, без человека. |

**Лейблы независимы:**
- только `autoApprove` → BRD авто, деплой вручную;
- только `autoDeploy` → BRD вручную, деплой авто;
- оба → полная автономность (анализ → деплой без единого ручного клика);
- без лейблов → **текущее поведение** (оба гейта ручные, нулевая регрессия).

## 4. Критический инвариант — авто-режим снимает ТОЛЬКО человеческое решение

Авто-режим **не отключает и не ослабляет ни одну техническую проверку**. Все
тех-гейты остаются на месте и блокируют при провале ровно как сейчас:

- `check_ci_green` (CI зелёный);
- `check_staging_status` (staging healthy, ORCH-035);
- security-гейт (gitleaks + pip-audit, ORCH-022);
- merge-gate / re-test / merge-lease (ORCH-043);
- image-freshness / provenance guard (ORCH-058);
- merge-verify + regression-guard (ORCH-071/073);
- post-deploy monitor (ORCH-021).

`autoDeploy` **никогда не деплоит сломанное** — он лишь заменяет ручной клик
«Confirm Deploy» на авто-проход, и только когда все тех-гейты на ребре
`deploy-staging → deploy` уже зелёные. `autoApprove` заменяет ручной клик «Approved»,
но артефакты анализа (BRD/TRZ/AC/test-plan) должны существовать (`check_analysis_complete`).

## 5. Fail-safe (безопасность по умолчанию)

При любой неоднозначности — **откат к ручному гейту** (never auto):

- лейбл не распознан / Plane API недоступен / ошибка чтения лейблов;
- неоднозначность сопоставления имени лейбла;
- любое исключение в логике определения авто-режима.

Лучше подождать человека, чем авто-пропустить гейт по ошибке. Это согласуется с
fail-closed-практикой проекта (ORCH-059 «нет статуса → нет деплоя»).

## 6. Прозрачность (обязательно)

Каждый авто-проход гейта **логируется и виден** оператору:

- запись в лог (кто/почему: `label autoApprove → auto-approved BRD` /
  `label autoDeploy → auto-confirmed prod deploy`);
- Telegram-уведомление + строка/обновление в live-карточке задачи (ORCH-042/087);
- Plane-коммент в задаче (как при ручном проходе гейта).

Слава должен по карточке/Telegram видеть, что задача прошла гейт автоматически (а не
руками), и какой именно лейбл это разрешил.

## 7. Бизнес-требования (BR)

- **BR-1.** Лейбл `autoApprove` на задаче → BRD подтверждается автоматически
  (`In Review → Approved`) сразу после успешного analyst (артефакты готовы),
  конвейер идёт на `architecture`. Закрывается клок `brd_review_ended_at`.
- **BR-2.** Лейбл `autoDeploy` на задаче → после зелёного staging и всех тех-гейтов
  прод-деплой (Phase B) триггерится автоматически, без ручного `Confirm Deploy`.
- **BR-3.** Лейблы независимы; комбинация обоих даёт полную автономность анализ→деплой.
- **BR-4.** Без лейблов поведение конвейера **не меняется** (оба гейта ручные).
- **BR-5.** Тех-гейт красный → авто-режим НЕ проходит гейт; задача встаёт/заворачивается
  ровно как сейчас (авто-режим не маскирует провал тех-проверки).
- **BR-6.** Нераспознанный/спорный лейбл / ошибка чтения → fail-safe к ручному гейту.
- **BR-7.** Каждый авто-проход гейта логируется и виден в карточке/Telegram + Plane.
- **BR-8.** Лейблы `autoApprove` и `autoDeploy` должны существовать в Plane-проекте ORCH
  (сейчас их нет — создать через labels API; инфра-предусловие).
- **BR-9.** Раскат под kill-switch (как ORCH-035/043/059/088); выключенный флаг →
  строго прежнее поведение (нулевая регрессия для enduro-trails и для самого ORCH).
- **BR-10.** Авто-проходы — только для self-hosting/applicable репо по тому же
  условному принципу, что и self-deploy (Phase A/B существуют только для self-hosting).
  Гейт BRD логически применим к любому репо, но раскат гейтится флагом/scope.

## 8. Вне scope (НЕ делаем в этой задаче)

- Любая логика «Стрим/человек ревьюит BRD» (отменённый подход).
- Управление лейблами из UI оркестратора.
- Авто-режим для REQUEST_CHANGES / откатов reviewer/tester (это не человеческие гейты —
  это технические вердикты, они и так автоматические).
- Снятие/ослабление любого технического гейта.
- Авто-снятие per-repo freeze (ORCH-088) — freeze остаётся ручным.

## 9. Допущения и зависимости

- Plane labels API v1 работает (`POST /labels/` подтверждён в бизнес-запросе; GET
  лейблов проекта и поле `labels` issue — проверить на этапе архитектуры/разработки).
- Идёт поверх ORCH-088 (serial gate) — авто-режим совместим с serial e2e: serial-gate
  сериализует задачи, авто-режим убирает человеческие паузы внутри прохода одной задачи.
- Self-deploy Phase A/B/C (ORCH-036/059/071) — точки врезки авто-деплоя.
