124 lines
9.6 KiB
Markdown
124 lines
9.6 KiB
Markdown
# 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) — точки врезки авто-деплоя.
|