# 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-гейта). Эскалация не требуется.