20 lines
3.5 KiB
Markdown
20 lines
3.5 KiB
Markdown
# 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). A1–A3/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-гейта). Эскалация не требуется.
|