Этот документ фиксирует минимальный runtime contract между UI host-приложениями и apps/server. Он не заменяет полноценные deployment runbook и не дублирует инструкции по конкретным окружениям.
Рекомендуемый базовый путь для UI hosts:
- browser открывает host-приложение;
- UI обращается к
apps/server; - backend публикует
/api/graphql,/api/fn/*,/api/auth/*и связанные runtime surfaces; - reverse proxy или host runtime скрывает лишнюю cross-origin сложность там, где это возможно.
Для локальной отладки предпочтителен same-origin или proxy-aware режим, где UI и backend выглядят как один origin для браузера. Это уменьшает CORS-ошибки, упрощает auth/session flows и делает transport contract предсказуемым.
Минимум, который должен быть доступен:
- UI host;
apps/server;- рабочий auth path;
- рабочий GraphQL path;
- если host Leptos — рабочий
#[server]path.
UI host должен уметь достучаться до:
/api/graphql/api/auth/*/api/fn/*для Leptos hosts- health/runtime surfaces при operator-level диагностике
Если UI и backend находятся на разных origins, backend обязан явно поддерживать требуемый CORS и auth contract. Если это не нужно, same-origin схема остаётся предпочтительной.
Минимальный smoke:
- Открывается login surface host-приложения.
- Работает вход и загрузка текущего пользователя/сессии.
- Успешны запросы к
/api/auth/*. - Успешен запрос к
/api/graphql. - Для Leptos hosts, если затронут native path, успешны вызовы
/api/fn/*.
Если эти шаги проходят, host ↔ server contract собран корректно.
Для module-owned admin surfaces runtime contract включает не только transport, но и routing:
- selection state хранится в URL;
- module-owned admin UI читает его через host route context;
- valid user-driven select/open пишет canonical typed
snake_casekey обратно в query; - reset/delete/archive/close очищают соответствующий key;
- invalid или удалённый entity id даёт empty state и не оставляет stale detail/form state.
Для Leptos host этот contract проходит через UiRouteContext + host-provided policy для
leptos-ui-routing. Для apps/next-admin действует тот же schema-level contract через локальные
Next helpers. Legacy keys вроде id, pageId, topicId не поддерживаются.
Проверить:
- auth token или session transport;
- tenant/channel headers, если они обязательны для конкретного сценария;
- не сломан ли backend-side auth/runtime contract.
Обычно это означает, что UI и backend работают cross-origin без нужной backend-конфигурации. Предпочтительный фикс — same-origin/proxy path, а не рост ad hoc исключений.
Проверить:
- что reverse proxy действительно пробрасывает
/api/*; - что
apps/serverподнят на ожидаемом порту; - что выбранный UI host использует корректный transport contract для текущего runtime mode.
Этот документ намеренно не хранит:
- длинные инструкции по Docker Compose, VPS, Kubernetes или PaaS;
- install-скрипты и bootstrap-runbook;
- подробные production rollout steps.
Такие инструкции должны жить в отдельных deployment/runbook документах, а здесь остаётся только живой UI ↔ server contract.