---
work_item: ORCH-112
stage: analysis
author_agent: analyst
status: ready-for-review
created_at: 2026-06-15
model_used: claude-opus-4-8
---

# 03 — Критерии приёмки (Acceptance Criteria): ORCH-112 — failed/cancelled task artifacts must be cleaned from shared checkout

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

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

---

## AC-1 — Грязная tracked-правка не блокирует self-deploy pull (регресс ORCH-104/ORCH-111)

**Условие:** shared deploy-база имеет локальную модификацию tracked-файла (напр. `src/config.py`),
self-deploy выполняет шаг pull.
- **PASS:** база приводится к чистому актуальному `origin/main` без ручного вмешательства; шаг pull
  не возвращает «local changes would be overwritten by merge»; деплой продолжается; есть тест,
  воспроизводящий точный сценарий ORCH-111 (**красный до фикса, зелёный после**).
- **FAIL:** pull/деплой падает на грязной tracked-правке; или сценарий не покрыт тестом.

---

## AC-2 — Untracked WIP-файлы не блокируют и не «протекают» в деплой

**Условие:** в shared-базе лежат untracked-файлы failed/брошенной задачи (напр.
`scripts/install_lite.py`, `tests/test_install_lite.py`, `docs/deployment/lite-install.example.yaml`).
- **PASS:** база сходится к чистому `origin/main`; untracked-остатки не блокируют операцию и не
  попадают в деплоимый/собираемый артефакт.
- **FAIL:** untracked-остатки блокируют операцию либо остаются и клинят будущий деплой.

---

## AC-3 — Сохранность deploy-rollback-состояния и sibling-артефактов (жёсткое ограничение)

**Условие:** в `$REPO`/рядом присутствуют `.deploy-prev-image-*` (rollback), `deploy-hook.log`,
`<repos_dir>/.deploy-state-*`, `.merge-lease-*.json`, `.git/worktrees/*`.
- **PASS:** после гигиены **все** перечисленные артефакты на месте; rollback по
  `.deploy-prev-image-*` остаётся работоспособным; есть тест, доказывающий их неудаление.
- **FAIL:** гигиена удаляет хотя бы один из этих артефактов (особенно `.deploy-prev-image-*`).

---

## AC-4 — Happy-path без регресса (чистая база)

**Условие:** shared-база чистая, self-deploy выполняет pull.
- **PASS:** поведение и exit-коды (0/1/2, ORCH-036) — байт-в-байт прежние (обычный fast-forward);
  полный `pytest tests/ -q` зелёный.
- **FAIL:** изменилось наблюдаемое поведение/exit-код на чистой базе, либо красный регресс.

---

## AC-5 — Self-hosting safety

**Условие:** исполнение пути гигиены/деплоя.
- **PASS:** нет операций над веткой `main` на remote, нет force-push, нет рестарта прод-контейнера
  вне штатного гейта, нет удаления worktree/веток других активных задач; операции строго в пределах
  настроенного пути deploy-базы; тест/анализ это подтверждает.
- **FAIL:** любое из перечисленных нарушений присутствует или возможно.

---

## AC-6 — Kill-switch и обратимость

**Условие:** новый флаг выключен.
- **PASS:** деплой ведёт себя байт-в-байт как до ORCH-112 (голый `git pull origin main`); включение
  флага активирует устойчивое поведение; область скоупится на self-hosting (прочие репо не затронуты).
- **FAIL:** выключенный флаг меняет поведение, либо нет kill-switch, либо затронуты прочие репо.

---

## AC-7 — Сходимость после cancel/failed

**Условие:** задача отменена (STOP/ORCH-090) или job завершился `failed`, оставив остатки в
рабочем дереве deploy-базы.
- **PASS:** shared-база сходится к чистому `origin/main` (через автоочистку в деплое и/или дворник),
  и последующий self-deploy проходит без ручного вмешательства; покрыто интеграционным тестом.
- **FAIL:** остатки сохраняются и блокируют последующий деплой/git-операцию.

---

## AC-8 — Наблюдаемость

**Условие:** обнаружена грязная deploy-база.
- **PASS:** факт обнаружения и автоочистки (или отказ) — в логах (структурно) и в Telegram-алерте
  (кликабельный номер); алерт best-effort, never-raise (его сбой не валит деплой).
- **FAIL:** тихая очистка без следа в логах/уведомлениях, либо сбой алерта роняет деплой.

---

## AC-9 — Инвариант конвейера и БД не тронуты

**Условие:** диф задачи.
- **PASS:** `STAGE_TRANSITIONS` / реестр `QG_CHECKS` / семантика и имена `check_*` / machine-verdict
  ключи / схема БД / exit-code-контракт хука — байт-в-байт; структурные тесты конвейера зелёные.
- **FAIL:** любой из перечисленных контрактов изменён.

---

## AC-10 — Документация (golden source)

**Условие:** изменён функционал deploy-базы/гигиены.
- **PASS:** обновлены `docs/operations/INFRA.md` (инвариант deploy-база ≠ workspace) и
  `docs/architecture/README.md`; `CHANGELOG.md`/`CLAUDE.md` отражают изменение; ADR заведён на
  стадии `architecture` (после эскалации `escalate: full-cycle`).
- **FAIL:** функционал изменён, доки/ADR не обновлены (reviewer → finding ≥P1, CLAUDE.md §6).

---

## Сводная матрица AC ↔ FR/BR
| AC | Покрывает |
|----|-----------|
| AC-1 | BR-1 / FR-1 |
| AC-2 | BR-1, BR-2 / FR-1, FR-2 |
| AC-3 | NFR-2 / FR-1 (ограничение) |
| AC-4 | BR-5 / FR-1 |
| AC-5 | NFR-1 / FR-1, FR-2 |
| AC-6 | NFR-3, NFR-6 / FR-5 |
| AC-7 | BR-2 / FR-2 |
| AC-8 | BR-4 / FR-4 |
| AC-9 | NFR-5 / FR-1…FR-5 |
| AC-10 | BR-3 / FR-3 |
