8.6 KiB
02 — ТЗ: выделенный статус «Confirm Deploy» как триггер прод-деплоя
Work Item: ORCH-059 · Repo: orchestrator · Stage: analysis
ТЗ описывает что должно измениться и поведенческий контракт. Конкретный дизайн (сигнатуры, способ проброса признака «confirm-deploy» из webhook в
stage_engine, sentinel-обработка) — за архитектором (ADR per-work-item). Точки касания ниже заданы бизнес-запросом Owner и текущей реализацией ORCH-036.
1. Задействованные модули src/
| Модуль | Роль в задаче |
|---|---|
src/plane_sync.py |
Резолвер состояний Plane. Добавить логический ключ confirm_deploy ↔ имя статуса «Confirm Deploy»; обеспечить безопасный доступ при отсутствии статуса (fallback/неполный конфиг). |
src/webhooks/plane.py |
handle_issue_updated — маршрутизация нового статуса; handle_verdict — отделить «подтверждение деплоя» от обычного approve; снять триггер Фазы B со статуса Approved на deploy. |
src/stage_engine.py |
Блок Фазы B (current_stage == "deploy" and finished_agent is None) должен срабатывать ТОЛЬКО по сигналу confirm-deploy, не по обычному Approved. Обновить CTA-текст Фазы A (_handle_self_deploy_phase_a). |
src/config.py |
(опционально, на усмотрение архитектора) флаг/имя статуса, если потребуется конфигурируемость. По умолчанию — не требуется. |
2. Поведенческий контракт (требования)
TRZ-1. Регистрация статуса «Confirm Deploy»
Резолвер состояний (get_project_states) обязан возвращать UUID статуса
«Confirm Deploy» под логическим ключом confirm_deploy для проекта ORCH.
Маппинг имени "Confirm Deploy" → "confirm_deploy" добавляется в
_PLANE_NAME_TO_KEY. Для проектов/сред, где статус отсутствует (enduro,
fallback _DEFAULT_STATES, недоступный API), ключ может отсутствовать —
обращение к нему должно быть fail-closed: «нет статуса → ветка confirm-deploy
не активируется», без KeyError/исключения.
TRZ-2. Триггер прод-деплоя по «Confirm Deploy»
Когда задача находится на стадии deploy и issue переводится в статус
Confirm Deploy, система обязана инициировать Фазу B прод-деплоя
(эквивалент текущего _handle_self_deploy_phase_b: idempotency-guard initiated,
self_deploy.initiate_deploy, постановка deploy-finalizer, комментарии/Telegram).
Поведение, идемпотентность и Фаза C — без изменений относительно ORCH-036;
меняется только что именно является триггером.
TRZ-3. Approved больше не запускает прод-деплой
Перевод задачи стадии deploy в статус Approved не должен инициировать
Фазу B. Он не должен также вызывать ложный откат (БАГ-8) или ложный advance
по check_deploy_status (вердикта ещё нет). Допустимое поведение — no-op с
логированием (issue остаётся на deploy/approval-pending). Конкретный способ
(игнор на уровне webhook-роутинга или на уровне stage_engine) — за архитектором.
TRZ-4. Сохранность гейта Approved на остальных стадиях
Статус Approved обязан продолжать работать как человеческий гейт:
analysis→architecture(check_analysis_approved, approved-via-status);- любой иной человеческий approve-advance, существующий сегодня.
Регрессия
handle_verdict(approved=True)для НЕ-deployстадий недопустима.
TRZ-5. CTA Фазы A
Текст запроса approve в _handle_self_deploy_phase_a (Plane-комментарий + Telegram)
обязан инструктировать оператора переводить задачу в статус Confirm Deploy
(а не Approved) для запуска прод-деплоя.
TRZ-6. Условность (как ORCH-35/36)
Ветка confirm-deploy реальна только для self-hosting
(self_deploy.self_deploy_applies(repo) → orchestrator). Для прочих репо —
прежнее поведение (синхронный деплой агентом), статус Confirm Deploy не
требуется и не влияет.
3. Изменения API
Изменений HTTP-эндпоинтов нет. Канал — существующий POST /webhook/plane
(событие work_item.updated). Внешнее изменение: в проекте ORCH появляется
дополнительный статус доски «Confirm Deploy» (Plane-конфигурация, не код-API).
4. Изменения схемы БД
Нет. STAGE_TRANSITIONS, реестр QG_CHECKS, таблицы tasks/jobs/
agent_runs/events — без изменений. Статусы — на стороне Plane; restart-safe
состояние деплоя — существующие sentinel-файлы ORCH-036 (без миграций).
5. Требования к новым QG checks
Нет. Новый Quality Gate не вводится. check_deploy_status /
_parse_deploy_status и контракт exit-кодов хука (0/1/2) — без изменений.
6. Конфигурация среды (предусловие эксплуатации)
- В проекте ORCH в Plane создаётся статус доски «Confirm Deploy» (точное имя,
чувствительно к регистру — должно совпасть с ключом
_PLANE_NAME_TO_KEY). - Размещение статуса на доске — рядом со стадией deploy/approval-pending (рекомендация эксплуатации, не код).
- Кэш состояний (
get_project_states/reload_project_states): после создания статуса может потребоваться сброс кэша или рестарт по штатной стадии deploy.
7. Артефакты, создаваемые/обновляемые по pipeline
docs/work-items/ORCH-059/06-adr/ADR-001-confirm-deploy-status.md— решение (как отличается триггер; где разрезается перегрузкаApproved; fail-closed при отсутствии статуса) — ведёт архитектор.CLAUDE.md— упоминание выделенного статуса approve прод-деплоя (раздел self-hosting / артефакты).docs/architecture/README.md— секция ORCH-036: уточнить, что Фаза B триггерится статусомConfirm Deploy, а неApproved.CHANGELOG.md— запись ORCH-059.12-review.md,13-test-report.md,14-deploy-log.md,15-staging-log.md— штатно по стадиям конвейера.
8. Совместимость и инварианты
- Не меняются:
STAGE_TRANSITIONS,QG_CHECKS,check_deploy_status, БАГ-8 (FAILED → откат на development), merge-gate, exit-коды хука, Фазы A/C, схема БД, post-deploy (ORCH-021). - Self-hosting safety: правка НЕ требует внепланового рестарта прод-контейнера; выкат — через штатный deploy-staging (8501) → deploy.
- Never-crash: отсутствие статуса
Confirm Deployв резолвере не приводит к исключению в webhook-пути.