140 lines
9.7 KiB
Markdown
140 lines
9.7 KiB
Markdown
---
|
||
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>
|