---
work_item: ORCH-019
stage: architecture
author_agent: architect
status: proposed
created_at: 2026-06-10
model_used: claude-opus-4-8
---

# adr-0032: Багфикс-трек — укороченный маршрут конвейера для багов (ORCH-019)

## Статус
Proposed

## Контекст

Любая задача идёт по полному конвейеру `analysis → architecture → development → review → testing
→ deploy-staging → deploy → done`. Для мелкого бага стадия `architecture` (отдельный прогон
opus-агента `architect` + ADR + exit-гейт `check_architecture_done`) избыточна и тратит
токены/время (прецедент ET-9/ET-014 ~35 мин).

**Корневой инвариант (нерушимый):** упрощаем только *аналитику/архитектуру*; ни один Quality
Gate / под-гейт (security/merge/coverage/image-freshness) / exit-код deploy-хука — НЕ ослаблен
(урок ET-8: срезанная проверка = недоделка на проде).

Кросс-каттинговость: затрагивает семантику маршрутизации (`advance_stage`), вводит новый
leaf-компонент `src/bug_fast_track.py` и аддитивную колонку `tasks.track` → регистрируется
сквозным ADR.

## Решение

Багфикс-трек — **свойство планировщика/точки входа, НЕ Quality Gate**.

1. **Классификация** (`src/bug_fast_track.py`, leaf never-raise по образцу `serial_gate`/`labels`):
   задача с меткой Plane `Bug` (`bug_fast_track_label`, читается аппаратом ORCH-089
   `labels.has_label`) помечается `track='bug'`. `applies(repo)` (локально, без сети) — первым;
   `has_label` (сеть) — только при `applies==True`; чтение метки **только** в `start_pipeline`,
   никогда в горячем `claim_next_job` (anti-stall).

2. **Хранение** — аддитивная идемпотентная колонка `tasks.track TEXT DEFAULT 'full'`
   (`_ensure_column`, паттерн `tasks.cancelled_at` ORCH-090); читается в `advance_stage` из БД
   (не из сети).

3. **Routing-override** — `STAGE_TRANSITIONS` и `get_next_stage`/`get_agent_for_stage` остаются
   **чистыми** (1:1). В `advance_stage`, на ребре выхода из `analysis`, при `track='bug'`:
   `next_stage` → `development` (вместо `architecture`), `next_agent` → `developer` (вместо
   `architect`). Багфикс физически минует стадию `architecture` → её exit-гейт
   `check_architecture_done` и `06-adr/` для багфикса не исполняются.

4. **Гейт `analysis` не трогаем** — `check_analysis_complete`/`check_analysis_approved` байт-в-байт
   прежние; lite-аналитик эмитит все 4 файла (01-bug-report / 02-03 краткие заглушки / 04 план
   обязательного регресс-теста). Экономия — пропуск всей стадии `architecture`, не число файлов.

5. **Эскалация** (обратимость) — `POST /bug-fast-track/escalate?work_item=<id>` сбрасывает
   `track→'full'` (+ self-escalate мини-аналитика); задача далее идёт через `architecture`.

6. **Условность/откат** — `bug_fast_track_enabled` (kill-switch), `bug_fast_track_label`,
   `bug_fast_track_repos` (CSV; **пусто → self-hosting only**). `False`/неприменимый репо →
   путь старта и маршрут **байт-в-байт** прежние.

7. **Наблюдаемость** — read-only блок `bug_fast_track` в `GET /queue` (флаг/область/метка +
   счётчик `track='bug'` + метрика экономии из `agent_runs`); лог на решение о маршруте; опц.
   `🐞` в Telegram-карточке.

## Кросс-каттинговые инварианты (НЕ нарушаются)

- `STAGE_TRANSITIONS` структурно не меняется (нет новых/удалённых стадий); `cancelled`/`done`
  стоки и предикаты терминальности (ORCH-090) не затронуты.
- Реестр `QG_CHECKS`, сигнатуры `check_*`, вердикт-ключи (`verdict:`/`result:`/`deploy_status:`/
  `staging_status:`/`security_status:`/`coverage_status:`), порядок под-гейтов — байт-в-байт.
- Врезка ORCH-019 в `advance_stage` — ТОЛЬКО на ребре выхода из `analysis`, ДО всех deploy-edge
  под-гейтов (ORCH-022/043/027/058) и Phase A/B (ORCH-036/059) → их инварианты сохранены.
- Композиция с serial-gate (ORCH-088), auto-label (ORCH-089), coverage-gate (ORCH-027),
  merge-gate (ORCH-043) — багфикс-задача остаётся обычной задачей репо.

## Последствия

- **+** Багфикс минует стадию `architecture` (основная экономия), гейты качества сохранены.
- **+** Аддитивно, под kill-switch, per-repo, never-raise, fail-safe → полный цикл; нулевая
  регрессия для enduro и orchestrator при выключении.
- **−** lite-аналитик эмитит 02/03 заглушки (компромисс ради неизменности гейта); эскалация v1
  требует операторского действия (авто-триаж сложности — будущее, ORCH-13/Вариант 3).
- **Откат:** `bug_fast_track_enabled=False` (мгновенно); колонка `tasks.track` аддитивна и
  безвредна (дефолт `'full'`).

## Связанные решения
- ORCH-089 (auto-label) — переиспользуемый аппарат label-чтения: [adr-0018](adr-0018-auto-label-gates.md)
- ORCH-088 (serial gate) — композиция очереди репо
- ORCH-027 (coverage-gate) — структурный союзник BR-4: [adr-0029](adr-0029-coverage-gate.md)
- ORCH-090 (cancelled) — паттерн аддитивной колонки `tasks.*`: [adr-0026](adr-0026-stop-cancel-task.md)

## Ссылки
- Детальный ADR задачи: `docs/work-items/ORCH-019/06-adr/ADR-001-bug-fast-track.md`
- BRD/TRZ/AC: `docs/work-items/ORCH-019/01-brd.md`, `02-trz.md`, `03-acceptance-criteria.md`
</content>
