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