Scope world overlays to each scene attachment

Move the world overlay into scene.services.overlay. Each attachment owns its
sources, collision domains, paint lanes, canvases, observers, timers and
accessible action subscribers. Keep both canvases inside the engine container,
with detection beside the card root so its screen blend still reaches the
scene. Release shared font measurements only after the last host detaches.

Resolve retained layer publications against their attached engine, clear the
outgoing source before releasing its renderer, and reconnect the shell's action
subscription on attachment. Keep destroyed hosts inert and give parked engines
fresh services. Bind annotation rectangles and the existing tracked bridge to
their engine's overlay. The tracked bridge itself remains page-owned.

Preserve Cesium's projection, card placement, arbitration, fades, hit tests,
blend order and render demand. Navara keeps the same shared behaviour. No
user-visible change is intended. Exercise simultaneous hosts, either teardown,
stale handles, reattachment and a retained selected card on the fake and
headless Cesium engines. Update QA reads and package ownership for the service.

No coupling metric falls or grows: renderer lines remain 0 Cesium and 189
Navara; external Cesium import files 3; viewer lines 891; Navara kind checks 1;
engine sniff calls 0; extension reads 3; ground passes 1; SDK loads 3;
ScreenSpaceEventHandler files 4; engine-name lines 32.

Each host now takes the page's overlay ids from the host it replaces and gives
them back to a remaining host when destroyed, and the chrome's static overlay
placeholders are gone. The new hosts had left the ids on those empty
placeholders, so the voice pointer policy, the id selectors and the QA probes
that read #world-overlay-canvas missed the drawn canvas.

Checked in the browser, keyless: the overlay baselines on both engines, CCTV
v2 (58 checks), military names, and the engine, voice, ground-layer and Ghost
Maps switches pass. The transit script fails the same 25 checks as before.
This commit is contained in:
German Khokhlov committed 2026-11-07 19:27:31 +04:00
1 parent 26597ad25c
commit 3814221cbc
62 files changed
+3148 -2655

No files matched your search

