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