Files
orchestrator/docs/work-items/ORCH-089/03-acceptance-criteria.md

9.4 KiB
Raw Permalink Blame History

03 — Критерии приёмки: Авто-режим по лейблам (ORCH-089)

Каждый критерий — чёткое условие PASS/FAIL. Маппинг на BR (01-brd.md) и AC бизнес-запроса указан в скобках.


AC-1 — autoApprove проходит гейт BRD (BR-1 / BizAC-1)

Дано: задача с лейблом autoApprove, analyst успешно завершился (артефакты BRD/TRZ/AC/test-plan на месте), auto_label_enabled=True, репо в scope. Когда: срабатывает _handle_analysis_approved_flow (ветка files_ok). Тогда:

  • задача автоматически переходит analysis → architecture без человеческого Approved;
  • Plane-статус выставлен в Approved (индикация);
  • клок brd_review_ended_at закрыт (mark_brd_review_ended);
  • авто-проход залогирован + Telegram/карточка/Plane-коммент уведомляют о факте.

PASS: стадия задачи стала architecture без внешнего webhook Approved; клок закрыт. FAIL: задача осталась в In Review/analysis ИЛИ advance прошёл без индикации/лога.


AC-2 — autoDeploy триггерит прод-деплой (BR-2 / BizAC-2)

Дано: задача с лейблом autoDeploy дошла до ребра deploy-staging → deploy, все тех-гейты (security, merge-gate, image-freshness, staging) зелёные, Phase A advance на deploy выполнен, auto_label_enabled=True, репо в scope (self-hosting). Когда: срабатывает _handle_self_deploy_phase_a. Тогда:

  • Phase B (_handle_self_deploy_phase_b) инициируется автоматически, без ручного Confirm Deploy;
  • маркер INITIATED выставлен (идемпотентность), finalizer-job (Phase C) поставлен;
  • Plane-статус → Deploying; авто-проход залогирован + Telegram/Plane-коммент.

PASS: прод-деплой инициирован без статуса Confirm Deploy от человека; Phase C армлен. FAIL: задача застряла в Awaiting Deploy, ожидая ручного Confirm Deploy.


AC-3 — оба лейбла → полная автономность (BR-3 / BizAC-3)

Дано: задача с лейблами autoApprove И autoDeploy, все тех-гейты по пути зелёные. Когда: задача проходит конвейер analysis → … → deploy. Тогда: задача проходит от анализа до прод-деплоя без единого ручного клика (ни Approved, ни Confirm Deploy).

PASS: ноль человеческих гейт-кликов; задача достигла deploy/done автономно. FAIL: конвейер остановился хотя бы на одном из двух человеческих гейтов.


AC-4 — без лейблов поведение НЕ меняется (BR-4 / BizAC-4)

Дано: задача без лейблов autoApprove/autoDeploy. Когда: проходит гейты BRD и деплоя. Тогда: оба гейта остаются ручными — задача ждёт In Review → Approved (человек) и Awaiting Deploy → Confirm Deploy (человек), ровно как до ORCH-089.

PASS: на гейте BRD задача в In Review ждёт человека; на гейте деплоя — в Awaiting Deploy ждёт человека. Нулевая регрессия. FAIL: задача без лейблов авто-прошла любой гейт.


AC-5 — красный тех-гейт блокирует авто-режим (BR-5 / BizAC-5)

Дано: задача с лейблом autoDeploy, но один из тех-гейтов на ребре deploy-staging → deploy красный (например, staging unhealthy / merge-gate конфликт / security FAIL / image-freshness mismatch). Когда: конвейер достигает ребра деплоя. Тогда: Phase A НЕ достигается (под-гейт завернул задачу) → autoDeploy НЕ инициирует Phase B; задача откатывается/встаёт ровно как при ручном режиме.

PASS: при красном тех-гейте прод-деплой НЕ инициирован, несмотря на лейбл; поведение тождественно ручному режиму при том же провале. FAIL: autoDeploy инициировал прод-деплой при красном тех-гейте.

Аналогично для autoApprove: при отсутствии артефактов (check_analysis_complete FAIL) авто-аппрув не срабатывает (нет advance), задача не уходит на architecture.


AC-6 — fail-safe к ручному гейту (BR-6 / BizAC-6)

Дано: одно из: лейбл не распознан; Plane API недоступен при чтении лейблов; неоднозначное сопоставление имени; исключение в логике авто-режима. Когда: гейт BRD или деплоя. Тогда: авто-режим НЕ срабатывает → откат к ручному гейту (задача ждёт человека); конвейер НЕ падает.

PASS: при ошибке/неоднозначности задача переходит в ручное ожидание (никогда не авто-проход по ошибке); ни одно исключение не всплывает наружу (never-raise). FAIL: ошибка чтения лейблов привела к авто-проходу ИЛИ к падению/застреванию конвейера.


AC-7 — прозрачность каждого авто-прохода (BR-7 / BizAC-7)

Дано: любой сработавший авто-проход (autoApprove или autoDeploy). Когда: гейт пройден автоматически. Тогда: факт виден в: (а) логе с причиной (label X → действие); (б) Telegram + live-карточке задачи; (в) Plane-комменте.

PASS: все три канала несут отметку об авто-проходе и о том, какой лейбл его разрешил. FAIL: авто-проход произошёл «молча» (нет отметки хотя бы в одном из обязательных каналов: лог + Telegram/карточка + Plane).


AC-8 — kill-switch и scope (BR-9 / BR-10)

Дано: auto_label_enabled=False (или репо вне auto_label_repos). Когда: задача с лейблами проходит гейты. Тогда: авто-режим полностью отключён — оба гейта ручные, никаких новых сетевых вызовов на гейтах; поведение 1:1 как до ORCH-089 (включая нулевую регрессию для enduro).

PASS: при выключенном флаге лейблы игнорируются, поведение прежнее. FAIL: при False авто-режим сработал ИЛИ появилась регрессия для не-scope репо.


AC-9 — независимость лейблов (BR-3)

Дано: задача только с autoApprove (без autoDeploy) — и симметрично наоборот. Тогда:

  • только autoApprove: BRD авто-проходит, деплой ждёт ручного Confirm Deploy;
  • только autoDeploy: BRD ждёт ручного Approved, деплой авто-проходит.

PASS: каждый лейбл влияет строго на свой гейт, второй гейт остаётся ручным. FAIL: один лейбл повлиял на оба гейта.


AC-10 — инварианты неизменны (TRZ §10)

Тогда: STAGE_TRANSITIONS, QG_CHECKS, check_analysis_approved, check_deploy_status, check_staging_status, схема БД, все технические под-гейты, sentinel-маркеры self-deploy, exit-коды deploy-хука — не изменены.

PASS: diff не затрагивает перечисленные контракты; существующие тесты этих компонентов зелёные. FAIL: любой из инвариантных контрактов изменён.


AC-11 — документация обновлена (CLAUDE.md §правила 2/6)

Тогда: в том же PR обновлены CLAUDE.md, docs/architecture/README.md, заведён 06-adr/ADR-001-*, 07-infra-requirements.md (создание лейблов), CHANGELOG.md.

PASS: документация-golden-source синхронна с кодом. FAIL: функционал изменён, документация — нет (reviewer → REQUEST_CHANGES).