Files
orchestrator/docs/work-items/ORCH-089/01-brd.md

124 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).
Для задач, которым **доверяем**, оба ручных решения избыточны и тормозят пакетный
автономный прогон («1020 задач за ночь», эпик 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) — точки врезки авто-деплоя.