Files
orchestrator/docs/work-items/ORCH-124/10-tech-risks.md
claude-bot de4f067655
All checks were successful
CI / test (push) Successful in 1m12s
architect(ET): auto-commit from architect run_id=764
2026-06-16 19:17:43 +03:00

6.2 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-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-флаг.