77 lines
5.4 KiB
Markdown
77 lines
5.4 KiB
Markdown
# 03 — Критерии приёмки: ORCH-059
|
||
|
||
Repo: `orchestrator` · Stage: analysis
|
||
Каждый критерий — однозначный PASS/FAIL. Проверка: unit/integration (см.
|
||
`04-test-plan.yaml`) + ручная верификация для инфра-предусловий.
|
||
|
||
## AC-1 — Статус «Confirm Deploy» резолвится
|
||
**Given** проект ORCH со статусом доски «Confirm Deploy»
|
||
**When** вызывается резолвер состояний для проекта ORCH
|
||
**Then** возвращается логический ключ `confirm_deploy` с непустым UUID,
|
||
а маппинг `"Confirm Deploy" → "confirm_deploy"` присутствует в `_PLANE_NAME_TO_KEY`.
|
||
**FAIL:** ключ отсутствует или указывает на UUID статуса `Approved`.
|
||
|
||
## AC-2 — «Confirm Deploy» на стадии `deploy` запускает Фазу B
|
||
**Given** задача self-hosting (`orchestrator`) на стадии `deploy`,
|
||
`deploy_require_manual_approve=true`, маркер `initiated` отсутствует
|
||
**When** приходит `work_item.updated` со статусом `Confirm Deploy`
|
||
**Then** инициируется Фаза B: вызывается `self_deploy.initiate_deploy`,
|
||
ставится job `deploy-finalizer`, пишется маркер `initiated`.
|
||
**FAIL:** прод-деплой не инициирован, либо finalizer не поставлен.
|
||
|
||
## AC-3 — «Approved» на стадии `deploy` НЕ запускает прод-деплой
|
||
**Given** та же задача на стадии `deploy`
|
||
**When** приходит `work_item.updated` со статусом `Approved`
|
||
**Then** `self_deploy.initiate_deploy` **НЕ** вызывается; Фаза B не стартует;
|
||
задача не откатывается (БАГ-8 не срабатывает) и не «доходит» по
|
||
`check_deploy_status` (вердикта нет); событие залогировано как no-op.
|
||
**FAIL:** вызван `initiate_deploy`, либо произошёл откат/ложный advance.
|
||
|
||
## AC-4 — «Approved» на `analysis` работает без регрессии
|
||
**Given** задача на стадии `analysis` (BRD готов, approval-pending)
|
||
**When** issue переводится в `Approved`
|
||
**Then** срабатывает approved-via-status и задача продвигается
|
||
`analysis → architecture` (как до правки).
|
||
**FAIL:** approve на analysis перестал продвигать конвейер.
|
||
|
||
## AC-5 — Идемпотентность Фазы B по «Confirm Deploy»
|
||
**Given** задача на `deploy`, маркер `initiated` уже существует
|
||
**When** повторно приходит статус `Confirm Deploy` (двойной клик / дубль webhook)
|
||
**Then** повторного `initiate_deploy` не происходит (no-op,
|
||
`self-deploy-already-initiated`).
|
||
**FAIL:** прод-деплой запускается повторно.
|
||
|
||
## AC-6 — CTA Фазы A просит «Confirm Deploy»
|
||
**Given** Фаза A (`deploy-staging → deploy`, approval-pending)
|
||
**When** формируются Plane-комментарий и Telegram-уведомление запроса approve
|
||
**Then** текст инструктирует перевести задачу в статус **`Confirm Deploy`**
|
||
(а не «Approved») для запуска прод-деплоя.
|
||
**FAIL:** CTA по-прежнему упоминает только «Approved».
|
||
|
||
## AC-7 — Fail-closed при отсутствии статуса
|
||
**Given** среда без статуса «Confirm Deploy» (enduro / fallback `_DEFAULT_STATES`
|
||
/ недоступный Plane API)
|
||
**When** обрабатывается `work_item.updated`
|
||
**Then** webhook-путь не выбрасывает исключение; ветка confirm-deploy не
|
||
активируется (прод-деплой не запускается «вслепую»).
|
||
**FAIL:** `KeyError`/исключение в обработчике, либо ложный запуск Фазы B.
|
||
|
||
## AC-8 — Условность для не-self репозиториев
|
||
**Given** не-self репозиторий (`self_deploy_applies(repo) == False`)
|
||
**When** приходит любой verdict-статус на стадии `deploy`
|
||
**Then** поведение прод-деплоя не меняется относительно текущего (синхронный
|
||
деплой агентом); статус `Confirm Deploy` не требуется.
|
||
**FAIL:** изменилось поведение деплоя не-self проекта.
|
||
|
||
## AC-9 — Инварианты не нарушены
|
||
**Then** `STAGE_TRANSITIONS`, реестр `QG_CHECKS`, `check_deploy_status`/
|
||
`_parse_deploy_status`, контракт exit-кодов хука (0/1/2), Фазы A/C, merge-gate,
|
||
схема БД — без изменений; `pytest tests/ -q` зелёный.
|
||
**FAIL:** изменён любой из перечисленных контрактов или красные тесты.
|
||
|
||
## AC-10 — Документация обновлена (golden source)
|
||
**Then** в том же PR обновлены `CLAUDE.md`, секция ORCH-036 в
|
||
`docs/architecture/README.md`, `CHANGELOG.md`; заведён
|
||
`06-adr/ADR-001-confirm-deploy-status.md`.
|
||
**FAIL:** функционал изменён, документация — нет (Reviewer → REQUEST_CHANGES).
|