6.4 KiB
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 |