6.2 KiB
work_item, stage, author_agent, status, created_at, model_used, escalate
| work_item | stage | author_agent | status | created_at | model_used | escalate |
|---|---|---|---|---|---|---|
| ORCH-113 | analysis | analyst | ready-for-review | 2026-06-15 | claude-opus-4-8 | full-cycle |
03 — Критерии приёмки (Acceptance Criteria): ORCH-113 — BUG: job-reaper не должен повторно запускать финализацию deploy-staging, пока жив исходный finalizer
Work Item: ORCH-113 · Repo: orchestrator · Стадия: analysis
Формат: каждый критерий имеет PASS (что должно быть истинно для приёмки) и FAIL (что считается провалом). Любой машинный/ручной reviewer проверяет их буквально по файлам репозитория и тестам.
AC-1 — Нет второго прогона edge-гейтов при живом finalizer'е
Условие: job на deploy-staging с exit_code=0, finished_age_s >= reaper_finalize_grace_s, но
исходный monitor/finalizer ещё жив (сигнал живости присутствует).
- PASS: reaper не вызывает
_gate_driven_advance/advance_stageдля этого job; второй прогон security / merge-gate / локального re-test / coverage / image-freshness не запускается; reaper логирует defer. - FAIL: reaper запускает повторный
advance_stage/ любой edge-под-гейт, пока finalizer жив.
AC-2 — Идемпотентность и строгое владение состоянием
Условие: монитор финализирует deploy-staging и параллельно срабатывает reaper-тик для того же
job/stage.
- PASS: тяжёлый прогон edge-гейтов (merge-gate / локальный re-test) исполняется ровно один раз
для пары
(job, stage); актор без владения состоянием не выполняет побочных шагов (мерж/re-test/ rollback). - FAIL: второй локальный re-test/merge-gate запускается для того же job/stage без владения состоянием (двойное исполнение edge-гейтов).
AC-3 — Мёртвый finalizer по-прежнему добивается
Условие: monitor/finalizer на deploy-staging реально умер посреди финализации (сигнал
живости отсутствует/протух), job завис в running.
- PASS: reaper за ограниченное время добивает job по существующему контракту (retry в пределах
бюджета, иначе
failed+ Telegram; Tier-3 backstop как предохранитель); reaper дляdeploy-stagingне превращён в no-op. - FAIL: мёртвый finalizer на
deploy-stagingне добивается reaper'ом (зомби-job блокирует очередь).
AC-4 — Нет ложного отката и расхождения состояния после успешного deploy
Условие: сценарий инцидента ORCH-111 — долгая (> grace) финализация deploy-staging при зелёном
staging_status: SUCCESS, deploy/finalizer параллельно доходит до deploy_status: SUCCESS / merge PR.
- PASS: задача не откатывается
deploy-staging → developmentпараллельной reaper-веткой; developer-retry не инкрементируется ложно; у задачи единственное консистентное терминальное/стадийное состояние (сходимость, не расхождение). - FAIL: задача откатана
deploy-staging → developmentи/или начислен ложный developer-retry, в то время как deploy фактически успешен; ветки состояния расходятся.
AC-5 — Инварианты и контракт reaper сохранены
Условие: аудит диффа и поведения при выключенном kill-switch.
- PASS:
STAGE_TRANSITIONS/QG_CHECKS/ каждыйcheck_*/ machine-verdict ключи / схема существующих таблиц — байт-в-байт; БД-правки только аддитивные (_ensure_column/CREATE TABLE IF NOT EXISTS); reaper остаётся never-raise per unit; выключенный флаг → прежнее поведение; правки не рестартят прод и не пушатmain; сквозной инвариантreaper_max_running_s > Σ gate-work + grace(ORCH-065/109/110) сохранён. - FAIL: изменены
STAGE_TRANSITIONS/QG_CHECKS/семантикаcheck_*/machine-verdict ключи или схема существующих таблиц; reaper может бросить исключение из тика; флагFalseменяет поведение; нарушен сквозной бюджетный инвариант.
AC-6 — Обязательный регресс-тест и зелёный полный прогон
Условие: запуск тест-сюита репозитория.
- PASS: добавлен регресс-тест инцидента ORCH-111 (TC-05 в
04-test-plan.yaml), красный на коде до фикса и зелёный после; полныйpytest tests/ -qзелёный. - FAIL: регресс-теста нет, либо он зелёный и до фикса (не воспроизводит баг), либо полный регресс
tests/красный.
Сводная матрица AC ↔ FR/BR
| AC | Покрывает |
|---|---|
| AC-1 | BR-1 / BR-3 / FR-1 |
| AC-2 | BR-2 / FR-2 |
| AC-3 | BR-4 / FR-4 |
| AC-4 | BR-5 / FR-5 |
| AC-5 | NFR-1 / NFR-2 / NFR-3 / NFR-6 / FR-3 |
| AC-6 | BR-1…BR-5 (регресс-доказательство) |