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

30 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Технические риски — 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` НЕ ставится; возврат в Анализ не требуется — ТЗ
реализуемо без нарушения принципов.