feat(foundry): productionize Cesium Map Page and platform runtime
This commit is contained in:
+27
-9
@@ -1,13 +1,13 @@
|
||||
# Map Template
|
||||
|
||||
`Map Page 0.1.0` — первый готовый функциональный шаблон NDC Module Studio. Он описывает пространственный интерфейс через стабильные доменные сущности, а не через API конкретного renderer.
|
||||
`Map Page 0.1.0` — первый готовый функциональный шаблон NDC Module Foundry. Он описывает пространственный интерфейс через стабильные доменные сущности, а не через API конкретного renderer.
|
||||
|
||||
## Границы ответственности
|
||||
|
||||
- Page Template владеет компоновкой страницы, Inspector, Toolbar, Assistant entry point, слотами данных и системными действиями.
|
||||
- Map Scene Fixture задаёт минимальный проверочный набор пространственных сущностей и состояний.
|
||||
- Application Manifest фиксирует экземпляр страницы, выбранный Design Profile и feature visibility.
|
||||
- Platform capability binding позже связывает слоты шаблона с NDC runtime и потоками данных.
|
||||
- Platform capability binding связывает слоты шаблона с scoped data products через Foundry runtime BFF.
|
||||
- Renderer adapter преобразует provider-neutral scene в Cesium или другой поддерживаемый renderer.
|
||||
|
||||
Engine/NDC остаётся средой создания и исполнения автоматизаций. Он не является владельцем визуального языка Map Template и не экспортирует в Studio внутренние Cesium objects.
|
||||
@@ -46,22 +46,22 @@ Fixtures малы и детерминированы. Большие геодан
|
||||
Server-side runtime contract:
|
||||
|
||||
- `GET /api/map/runtime-config` сообщает версию renderer и readiness возможностей, но не возвращает master token;
|
||||
- `GET /api/map/ion/assets/:assetId/endpoint` разрешает только allowlisted assets и обменивает server-side master token на asset-scoped endpoint token;
|
||||
- `CESIUM_ION_TOKEN` передаётся процессу через deployment environment/secret;
|
||||
- `GET /api/map/ion/assets/:assetId/endpoint` разрешает только allowlisted assets и возвращает public provider URL без credential; private Gateway добавляет asset credential только к своему upstream request;
|
||||
- `CESIUM_ION_TOKEN` передаётся только private Platform Map Gateway через deployment environment/secret, не в Foundry;
|
||||
- `CESIUM_ION_ASSET_ALLOWLIST` ограничивает terrain/buildings/Gaussian assets;
|
||||
- production endpoint переезжает в `platform/services/map-gateway`.
|
||||
|
||||
Development gateway уже позволяет проверить World Terrain и 3D Buildings, не сериализуя master token во frontend. Asset-scoped token является частью официального ion endpoint contract и ограничен конкретным asset.
|
||||
Development и production gateway позволяют проверить World Terrain и 3D Buildings, не сериализуя никакой Cesium/Bing credential во frontend.
|
||||
|
||||
## TileCache boundary
|
||||
|
||||
Runtime tile cache не является исходным кодом и не хранится в Git или Docker image layer. Целевой `map-gateway` использует отдельный persistent volume либо object storage и поддерживает:
|
||||
Runtime tile cache не является исходным кодом и не хранится в Git или Docker image layer. Production `map-gateway` использует NAS bind directory `/volume1/docker/nodedc-platform/map-gateway/live-tile-cache` и поддерживает:
|
||||
|
||||
- online-record и offline-fallback;
|
||||
- cache-first read/write и явный live-refresh;
|
||||
- нормализацию cache key без credentials;
|
||||
- upstream allowlist и SSRF protection;
|
||||
- ограничения размера объекта и общего объёма;
|
||||
- LRU/eviction, stats, health и наблюдаемость;
|
||||
- append-only no-overwrite по умолчанию, явный refresh viewport, stats, health и наблюдаемость;
|
||||
- отдельный export/import версионируемых seed snapshots при необходимости.
|
||||
|
||||
Существующий Engine cache используется как donor поведения, но его runtime-файлы не копируются в Studio.
|
||||
@@ -76,5 +76,23 @@ Runtime tile cache не является исходным кодом и не х
|
||||
2. спроектировать batching/instancing contract для больших потоков объектов и геозон;
|
||||
3. вынести development gateway в `platform/services/map-gateway` и подключить persistent cache;
|
||||
4. добавить реальный Gaussian Splat 3D Tiles acceptance asset;
|
||||
5. добавить capability binding между NDC runtime и slots страницы;
|
||||
5. расширить entity-stream adapter с `points` на traces, routes и zones;
|
||||
6. оформить renderer adapter capability matrix для Cesium и будущих providers.
|
||||
|
||||
## Live data-product runtime
|
||||
|
||||
`Map Page` хранит только provider-neutral binding: `dataProductId`, approved
|
||||
semantic types, field projection и `slotId` (`points` для live point entities).
|
||||
При открытии Application page browser делает same-origin запрос к Foundry:
|
||||
|
||||
```text
|
||||
Application/Page/Binding → Foundry BFF → External Data Plane snapshot → SSE patch
|
||||
```
|
||||
|
||||
Foundry сопоставляет target с root-owned opaque reader grant в закрытом
|
||||
deployment directory. Browser, manifest и Cesium adapter не получают provider
|
||||
endpoint, tenant/connection scope, reader token или raw provider payload.
|
||||
Сначала приходит snapshot, затем только patch events с cursor; при пропуске
|
||||
cursor BFF требует resync snapshot. Renderer держит отдельный `CustomDataSource`
|
||||
на binding и обновляет stable entity id без пересоздания viewer. History и
|
||||
sampling остаются политикой Data Plane, а не Map Template.
|
||||
|
||||
Reference in New Issue
Block a user