63 lines
4.2 KiB
Markdown
63 lines
4.2 KiB
Markdown
---
|
||
work_item: ORCH-019
|
||
stage: architecture
|
||
author_agent: architect
|
||
status: proposed
|
||
created_at: 2026-06-10
|
||
model_used: claude-opus-4-8
|
||
---
|
||
|
||
# 07 — Инфраструктурные требования (Infra Requirements): ORCH-019 — Багфикс-трек
|
||
|
||
Work Item: **ORCH-019** · Repo: **orchestrator** · Стадия: architecture
|
||
|
||
> **Топология не меняется.** Один прод-контейнер `orchestrator` (8500) + staging (8501) на mva154,
|
||
> общая SQLite-БД. ORCH-019 — чисто прикладное изменение под флагом. Этот документ фиксирует
|
||
> **предусловия включения** (Plane-метка + env-флаги), не новую инфраструктуру.
|
||
|
||
---
|
||
|
||
## 1. Предусловие: метка `Bug` в Plane-проекте (блокирующее для активации)
|
||
|
||
Багфикс-трек активируется по метке Plane с именем `bug_fast_track_label` (дефолт `Bug`),
|
||
читаемой аппаратом ORCH-089 (`fetch_issue_labels`/`get_project_labels`). **Метка должна
|
||
существовать** в Plane-проекте orchestrator (и в любом проекте, добавленном в
|
||
`bug_fast_track_repos`).
|
||
|
||
- Её **отсутствие = fail-safe полный цикл** (`has_label → False`), не сбой. Включение флага без
|
||
заведённой метки безопасно, но эффекта не даёт.
|
||
- Создаётся оператором в Plane вручную (как `autoApprove`/`autoDeploy` для ORCH-089).
|
||
|
||
## 2. Конфигурация (env-флаги, `src/config.py`)
|
||
|
||
| Флаг | Env | Дефолт | Назначение |
|
||
|------|-----|--------|-----------|
|
||
| `bug_fast_track_enabled` | `ORCH_BUG_FAST_TRACK_ENABLED` | `False` | kill-switch; `False` → путь старта/маршрут строго прежние (нулевая регрессия) |
|
||
| `bug_fast_track_label` | `ORCH_BUG_FAST_TRACK_LABEL` | `Bug` | имя метки Plane для распознавания бага |
|
||
| `bug_fast_track_repos` | `ORCH_BUG_FAST_TRACK_REPOS` | `""` (пусто) | CSV-область; пусто → **self-hosting only** (`orchestrator`) |
|
||
|
||
> Рекомендация выката: `enabled=False` до момента, когда метка `Bug` заведена в Plane и проведён
|
||
> staging-прогон. Дефолт области (пустой CSV) = self-hosting only → enduro не затронут даже при
|
||
> включённом флаге.
|
||
|
||
## 3. Зависимости / образ
|
||
|
||
- **Новых pip-зависимостей нет.** Переиспользуются существующие `httpx`/`plane_sync` (label-чтение)
|
||
и `sqlite3` (колонка `tasks.track`). Пересборка образа из-за зависимостей не требуется.
|
||
- **Миграция БД** (`tasks.track`) применяется идемпотентно при старте приложения (`_ensure_column`)
|
||
— без ручного шага, без даунтайма (ALTER ADD COLUMN на SQLite — мгновенный).
|
||
|
||
## 4. Self-hosting безопасность (NFR-6)
|
||
|
||
- Механизм **не** рестартит/не роняет прод-контейнер, **не** пушит/force-push в `main`. Это
|
||
routing-решение планировщика + аддитивная колонка + read-only наблюдаемость.
|
||
- Выкат самого ORCH-019 на прод орка идёт штатным конвейером через обязательный
|
||
`deploy-staging` (8501) → `Confirm Deploy` (ORCH-059). Топология/процедура — `docs/operations/INFRA.md`.
|
||
|
||
## 5. Новый эндпоинт (эскалация)
|
||
|
||
`POST /bug-fast-track/escalate?work_item=<id>` — админ-ручка возврата задачи в полный цикл
|
||
(`track → 'full'`), по образцу `POST /serial-gate/unfreeze`. Без новой инфраструктуры (тот же
|
||
FastAPI-приложение/порт). Read-only блок `bug_fast_track` добавляется в существующий `GET /queue`.
|
||
</content>
|