Files
orchestrator/docs/work-items/ORCH-046/10-tech-risks.md
claude-bot 29e83341b5
All checks were successful
CI / test (push) Successful in 11s
architect(ET): auto-commit from architect run_id=140
2026-06-06 04:36:40 +00:00

4.1 KiB
Raw Permalink Blame History

Технические риски — ORCH-046

Work Item ID: ORCH-046 Stage: architecture Author: architect Date: 2026-06-06

Связано: 06-adr/ADR-001-embed-findings-in-task-desc.md.

# Риск Вероятн. Влияние Митигация Контроль (AC/тест)
R-1 Исключение из парсера всплывает в advance_stage → встаёт конвейер ВСЕХ проектов (self-hosting, общий инстанс) Низк. Критич. Контракт «never raise» в review_parse.py; вызов в stage_engine обёрнут так, что пустой результат → fallback на прежнюю ссылку-строку AC-4; юнит-кейсы «нет файла / битый YAML / пустой / только P3» в tests/test_review_parse.py
R-2 Регрессия в последовательности отката или полях AdvanceResult (меняется не только task_desc) Низк. Высок. Жёсткий инвариант ТЗ §3.3: трогать ТОЛЬКО строку task_desc; порядок вызовов и условия retry неизменны AC-6; существующие tests/test_stage_engine.py (rollback/retry) зелёные
R-3 Парсер чувствителен к формату артефактов: дрейф 12-review.md/13-test-report.md → пустой результат Сред. Низк. Распознавание P0/P1 устойчиво к регистру/тире; при несовпадении → "" + fallback на ссылку (деградация, не отказ) AC-1/AC-2/AC-4
R-4 Раздувание task_desc длинными findings → рост стоимости/потеря фокуса developer-агента Сред. Низк. Лимиты MAX_FINDINGS_CHARS/MAX_FAILURES_CHARS (~2000) + маркер …(truncated); only P0/P1 (P2/P3 отброшены) AC-1; проверка усечения в юнит-тестах
R-5 Случайный выход за out-of-scope (правка check_*, QG_CHECKS, сигнатур, webhooks, build_status_comment) Низк. Сред. Явный out-of-scope в ТЗ §4/§6; ревью diff AC-7; test_qg_registry_snapshot зелёный
R-6 Прод-деплой self без страховки staging Низк. Критич. Обязательная стадия deploy-staging (8501); прод orchestrator (8500) не рестартить в разработке/тестинге adr-0003; стадийный гейт check_staging_status
R-7 Дублирование defensive-парсинга (3-й модуль рядом с frontmatter.py и _parse_tests_verdict) → техдолг Сред. Низк. Осознанно принято (как ORCH-016/ADR-001 §5): малый blast radius важнее DRY; слияние парсеров — отдельная follow-up задача — (техдолг, не блокер)

Заметки

  • Граничный try в ядре. Даже при контракте «never raise» в review_parse, вызов в stage_engine следует считать недоверенным: подстановка результата в task_desc не должна зависеть от внутренней корректности парсера. Fallback на ссылку-строку обязателен и при пустом результате, и при любой неожиданности.
  • Эскалация не требуется. Изменение укладывается в принципы (минимум зависимостей, raw-парсинг без новых либ, без новых компонентов/стадий/QG). Лейбл arch:major-change НЕ ставится; возврат в Анализ не требуется — ТЗ реализуемо без нарушения принципов.