Files
orchestrator/docs/architecture/adr/adr-0032-bug-fast-track.md

6.7 KiB
Raw Blame History

work_item, stage, author_agent, status, created_at, model_used
work_item stage author_agent status created_at model_used
ORCH-019 architecture architect proposed 2026-06-10 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-overrideSTAGE_TRANSITIONS и get_next_stage/get_agent_for_stage остаются чистыми (1:1). В advance_stage, на ребре выхода из analysis, при track='bug': next_stagedevelopment (вместо architecture), next_agentdeveloper (вместо 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
  • ORCH-088 (serial gate) — композиция очереди репо
  • ORCH-027 (coverage-gate) — структурный союзник BR-4: adr-0029
  • ORCH-090 (cancelled) — паттерн аддитивной колонки tasks.*: adr-0026

Ссылки

  • Детальный 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