4.1 KiB
4.1 KiB
Технические риски — 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НЕ ставится; возврат в Анализ не требуется — ТЗ реализуемо без нарушения принципов.