+52 -21
View File
@@ -33,7 +33,8 @@
"src/layers/infrastructure/index.js",
"src/layers/infrastructure/render/display.js",
"src/layers/shared/color.js",
"src/sources/requestDeadline.js"
"src/sources/requestDeadline.js",
"src/overlays/bindOverlayHost.js"
],
"external": []
},
@@ -1225,7 +1226,18 @@
"src/ui/wildlifeSightingPlacement.js",
"src/overlays/worldOverlayChrome.js",
"src/layers/wildlifeSightings/photoText.js",
"src/globe/cesium/doubleClick.js"
"src/globe/cesium/doubleClick.js",
"src/celestialRing.js",
"src/celestialRing/ephemeris.js",
"src/celestialRing/view.js",
"src/data/detectionCohort.js",
"src/data/labelArbiter.js",
"src/globe/cesium/celestial.js",
"src/layers/shared/render/engineView.js",
"src/overlays/worldOverlay.js",
"src/overlays/worldOverlayDraw.js",
"src/overlays/worldOverlayTokens.js",
"src/time/clock.js"
],
"external": ["cesium", "vue", "pinia", "vue-i18n"]
},
@@ -1604,7 +1616,8 @@
"src/globe/cesium/sceneProjection.js",
"src/geo/",
"src/globe/contract.js",
"src/globe/cesium/engineFromViewer.js"
"src/globe/cesium/engineFromViewer.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},
@@ -1617,7 +1630,8 @@
"src/layers/earthquakes/records.js",
"src/geo/",
"src/layers/shared/color.js",
"src/layers/earthquakes/render/display.js"
"src/layers/earthquakes/render/display.js",
"src/overlays/bindOverlayHost.js"
],
"external": []
},
@@ -1685,7 +1699,8 @@
"src/i18n/locales/zh-Hant.json",
"src/geo/",
"src/layers/firms/rectangle.js",
"src/layers/shared/color.js"
"src/layers/shared/color.js",
"src/overlays/bindOverlayHost.js"
],
"external": []
},
@@ -1727,7 +1742,8 @@
"src/ui/unitLabels.js",
"src/geo/",
"src/time/clock.js",
"src/layers/shared/color.js"
"src/layers/shared/color.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium", "satellite.js"]
},
@@ -1772,7 +1788,8 @@
"src/geo/",
"src/time/clock.js",
"src/globe/contract.js",
"src/globe/cesium/engineFromViewer.js"
"src/globe/cesium/engineFromViewer.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},
@@ -1981,7 +1998,8 @@
"src/layers/shared/color.js",
"src/geo/",
"src/globe/contract.js",
"src/globe/cesium/engineFromViewer.js"
"src/globe/cesium/engineFromViewer.js",
"src/overlays/bindOverlayHost.js"
],
"external": []
},
@@ -2038,7 +2056,8 @@
"src/i18n/locales/zh-CN.json",
"src/i18n/locales/zh-Hant.json",
"src/layers/shared/color.js",
"src/geo/"
"src/geo/",
"src/overlays/bindOverlayHost.js"
],
"external": ["hls.js"]
},
@@ -2200,7 +2219,8 @@
"src/i18n/locales/uk.json",
"src/i18n/locales/zh-CN.json",
"src/i18n/locales/zh-Hant.json",
"src/geo/"
"src/geo/",
"src/overlays/bindOverlayHost.js"
],
"external": []
},
@@ -2230,7 +2250,8 @@
"src/geo/",
"src/sources/requestDeadline.js",
"src/layers/shared/color.js",
"src/layers/submarineCables/render/display.js"
"src/layers/submarineCables/render/display.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},
@@ -3612,7 +3633,8 @@
"src/globe/meshes.js",
"src/globe/navara/meshes.js",
"src/globe/exclusivePointer.js",
"src/globe/cesium/followOffset.js"
"src/globe/cesium/followOffset.js",
"src/overlays/bindOverlayHost.js"
],
"external": [
"hls.js",
@@ -4376,7 +4398,8 @@
"src/globe/cesium/meshes.js",
"src/globe/meshes.js",
"src/globe/exclusivePointer.js",
"src/globe/cesium/followOffset.js"
"src/globe/cesium/followOffset.js",
"src/overlays/bindOverlayHost.js"
],
"external": [
"hls.js",
@@ -4742,7 +4765,8 @@
"src/ui/unitLabels.js",
"src/geo/",
"src/layers/directions/render/display.js",
"src/layers/directions/render/style.js"
"src/layers/directions/render/style.js",
"src/overlays/bindOverlayHost.js"
],
"external": []
},
@@ -5145,7 +5169,8 @@
"src/globe/cesium/meshes.js",
"src/globe/meshes.js",
"src/globe/exclusivePointer.js",
"src/data/selectionDispatcher.js"
"src/data/selectionDispatcher.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium", "egm96-universal", "pbf"]
},
@@ -5199,7 +5224,8 @@
"src/i18n/locales/zh-Hant.json",
"src/layers/shared/color.js",
"src/geo/",
"src/globe/contract.js"
"src/globe/contract.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium", "pbf"]
},
@@ -5265,7 +5291,8 @@
"src/i18n/locales/zh-CN.json",
"src/i18n/locales/zh-Hant.json",
"src/layers/shared/color.js",
"src/layers/perimeters/render/display.js"
"src/layers/perimeters/render/display.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},
@@ -5378,7 +5405,8 @@
"src/layers/streetLevel/view.js",
"src/data/geoImportRecords.js",
"src/data/geoImportKml.js",
"src/data/geoImportDisplay.js"
"src/data/geoImportDisplay.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},
@@ -5426,7 +5454,8 @@
"src/i18n/locales/zh-CN.json",
"src/i18n/locales/zh-Hant.json",
"src/layers/shared/color.js",
"src/layers/droneAirspace/render/display.js"
"src/layers/droneAirspace/render/display.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},
@@ -5631,7 +5660,8 @@
"src/ui/statusText.js",
"src/ui/layerNames.js",
"src/layers/shared/color.js",
"src/layers/airQuality/render/display.js"
"src/layers/airQuality/render/display.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},
@@ -5710,7 +5740,8 @@
"src/globe/cesium/credits.js",
"src/layers/wildlifeSightings/display.js",
"src/data/spriteOrder.js",
"src/layers/shared/color.js"
"src/layers/shared/color.js",
"src/overlays/bindOverlayHost.js"
],
"external": ["cesium"]
},