Separate scene handoff and attachment from the page shell

Move the page handoff sequence into SceneSwitcher and include restoration
in the application's candidate attachment. Release a failed candidate once
before the request coordinator recovers the working engine. Keep address
ordering, parked renderers, retained layers and cockpit resumption intact.

Define the layer session and its field owners. Share its retention decision
across teardown paths. Separate layer scene binding from lifecycle policy,
and shell scene composition from page controls. Keep failed renderer
releases in the binding owner, with the existing retry behavior.

Give Director the scene and use the engine host for its canvas and pack
container. Keep the existing tracked-subject interaction guard so neither
engine's behavior changes. Pass startup chrome the first backend's explicit
welcome policy instead of testing for a viewer. Cesium remains the behavior
reference; this restructuring intentionally changes no visible behavior on
either engine.

Viewer references outside the Cesium engine fall from 948 to 933. All other
coupling counts stay unchanged. Scene service ownership, raw debug access,
and the remaining shell and host queues still need consolidation.

Checked in the browser, keyless, on the dev server: the engine switch,
Director engine switch, layer panel and layer visibility on both engines
pass, and 14 of 15 strict scenarios pass (rapid, hidden-tab, context-loss,
parked-release, Navara HD, failure matrix and soak among them). app-once
and the Director next-shot step fail the same way before this change.
This commit is contained in:
German Khokhlov committed 2026-11-07 15:44:03 +04:00
1 parent f385986383
commit 656943641c
23 files changed
+1265 -888

No files matched your search

+6
View File
@@ -1007,6 +1007,8 @@
"src/styles/surveillance.js",
"src/styles/thermal.js",
"src/ui/applicationShell.js",
"src/app/layerSession.js",
"src/ui/shellScene.js",
"src/ui/localePicker.js",
"src/ui/cyberSonarControls.js",
"src/ui/locationNavigation.js",
@@ -2540,6 +2542,7 @@
"src/data/layerStateCoordinator.js",
"src/data/layerStateTokenReservations.json",
"src/data/lifecycle.js",
"src/data/layerSceneBinding.js",
"src/data/localGeojsonCore.js",
"src/data/localGeojsonLod.js",
"src/data/local_data/natural_earth/marine.json",
@@ -2881,6 +2884,8 @@
"src/styles/surveillance.js",
"src/styles/thermal.js",
"src/ui/applicationShell.js",
"src/app/layerSession.js",
"src/ui/shellScene.js",
"src/ui/mobileShell.js",
"src/ui/localePicker.js",
"src/ui/cyberSonarControls.js",
@@ -4457,6 +4462,7 @@
"src/globe/cesium/engineFromViewer.js",
"src/globe/contract.js",
"src/data/lifecycle.js",
"src/data/layerSceneBinding.js",
"src/data/cameraArrival.js"
],
"external": []