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

# 03 — Критерии приёмки (Acceptance Criteria): ORCH-019 — Режим багфиксинга

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

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

> ⚠️ Корневой инвариант (см. AC-3/AC-8): срезается только аналитика/архитектура; ни один Quality
> Gate не ослаблен. Это главное условие приёмки — нарушение = безусловный FAIL всей задачи.

---

## AC-1 — Классификация задачи по метке `Bug`

**Условие:** issue с меткой Plane `bug_fast_track_label` (дефолт `Bug`) при включённом флаге и
применимом репо распознаётся как багфикс-задача.
- **PASS:** при `bug_fast_track_enabled=True` и `applies(repo)==True` для issue с меткой `Bug`
  `is_bug_task(...)` возвращает `True` (через `labels.has_label` → `plane_sync.fetch_issue_labels`);
  задача стартует на багфикс-треке. Источник метки — Plane API, не payload вебхука.
- **FAIL:** метка `Bug` игнорируется; ИЛИ тип читается из payload вебхука; ИЛИ задача без метки
  `Bug` ошибочно попадает на багфикс-трек.

---

## AC-2 — Укороченный маршрут: пропуск стадии `architecture`

**Условие:** багфикс-задача проходит конвейер, минуя стадию `architecture`.
- **PASS:** для багфикс-задачи переход из `analysis` ведёт в `development` (а не `architecture`);
  стадия `architecture` и её требование `06-adr/` для багфикса не исполняются; задача доходит до
  `done`. Маршрут не-баг задачи остаётся `analysis → architecture → development → …`.
- **FAIL:** багфикс-задача всё равно проходит `architecture`; ИЛИ не-баг задача начинает пропускать
  `architecture`; ИЛИ `STAGE_TRANSITIONS` изменён структурно (новые/удалённые стадии).

---

## AC-3 — Все Quality Gate'ы исполнены на багфикс-треке (корневой инвариант)

**Условие:** на багфикс-треке исполняются все гейты качества без изменений.
- **PASS:** для багфикс-задачи отрабатывают `check_ci_green`, `check_reviewer_verdict`
  (`12-review.md`), `check_tests_passed` (`13-test-report.md`), `check_staging_status`,
  `check_deploy_status` и под-гейты ребра `deploy-staging→deploy` (security → merge → coverage →
  image-freshness) и merge-verify ребра `deploy→done`. Реестр `QG_CHECKS`, сигнатуры `check_*`,
  вердикт-ключи (`verdict:`/`result:`/`deploy_status:`/`staging_status:`/`security_status:`/
  `coverage_status:`) и порядок под-гейтов — байт-в-байт прежние.
- **FAIL:** хоть один гейт качества пропущен/ослаблен/изменён на багфикс-треке; ИЛИ изменён состав
  `QG_CHECKS` / имя или регистр любого вердикт-ключа / порядок под-гейтов.

---

## AC-4 — Обязательный регресс-тест

**Условие:** багфикс фиксирует дефект тестом.
- **PASS:** PR багфикса содержит новый/изменённый тест, воспроизводящий исправляемый дефект
  (красный на коде до фикса, зелёный после); требование закреплено в `04-test-plan.yaml` багфикса
  и в reviewer-оси (`.openclaw/agents/reviewer.md`: фикс без теста → finding ≥P1 / REQUEST_CHANGES).
- **FAIL:** багфикс мержится без теста-фиксатора; ИЛИ reviewer-ось отсутствует/не срабатывает; ИЛИ
  тест присутствует, но не падает на исходном (нефиксированном) коде.

---

## AC-5 — Эскалация сложного бага в полный цикл

**Условие:** сложный/архитектурный/визуальный баг возвращается в полный цикл.
- **PASS:** существует и документирован путь эскалации (минимум ручной: снятие метки `Bug` /
  перевод стадии, и/или решение мини-аналитика «баг сложный → не фаст-трекать»); после эскалации
  задача проходит штатный маршрут с `architecture`.
- **FAIL:** механизма эскалации нет; ИЛИ багфикс-задача необратимо застревает без `architecture`,
  когда баг требует архитектурного решения/макета.

---

## AC-6 — Fail-safe → полный цикл (нулевая регрессия)

**Условие:** при выключении/ошибке/неприменимости — строго прежнее поведение (полный цикл).
- **PASS:** при `bug_fast_track_enabled=False`, неприменимом репо, ошибке/таймауте/неоднозначности
  чтения метки, отсутствии метки `Bug` — задача стартует на `analysis` и идёт маршрутом с
  `architecture` (как до ORCH-019). Логика never-raise: ошибка не роняет `start_pipeline`/вебхук.
  При выключенном флаге путь старта и маршрут идентичны текущим (диффом по поведению — нулевые).
- **FAIL:** ошибка/неоднозначность приводит к молчаливому пропуску стадий; ИЛИ исключение из
  логики классификации роняет вебхук/конвейер; ИЛИ при выключенном флаге поведение отличается от
  прежнего.

---

## AC-7 — Наблюдаемость трека и метрика стоимости

**Условие:** факт багфикс-трека и экономия наблюдаемы.
- **PASS:** `GET /queue` содержит аддитивный read-only блок `bug_fast_track` (флаг/область/метка +
  счётчик задач на треке + агрегатная метрика экономии стадий/agent-runs/токенов/времени);
  решение о маршруте логируется; существующие ключи `GET /queue` не изменены.
- **FAIL:** трек/метрика ненаблюдаемы; ИЛИ блок ломает существующий контракт `GET /queue`; ИЛИ
  ошибка построения блока роняет эндпоинт (нарушен never-raise).

---

## AC-8 — Аддитивность и self-hosting безопасность

**Условие:** изменение аддитивно и безопасно для общего прод-инстанса.
- **PASS:** миграции БД (если есть) аддитивны и идемпотентны (`_ensure_column`/`CREATE TABLE IF NOT
  EXISTS`); enduro при выключенном/неприменимом флаге не затронут; механизм не рестартит/не роняет
  прод-контейнер, не пушит/force-push в `main`. Полный регресс `tests/` зелёный.
- **FAIL:** ломающая миграция/изменение существующих контрактов; ИЛИ затронут enduro при выключенном
  флаге; ИЛИ механизм трогает прод-контейнер/`main`; ИЛИ красный `tests/`.

---

## AC-9 — Композиция с существующими гейтами

**Условие:** багфикс-трек корректно сосуществует с ORCH-088/089/027/043.
- **PASS:** багфикс-задача корректно учитывается serial-gate (ORCH-088) как обычная задача репо;
  `autoApprove`/`autoDeploy` (ORCH-089) работают на багфикс-треке; coverage-gate (ORCH-027) и
  merge-gate (ORCH-043) исполняются штатно. Интеграционный тест композиции зелёный.
- **FAIL:** изменённая точка входа ломает serial-очередь/auto-label/merge/coverage; ИЛИ багфикс-
  задача обходит serial-gate.

---

## Сводная матрица AC ↔ BR/FR
| AC | Покрывает |
|----|-----------|
| AC-1 | BR-1 / FR-1 |
| AC-2 | BR-2 / FR-2 |
| AC-3 | BR-3 / FR-3 / NFR-1 |
| AC-4 | BR-4 / FR-4 |
| AC-5 | BR-5 / FR-5 |
| AC-6 | BR-6 / FR-6 / NFR-2 / NFR-3 |
| AC-7 | BR-7 / FR-7 |
| AC-8 | BR-8 / NFR-2 / NFR-6 |
| AC-9 | NFR-7 |
</content>
