feat(map): add persisted ghost pin sandbox

This commit is contained in:
DCCONSTRUCTIONS
2026-07-29 18:29:13 +03:00
parent b91d3b913e
commit 0c3855eac5
10 changed files with 1222 additions and 13 deletions
@@ -195,7 +195,7 @@ the existing Gateway is reachable and reports a configured state.
## Map state contract
Mission Core stores a versioned map document outside operator environment
media. The implemented contract is `missioncore.map-view/v2`, with optimistic
media. The implemented contract is `missioncore.map-view/v3`, with optimistic
revision:
- its default camera and complete visual state are the canonical Foundry
@@ -204,8 +204,8 @@ revision:
imagery remains active;
- atmosphere, fog, sun, shadows, terrain, buildings and the elevated LOD grid
are persisted as provider-neutral values;
- saved `missioncore.map-view/v1` documents are upgraded in memory and become
v2 on the next explicit save;
- saved `missioncore.map-view/v1` and `missioncore.map-view/v2` documents are
upgraded in memory and become v3 on the next explicit save;
- provider attribution remains registered in the renderer. The local
experiment may hide only the visual credit overlay through
`MISSIONCORE_MAP_SANDBOX_HIDE_CREDITS=1`; production defaults to visible
@@ -218,6 +218,9 @@ revision:
- cache intent (`enabled`, `noOverwrite`), never server-level cache mode;
- selected stable subject id, or `null`;
- layer visibility;
- a bounded temporary Ghost Pin sandbox: generation settings, actual
coordinates, motion state and provider-neutral `elevated-spike`
presentation;
- no credentials, upstream URLs, cache objects or transient Cesium ids.
Resolution order:
@@ -256,6 +259,14 @@ A real Mission Core map subject requires:
Until that contract exists, the basemap remains valid with an honest empty
subject state and the selected-entity section remains absent.
The temporary `Гост-пин` Inspector section is an explicit visual sandbox and
does not relax this boundary. It creates numeric synthetic labels around the
centre of the current Cesium view, can move them inside a bounded radius and
persists only its declared positions on explicit map save. It never claims
scanner evidence, `map.moving_object` authority, Data Product provenance or an
Engine command. `Очистить позиции на карте` removes the complete synthetic
layer from the draft; the next explicit save makes that removal durable.
## State grammar
The UI must distinguish:
@@ -318,6 +329,18 @@ unbounded reconnect loops.
- implement bounded renderer recreation for explicit viewport refresh;
- keep provider credits available for any non-sandbox release.
### M3.1 — temporary Ghost Pin visual sandbox
- reuse the canonical Foundry moving-object `elevated-spike` profile without
reading or mutating Foundry source;
- generate at most 100 numeric synthetic pins around the actual current view
centre;
- keep one local animation loop and bounce motion back inside its saved radius;
- save a snapshot of current positions together with camera and map state;
- expose explicit clear and the complete pin/label presentation controls in the
existing map Inspector;
- keep the feature visibly marked as temporary and non-authoritative.
### M4 — secure API/key control plane
- add authenticated Mission Core admin authority;