Files
orchestrator/docs/work-items/ORCH-048/10-tech-risks.md
claude-bot f77825b3c4
All checks were successful
CI / test (push) Successful in 12s
architect(ET): auto-commit from architect run_id=146
2026-06-06 05:20:41 +00:00

20 lines
3.5 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.
# 10 — Технические риски
**Work Item:** ORCH-048
**Stage:** architecture
**Решение:** ADR-001 — B6 читает реестр через HTTP-эндпоинт `GET /projects` живого staging-инстанса.
| ID | Риск | Вероятн. | Влияние | Митигация |
|----|------|----------|---------|-----------|
| R-1 | Эндпоинт `GET /projects` затрагивает прод-`main.py` (self-hosting) — добавление роута в инструмент, обслуживающий все проекты | низкая | высокое | Эндпоинт additive и read-only; существующие роуты не меняются. Доставка в прод — штатно через staging-гейт (ADR-0003), без внепланового рестарта прод-контейнера. |
| R-2 | Утечка чувствительных данных через `/projects` | низкая | среднее | Отдавать только id / repo / prefix / name. Токены, webhook-secret, пути — НЕ включать. Зафиксировано контрактом в ADR-001. |
| R-3 | Недоступность `/projects` даёт ложный PASS B6 (потеря защитной функции) | низкая | высокое | TR-4: при не-200 / отсутствии ключа / сетевом сбое — детерминированный FAIL с понятным detail; никогда не PASS «по умолчанию». |
| R-4 | Логика вердикта B6 не выделена → невозможно покрыть оба исхода без живого инстанса | средняя | среднее | Вынести вердикт в чистую `_evaluate_b6(known: set[str]) -> tuple[bool, str]`; unit-тест на clean→PASS и polluted→FAIL (AC-2), без docker/HTTP. |
| R-5 | Регрессия других чеков / случайная правка `src/projects.py` или `.env*` | низкая | высокое | Менять только блок B6 в `staging_check.py` + добавить эндпоинт. `git diff` не должен содержать `src/projects.py`, `.env*` (AC-3). A1A3/B4/B5/C — без изменений. |
| R-6 | Документация (golden source) разойдётся с кодом | средняя | среднее | В том же PR обновить README (API-таблица + B6), CHANGELOG, STAGING_CHECK.md. Reviewer обязан завернуть при отсутствии (CLAUDE.md правило 6). |
| R-7 | Нарушение конвенции «stdlib-only» в `scripts/staging_check.py` | низкая | низкое | B6 использует существующий `_get(...)` (urllib) — сторонние зависимости не добавляются (TR-5). |
| R-8 | Эндпоинт не сериализуется (ProjectConfig — frozen dataclass с dict-полями) | низкая | низкое | Возвращать явный dict с нужными полями, не сам dataclass; `agent_models`/`agent_efforts` в ответ не включать. |
## Открытых архитектурных вопросов нет
ТЗ удовлетворяется без нарушения принципов (SQLite не затронут, без новых зависимостей, без новой стадии/QG, без рестарта прода вне staging-гейта). Эскалация не требуется.