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

6.4 KiB
Raw Permalink Blame History

work_item, stage, author_agent, status, created_at, model_used
work_item stage author_agent status created_at model_used
ORCH-094 analysis analyst ready-for-review 2026-06-09 claude-opus-4-8

03 — Критерии приёмки (Acceptance Criteria): ORCH-094 — флапп deploy-статусов у терминальной (done) задачи

Work Item: ORCH-094 · Repo: orchestrator · Стадия: analysis

Формат: каждый критерий имеет PASS (что должно быть истинно для приёмки) и FAIL (что считается провалом). Reviewer/CI проверяет их буквально по файлам репозитория и/или прод-проверкой.


AC-1 — Терминальная задача стабильно держит Done

Условие: задача с БД stage=done и 0 активных job'ов, выставленная в Plane=Done, наблюдается ≥10 минут (воспроизводящий тест на 061-подобной фикстуре и/или прод-проверка на ORCH-061).

  • PASS: за окно наблюдения ни одного авто-перехода в Awaiting Deploy/Monitoring after Deploy; статус остаётся Done. В тесте: после выставления Done ни один кодовый путь орка не порождает PATCH deploy-статуса для этой задачи.
  • FAIL: зафиксирован хотя бы один авто-переход done-задачи в Awaiting/Monitoring, либо флапп продолжается.

AC-2 — Идемпотентное схождение к Done для done-задачи

Условие: для задачи с БД stage IN ('done','cancelled') инициируется любой источник sync (реконсилятор-тик, монитор-тик, прямой вызов setter'а deploy-статуса).

  • PASS: результат — Done (для done) / корректный терминал (для cancelled); промежуточный deploy-статус (Awaiting/Deploying/Monitoring) не выставляется; повторный вызов на уже-Done — no-op (без PATCH-маятника). Подавление логируется (что/почему).
  • FAIL: sync для done-задачи выставляет промежуточный deploy-статус, либо повторные вызовы качают Done ⟷ deploy-статус.

AC-3 — Детерминированный конец post-deploy-monitor, без «зомби»-тиков

Условие: post-deploy-monitor отрабатывает свой жизненный цикл (HEALTHY до исчерпания post_deploy_budget тиков, либо DEGRADED).

  • PASS: по достижении HEALTHY/N-тиков → set_issue_done + маркер done; после завершения — 0 последующих статус-PATCH для этой задачи (тест: монитор отработал → последующих set_issue_*-вызовов нет). Тик при БД=done/отсутствии активного основания → немедленный no-op без PATCH. После рестарта контейнера тики завершённого окна не воскресают.
  • FAIL: после завершения монитора фиксируется хотя бы один статус-PATCH; либо «зомби»-тик выполняется без активного job'а/при БД=done и шлёт статус; либо arm_monitor повторно ставит Monitoring уже-done-задаче.

AC-4 — Регресс: рабочий deploy-цикл реально деплоящейся задачи

Условие: реально деплоящаяся 063-подобная задача проходит self-deploy.

  • PASS: последовательность статусов Awaiting Deploy → Deploying → Monitoring after Deploy → Done работает в точности как до ORCH-094; Phase A/B/C, merge-gate, post-deploy HEALTHY-окно, freeze-на-DEGRADED (ORCH-088) — не затронуты; терминал-aware гард (FR-2) не подавляет легитимный Monitoring у нетерминальной задачи.
  • FAIL: любой шаг рабочего deploy-цикла нетерминальной задачи изменён/подавлён/сломан.

AC-5 — Наблюдаемость, безопасность, документация, зелёный pytest

Условие: реализация завершена.

  • PASS:
    • Лог однозначно показывает кто (функция/путь) и почему ставит deploy-статус, и что/почему подавлено терминал-aware гардом (FR-4).
    • never-raise: новая логика не бросает исключений в горячих путях; сетевая ошибка Plane → безопасная деградация. Не трогаются main/force-push/прод-контейнер/детач-деплой.
    • STAGE_TRANSITIONS / QG_CHECKS / machine-verdict ключи — без изменений; новая логика под kill-switch (False → прежнее поведение 1:1); не-self репозитории не затронуты.
    • pytest tests/ -q зелёный; добавлены тесты по 04-test-plan.yaml.
    • Источник флаппа задокументирован (что это было) в 06-adr/ADR-NNN-… + CHANGELOG.md; обновлены CLAUDE.md / docs/architecture/README.md (golden source).
  • FAIL: нет логирования caller/причины; new-логика бросает/без флага; тронуты гейты/verdict-ключи; красный pytest; источник флаппа не задокументирован; затронут не-self репозиторий.

Сводная матрица AC ↔ FR/BR

AC Покрывает
AC-1 BR-1 / FR-1
AC-2 BR-2 / FR-2
AC-3 BR-3, BR-4 / FR-3
AC-4 BR-5 / FR-2, FR-5
AC-5 BR-6, BR-7 / FR-4, FR-5, NFR-1…NFR-5