--- 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=` сбрасывает `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`