fix: narrow production proxy trust network

This commit is contained in:
ik
2026-09-22 20:36:33 +07:00
parent d7d1a2873a
commit 14ccfec5e6
3 changed files with 11 additions and 7 deletions
+1 -1
View File
@@ -33,7 +33,7 @@ R-пункты уточняют критерии существующих B/G/U/
- [x] **R08 · P1 · Достоверная аналитика снастей (G07).** Публичные пороги закреплены минимум на 3 наблюдениях и 2 игроках независимо от URL-параметров; окно и freshness используют время улова с fallback на время импорта, ответ ограничен `limit`, а canonical ID назначается только при полном однозначном покрытии компонентных наблюдений. `1/1` нельзя превратить в рекомендацию, unresolved не получает ложную привязку.
- [x] **R09 · P1 · Полное удаление личных данных.** Retention и admin-delete загружают дочерние компоненты, очищают их `source_url/raw_payload` вместе с родительским report и сбрасывают upload-token; retention теперь обнаруживает старые reports даже при уже очищенных родительских полях, если provenance осталась в component. Повторная очистка остаётся безопасной; S3/БД failure drill — отдельный эксплуатационный gate.
- [x] **R10 · P1 · Единый cooldown и стадии запроса.** Community CLI уже освобождал резерв до HTTP-ответа; media CLI теперь использует тот же контракт: DNS/connection/OSError освобождают только собственный резерв, HTTPError или ошибка валидированного тела сохраняют cooldown, batch освобождает окно только если ни один asset не получил ответ. Offline regression добавлен; scheduler сохраняет site-wide координацию.
- [ ] **R18 · P1 · Границы локального и production запуска.** Первый шаг выполнен: локальный Compose публикует API, web и MinIO только на loopback через `RF4_BIND_ADDRESS` с явным opt-in LAN; production по умолчанию доверяет приватной Docker-сети Caddy и позволяет сузить `TRUSTED_PROXY_CIDRS` до точного edge-CIDR. Rate-limit игнорирует XFF от недоверенного peer и различает двух клиентов через trusted proxy. Остались реальная proxy-цепочка на сервере, точный CIDR после развёртывания и A07 acceptance.
- [ ] **R18 · P1 · Границы локального и production запуска.** Первый шаг выполнен: локальный Compose публикует API, web и MinIO только на loopback через `RF4_BIND_ADDRESS` с явным opt-in LAN; production использует выделенную edge-сеть `172.30.0.0/24`, а `TRUSTED_PROXY_CIDRS` синхронизирован с её CIDR и может быть явно изменён вместе с `EDGE_NETWORK_SUBNET`. Rate-limit игнорирует XFF от недоверенного peer и различает двух клиентов через trusted proxy. Остались реальная proxy-цепочка на сервере и A07 acceptance.
- [x] **R11 · P2 · Честное качество и происхождение media (B25).** API использует точный hostname allowlist для `rf4db`/`rf4map`/`rf4-stat`, неизвестные и malformed URL получают `unknown`, а не ложный `rf4-official`. UI различает низкое разрешение и наличие проверенной card-версии, не утверждая отсутствие альтернатив без данных manifest. Cache/revocation и production visual acceptance остаются отдельными gates.
- [x] **R14 · P2 · Подтверждённый каталог и demo seed.** `SEED_DEMO_DATA=false` больше не создаёт редакционные описания тестовых точек; demo-уловы имеют отдельный `seed:` namespace и catalog audit считает их отдельно от подтверждённых reports. Loaded canonical counts и external staging остаются раздельными, media count не используется как catalog count.
- [x] **R15 · P2 · Восстановление пользовательских действий.** Report UI теперь различает idempotency-конфликт и обычную ошибку, восстанавливает draft и предлагает повтор с новым ключом; plan получил восьмисекундный undo после удаления с обработкой storage errors. Draft сохраняется при 422/429/timeout, повтор не требует заново заполнять весь улов.