# Поднять Swagger UI без внешней сети - **Секция:** Ядро - **Зачем:** Контракт читается машиной, но человеку нечем выполнить запрос к живому сервису из браузера, а внешних CDN в локальной сети нет - **Теги:** goal:read-api, sprint:2026-08-04 Человек открывает UI на отдельном пути и выполняет запрос к живому сервису — не имея интернета. Сервис живёт в локальной сети и на VPS без гарантии выхода наружу, поэтому статика отдаётся самим сервисом и лежит в бинаре: внешние CDN здесь означают «работает, пока работает чужой сайт». **UI — новый адресат недоверенного входа наизнанку:** он даёт человеку одним нажатием выполнить запрос к любому описанному маршруту, включая приём. Права на запись из браузера не должны появляться сами собой — это ровно та граница, которую описывает `docs/security.md`. Двигает строку «Завершения» цели: «Контракт чтения читается машиной». ## Критерии приёмки - UI открывается и выполняет запрос при отключённой внешней сети — оракул: запуск контейнера без доступа наружу - бинарь работает без каталога со статикой рядом — оракул: запуск одного файла из пустого каталога - запрос к маршруту приёма без заголовка с токеном приёма отклоняется, откуда бы он ни пришёл, а отдаваемая UI статика токена приёма в себе не держит — оракул: тест на обработчике приёма плюс поиск токена в отдаваемой статике ## Рамки Схема не трогается. Берётся после спеки. Наружу ничего не выкладывается — это решение человека и отдельная задача деплоя.