6.2 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-124 | architecture | architect | proposed | 2026-06-16 | claude-opus-4-8 |
10 — Технические риски: ORCH-124 — serial-gate «пауза без блокировки»
Work Item: ORCH-124 · Repo: orchestrator · Стадия: architecture
Информационный (гейтом не парсится). Перечисляет риски реализации и митигейшн; покрывает R-1…R-5 из BRD §8.
Реестр рисков
| ID | Риск | Вер. | Влия. | Митигейшн |
|---|---|---|---|---|
| TR-1 (= R-1, ключевой) | Пауза vs анти-stale-base ORCH-088. Успешник срезает ветку от main без кода паузнутого предшественника; при возобновлении предшественника возможна stale-база/затирание. |
Сред. | Выс. | D8: новой rebase-машинерии нет — свежесть гарантируют существующие механизмы. Паузнутая-в-analysis задача при resume режет ветку отложенно (ORCH-088) от свежего origin/main. Материализованная — ребейзится на merge-gate (auto_rebase_onto_main под merge-lease ORCH-026/093) + re-test (ORCH-110). Нормальная задача (paused_at IS NULL) по-прежнему держит гейт (BR-3/AC-2). Тест AC-4. |
| TR-2 (= R-2) | Неявное/случайное освобождение гейта (баг в детекте намерения) ослабит сериализацию для всех. | Низ. | Выс. | Освобождение только по явной операторской паузе через эндпоинт (D7); никакого эвристического само-распаузивания (AC-3). Дефолтный флаг безопасен (no-op без явной паузы). Тест AC-3. |
| TR-3 (= R-3) | Рассинхрон Plane-статус ↔ DB-сигнал паузы (потерянный webhook оставит сигнал устаревшим). | Низ. | Сред. | Механизм НЕ опирается на webhook/Plane-статус (D1): сигнал — durable колонка tasks.paused_at, пишется прямым операторским вызовом, идемпотентен, переживает рестарт. Plane-статус — только косметическая индикация. |
| TR-4 (= R-4) | Регрессия гармонизированного терминала {done,cancelled} в task_deps/stages.py. |
Низ. | Выс. | D3: пауза — отдельная ось; терминал {done,cancelled} в serial_gate/task_deps/stages.py байт-в-байт. task_deps колонку paused_at не читает (паузнутая зависимость по-прежнему блокирует, FR-6/AC-5). Структурный тест AC-8. |
| TR-5 (= R-5) | Инверсия fail-direction (ошибка в pause-ветке роняет claim или меняет fail-OPEN/fail-CLOSED). | Низ. | Выс. | D9: pause-терм внутри try/except build_claim_clause → fail-OPEN сохранён; freeze fail-CLOSED не тронут; все pause-функции never-raise. Тест AC-9 (инъекция ошибки → claim не падает). |
| TR-6 | «Залипшая пауза» — оператор забыл resume, задача навсегда вне FIFO-учёта. |
Сред. | Низ. | Наблюдаемость: ключ paused + reason в GET /queue (D5); resume идемпотентен; durable сигнал не теряется. Операторская гигиена (как «вечный freeze» ORCH-088). |
| TR-7 | Дрейф трёх точек serial-gate (одна правится, другие нет → расхождение SQL-гейта и снапшота). | Низ. | Сред. | D4: один предикат «активна» во всех трёх точках, под одним под-флагом; анти-дрейф-тест (одинаковый ответ на одинаковый вход). |
| TR-8 | Миграция колонки на общей прод-БД (self-hosting) затронет enduro. | Низ. | Сред. | Идемпотентный _ensure_column, дефолт NULL (паттерн cancelled_at/track); при дефолтном флаге и отсутствии паузнутых задач — нулевая регрессия (08-data-requirements). |
Сводный вывод
Доминирующий класс — семантический конфликт паузы с анти-stale-base (TR-1), разрешённый
переиспользованием существующих механизмов свежести (D8), без новой машинерии. Остальные риски —
стандартные для leaf-расширения serial-gate (fail-direction, дрейф точек, миграция), покрыты паттернами
ORCH-088/090. Изменение аддитивно, под независимым под-флагом, never-raise, без правки
STAGE_TRANSITIONS/QG_CHECKS/check_*/терминала/схем существующих таблиц.
Эскалация arch:major-change не требуется (нет новой стадии/компонента/QG/смены БД — аддитивная
правка планировщика внутри существующего компонента serial-gate). Возврат в анализ не требуется (ТЗ
удовлетворяется без нарушения принципов архитектуры). Остаточный риск для прод-конвейера (self-hosting) —
низкий: дефолтное поведение — истинный no-op до явной операторской паузы; полный откат — один env-флаг.