8.2 KiB
8.2 KiB
03-Критерии приёмки — ORCH-026
Work Item: ORCH-026 · Repo: orchestrator · Стадия: analysis
Каждый критерий — проверяемое условие PASS/FAIL. Маппинг на тесты — 04-test-plan.yaml.
Уровень A — Сериализация merge/деплоя внутри одного репо
AC-A1 — Сериализация merge внутри репо
- PASS: пока задача A применимого репо удерживает окно merge (merge-lease не освобождён /
mainещё не обновлён), задача B того же репо НЕ доходит до фактического merge — она defer-ится (повторная постановка черезavailable_at), а не мержится от устаревшегоmain. - FAIL: B мержится/деплоится, пока A не в
main; или B откатывается наdevelopmentвместо defer.
AC-A2 — Proactive pre-merge rebase
- PASS: перед merge ветка задачи всегда догоняется на свежий
origin/main(вызывается rebase), даже когда текстового конфликта нет и ветка формально не «behind» по старой проверке; после rebase ветка содержит код предшественника (A). - FAIL: rebase запускается только при конфликте/
branch_is_behind_main, и B мержится без кода A.
AC-A3 — Кросс-репо параллелизм сохранён
- PASS: задача в
orchestratorи задача вenduro-trailsдоходят до merge/деплоя параллельно — сериализация одного репо не блокирует другой (lease/гейт строго per-repo). - FAIL: задача одного репо ждёт освобождения ресурса, удерживаемого задачей ДРУГОГО репо.
AC-A4 — Restart-safe
- PASS: после рестарта прод-контейнера состояние сериализации восстанавливается корректно; мёртвый держатель merge-lease проактивно реклеймится (ORCH-065), конвейер не встаёт навсегда.
- FAIL: рестарт оставляет навсегда захваченный lease → конвейер всех проектов встаёт.
AC-A5 — Self-hosting safety
- PASS: прод-контейнер orchestrator НЕ рестартится/не падает вне штатного
Confirm Deploy(ORCH-059); нет push/force-push вmain;STAGE_TRANSITIONSи реестрQG_CHECKSне изменены. - FAIL: любой незапрошенный рестарт прода, прямой push в
main, или изменение машины стадий.
AC-A6 — Anti-deadlock / anti-livelock при defer
- PASS: при занятой сериализации B defer-ится с задержкой и bounded бюджетом; исчерпание бюджета → эскалация (alert/Blocked), не бесконечный цикл и не откат.
- FAIL: B уходит в вечный defer-цикл, либо немедленно откатывается на
development.
AC-A7 — Условность (не-self репо без регресса)
- PASS: при выключенном kill-switch и для репо вне scope поведение конвейера 1:1 как до ORCH-026 (нулевая регрессия для enduro-trails).
- FAIL: не-self репо меняет поведение merge/деплоя.
Уровень B — Декларативные зависимости
AC-B1 — Декларация зависимости
- PASS: задача может объявить
blocked-by/depends-on(через выбранный источник — Plane relations / БД / гибрid), и связь корректно считывается планировщиком. - FAIL: связь не считывается / теряется.
AC-B2 — Гейт планировщика (B не стартует до A)
- PASS: задача с незавершённым depends-on не клеймится воркером (не запускается агент,
слот
max_concurrencyне занимается), пока все depends-on не достиглиdone; как только A становитсяdone— B становится claimable. - FAIL: B запускается раньше завершения A; или занимает слот, простаивая.
AC-B3 — Детект дедлоков (циклы)
- PASS: циклическая зависимость (A→B→A и длиннее) детектируется детерминированно; задача(и)
в цикле →
Blocked+ alert (Telegram/Plane) с указанием цикла; поток остальных задач не блокируется. - FAIL: цикл приводит к молчаливому вечному ожиданию или к падению воркера.
AC-B4 — Видимость заблокированной задачи
- PASS: заблокированная задача видна — Plane-статус
Blockedи/или строка ожидания в Telegram-карточке (что/кого ждёт); инвариант «одна карточка на задачу» сохранён. - FAIL: заблокированная задача невидима наблюдателю.
AC-B5 — Совместимость с reconciler/reaper
- PASS:
reconcilerF-1 НЕ «разблокирует» задачу, заблокированную по зависимости (как уже делает для Blocked/Needs-Input, ORCH-060/068); reaper не реапит корректно ожидающую задачу. - FAIL: reconciler продвигает заблокированную задачу мимо её depends-on.
Общие (оба уровня)
AC-G1 — never-raise
- PASS: любая ошибка (git/сеть/БД/Plane) в новой логике не пробрасывается в
advance_stage/ воркер; деградирует консервативно (defer/skip/fail-closed), конвейер не падает. - FAIL: необработанное исключение роняет воркер/монитор-поток.
AC-G2 — Kill-switch
- PASS: глобальный kill-switch выключает фичу целиком → поведение 1:1 как до ORCH-026.
- FAIL: при выключенном флаге поведение изменено.
AC-G3 — Документация обновлена (golden source)
- PASS: в ТОМ ЖЕ PR обновлены
docs/architecture/README.md,CLAUDE.md(если изменилось поведение очереди),CHANGELOG.md, заведён ADR в06-adr/. Reviewer проверяет. - FAIL: код изменён, документация — нет (→ REQUEST_CHANGES).
AC-G4 — Миграция БД безопасна (если применимо)
- PASS: миграция только аддитивная (
CREATE TABLE IF NOT EXISTS/_ensure_column), идемпотентна, безопасна на живой общей прод-БД; существующие данные enduro-trails не затронуты. - FAIL: деструктивная миграция / изменение существующих колонок.
AC-G5 — Тесты зелёные
- PASS: новые unit+integration тесты (
04-test-plan.yaml) проходят; существующийpytest tests/ -qостаётся зелёным (нет регресса merge-gate/merge-verify/reconciler/reaper). - FAIL: красный pytest или регресс существующих тестов.