Commit Graph
2996 Commits
Author SHA1 Message Date
German Khokhlov 17eea266f1 Keep imported files across engine switches and read them again on the next Cesium viewer
The Import list and each file's bytes belong to the page session; the data sources, pins, drop and gesture listeners belong to the attached viewer. Without a viewer the list stays and import or fly-to is refused.
2026-11-03 17:30:27 +04:00
German Khokhlov 111ba1626c Keep the annotation board across engine switches and draw it again on Cesium
The marks belong to the page session; only their drawing belongs to the attached viewer. A switch takes the drawing off, keeps the marks, and the next Cesium attachment draws them again. Without a viewer the board refuses new annotations instead of failing in the resolver.
2026-11-03 17:24:39 +04:00
German Khokhlov 05578c61b9 Keep an active voice session through engine switches
The page creates the voice once; each engine attachment only gives it that scene's action runner, pointer canvas and annotation events. Calls made during a switch wait for the incoming engine and are refused with ENGINE_SWITCHING when none attaches in time; results name the engine that answered, and the session hears engine-changed after a switch. The analyst's follow-up memory and layer enable times outlive one engine's runner. scripts/qa-voice-engine-switch.mjs drives a fake microphone and Realtime transport through the switches.
2026-11-03 17:20:40 +04:00
German Khokhlov 35ed499ae4 Keep the place search, language listener, logo gaze and Google key for the page session
An engine switch no longer recreates them: with a layer session they live until the page lifetime aborts; a host without one keeps the per-application lifetime.
2026-11-03 17:13:07 +04:00
German Khokhlov f0c2523ac4 Add the scene host that attaches engine-bound parts in order and detaches them in reverse 2026-11-03 17:09:53 +04:00
German Khokhlov b2cc00833d Measure session object identity and listener counts across engine switches
window.__gevSession names each session object by a stable instance id and counts applications, attachments and detaches. scripts/qa-app-once.mjs (report-only with --report for now) runs three round trips and a parked-renderer rollback on a keyless preview with paid map, model and voice endpoints blocked.
2026-11-03 17:08:22 +04:00
German Khokhlov 5564156c09 Assert that the traffic population after a globe round trip stays near the population before it
Both are read after the same settle delay; the population is checked again once the vehicle comparison is taken.
2026-11-03 16:24:08 +04:00
German Khokhlov eed8acc3f7 Keep the traffic population and vehicle heights after a globe round trip
The republish after a globe switch ran as a refinement ('Handoff refined'):
it sampled the incoming globe while it still showed coarse tiles and,
being a refinement, never refined again. Keyless Cesium's first terrain
tiles put Austin's streets near -2 200 m, so vehicles stayed there, and
the next globe weighted each road by the camera distance to those
waypoints (1.9 km became 4.1 km), cutting the population from about 620
to 260 until the camera moved.

The handoff is now a completed pass that refines once the incoming
surface has loaded, road density and the coverage radius are measured to
the road's coordinates on the local ground estimate instead of to the
last sampled waypoints, and flow that lands after a publication
re-allocates the retained roads' budgets instead of only recolouring
them.
2026-11-03 16:24:08 +04:00
German Khokhlov f4879fc24b Keep the Utilities panel's Directions row mounted across a globe switch 2026-11-03 15:36:11 +04:00
German Khokhlov 7f0572cf4c Run upstream's HUD summary and standalone startup tests against the engine-based HUD and application 2026-11-03 15:36:11 +04:00
German Khokhlov 1a1eef0e5c Merge origin/main into german/navara
Conflict resolutions:
- src/main.js: upstream's PHOTON_URL place-search setting is read once at
  module level and passed as geospatial: { endpoints: { photon } } by
  createApplication(), so every engine start of the switch flow gets it; the
  old single top-level createStandaloneApplication() call stays removed.
- src/layers/bikeshare/render/cesium/rendering.js: upstream's
  publishedCapacity fix applied with this branch's
  resolveCapacity(model, capacity, status) signature. The same fix is ported
  to src/layers/bikeshare/render/navara.js (record.publishedCapacity, status
  polls resolve from it), with a Navara regression test; upstream's
  proxyRoute test imports the moved render/cesium/rendering.js.
- src/layers/traffic/flow.js: upstream's nextTask() yield and current()
  check kept before the scene is taken from this branch's
  _trafficScene?.() ?? _viewer?.scene with its missing-scene return.
- scripts/package-boundaries.json, scripts/format-scope.json: union of both
  sides' file lists.
- src/voice/actionSchemas.test.mjs: both history comments kept, payload hash
  recomputed for the merged schemas (Sentinel-2 map stack enum plus the
  shorter layer alias hint).
- src/hudAltitudeDatum.test.mjs: this branch's engine-based IntelHUD
  construction with upstream's placeLabels summary context.
2026-11-03 15:36:06 +04:00
German Khokhlov a066a2d1ca Keep history entries untouched by unfinished globe picks and restore each visited entry's layers
A picked engine now lives in the switch until it runs; only then is the
address written, so a pick superseded by Back or one that fails rewrites no
entry. An engine-changing history visit holds the outgoing share link, which
neither restores nor writes the visited entry, and the running engine takes
the address back once the switch settles, restoring any entry visited while
it was held or not yet listening. Handed-off layers keep running where the
incoming address agrees with the outgoing one and follow a visited entry
where it differs. A failed recovery keeps the error on the loading screen
with an engine picker for a retry, and a failing reveal of the new globe no
longer blocks the cover removal or later requests.
2026-11-03 15:24:20 +04:00
German Khokhlov 9cc34e324f Stop scene attachments of Bhote Koshi, GhostMaps, cables and infrastructure waiting once their scene is released 2026-11-03 15:23:21 +04:00
German Khokhlov cf6d04b7db End the data startup wait when the application is torn down during a slow layer attachment 2026-11-03 15:23:21 +04:00
German Khokhlov 7fb11507d5 Bound the wait for layer attachments, park enables and explicit refreshes until the next scene binds 2026-11-03 15:23:20 +04:00
German Khokhlov 39c648094b Merge pull request #1488 from bilawalsidhu/german/hal-623-hud-summary-locale
fix(hud): AI summary in the UI language, canonical feed state, partial aggregation
2026-11-03 15:22:40 +04:00
German Khokhlov 53c114965d Write a machine acceptance report and stop early when no browser or preview is available
qa-all-layer-switches.mjs now checks once that Puppeteer can start Chrome and that the preview answers, and names PUPPETEER_EXECUTABLE_PATH and npx puppeteer browsers install chrome when it cannot. Each run writes <output>/acceptance.json with the commit, dirty files at both ends, Chrome, Node, base URL, times and, per scenario, status, exit code, duration, covered layer ids and the sha256 of its log. It replaces summary.json.
2026-11-03 15:05:37 +04:00
German Khokhlov 65d41b971c Check traffic vehicles one by one against a fixed dark ground after the globe round trip
Live Sentinel-2 imagery is bright at this altitude, so a fixed crop of white two-pixel vehicles changed anywhere from 14 to 300 pixels. The scenario now serves a uniform dark ground tile, waits for the layer to settle with vehicles in view, projects each vehicle to the window and requires 90% of those above the drawn terrain to change the picture where the layer places them; in simulation nothing else may change. Vehicles below the terrain and the population left after the round trip are reported, not asserted.
2026-11-03 15:05:36 +04:00
German Khokhlov d413362467 Merge branch 'main' into german/hal-623-hud-summary-locale 2026-11-03 14:55:40 +04:00
German Khokhlov b80c54b7f1 Merge pull request #1474 from bilawalsidhu/fix/hal-722-radio-next-no-autoplay
Keep Radio Next and Previous from starting playback before Play (HAL-722)
2026-11-03 14:55:14 +04:00
German Khokhlov 4d2b061e3b Hand the session off on Back/Forward and roll failed globe switches back to the last working engine
The engine switch moves out of main.js into src/standalone/engineSwitch.js: every
engine change in the page hands the session off (layers, Director, Contacts,
directions and satellite cameras), whether it came from the picker or from
history. Each attempt has a generation; a failure rolls back to the last engine
that started, requests made during a switch or recovery are reconciled once it
settles, and a picked engine adds its history entry only after it starts. The
first-frame wait only lifts the cover and never fails a started engine; a
hidden tab does not wait. Nothing starts after pagehide, and a failed recovery
leaves the picker usable.
2026-11-03 14:51:17 +04:00
German Khokhlov 64c5cd25e6 Document which inputs a warm cached renderer keeps from the application that built it 2026-11-03 14:47:36 +04:00
German Khokhlov 64759c552e Release the cockpit cloud WebGL context when its controller is destroyed 2026-11-03 14:47:36 +04:00
German Khokhlov 12cd73bed9 Skip CCTV scene work when its renderer was released during a health refresh 2026-11-03 14:47:35 +04:00
German Khokhlov baabff6acf Stop a Bhote Koshi attachment that resumes after its scene was released 2026-11-03 14:47:35 +04:00
German Khokhlov 2853938df7 Detach every layer from a scene even when one fails, and let in-flight attachments stop first 2026-11-03 14:47:35 +04:00
German Khokhlov dd040b4f87 Let a failed application teardown be retried instead of repeating its rejection 2026-11-03 14:47:35 +04:00
German Khokhlov ac5164b14b Merge remote-tracking branch 'origin/main' into german/hal-623-hud-summary-locale 2026-11-03 14:45:45 +04:00
German Khokhlov 03c168d7c9 refactor(hud): share the warning line and trim the summary helpers
One provenanceLine() builds STATE | text | LAYERS for the HUD and
get_hud_caption. hasWord is one lookaround regex, capAtWord one grapheme
pass. Feed-state helpers are imported from layerSnapshot.js directly, and the
kept-whole sanitizer cases are one table.
2026-11-03 14:45:32 +04:00
German Khokhlov 0c190c3a15 Format the layer lifecycle, standalone application and Bhote Koshi event with Prettier 2026-11-03 14:36:31 +04:00
German Khokhlov ab8691383b docs(hud): describe the character-only summary cap and trim comments 2026-11-03 14:34:32 +04:00
German Khokhlov 238a3d0634 Merge remote-tracking branch 'origin/main' into fix/hal-722-radio-next-no-autoplay 2026-11-03 14:33:12 +04:00
German Khokhlov 81ffa5b663 Suspend the tuner noise context once a pending resume settles
A dial click shorter than the device start-up let suspend() run on a still-suspended context, so the later resume() left it running with no nodes. Cover paused, connecting and voice-fallback releases in radioNextState tests.
2026-11-03 14:32:55 +04:00
German Khokhlov 00cce1e672 Merge pull request #1515 from bilawalsidhu/codex/docs-codespaces-limitations
docs: clarify Codespaces feature restrictions
2026-11-03 14:28:44 +04:00
German Khokhlov 33381c5981 Merge remote-tracking branch 'origin/main' into german/hal-623-hud-summary-locale
# Conflicts:
#	src/voice/gevActions.test.mjs
2026-11-03 14:28:10 +04:00
German Khokhlov 57da1090d0 docs: shorten Codespaces restrictions 2026-11-03 12:09:46 +04:00
German Khokhlov c6de459436 docs: clarify Codespaces feature restrictions 2026-11-03 12:06:01 +04:00
German Khokhlov 62296a833c Exercise every catalog layer on both planets and verify live switch continuity 2026-11-03 05:22:02 +04:00
German Khokhlov 05b646daa3 Unsubscribe removed Navara effects and models from warm view frames 2026-11-03 05:16:20 +04:00
German Khokhlov 14f7b32537 Release Navara overlay targets and sprite images on repeated globe switches 2026-11-03 05:04:38 +04:00
German Khokhlov 160e445677 Keep authored scene playback, pack media and geographic interactions across globes 2026-11-03 04:49:46 +04:00
German Khokhlov a49671a391 Preserve satellite tracking, orbit solutions and mission replay across globes 2026-11-03 04:36:49 +04:00
German Khokhlov 133ca14119 Keep CCTV playback and calibration while replacing globe projection surfaces 2026-11-03 04:25:02 +04:00
German Khokhlov 24190a3e35 Keep city stations, vehicle tracks and trail history across globe switches 2026-11-03 04:21:48 +04:00
German Khokhlov c4a97a653c Keep fire and camera selections bound to their source records 2026-11-03 04:18:53 +04:00
German Khokhlov b01f1ee7dc Preserve radio playback and imagery comparisons when switching planets 2026-11-03 04:16:00 +04:00
German Khokhlov b98cbeebf2 Keep street imagery and picked coverage across Cesium and Navara 2026-11-03 04:13:26 +04:00
German Khokhlov 75df3389f3 Keep traffic vehicles and road flow across globe switches 2026-11-03 04:09:21 +04:00
German Khokhlov 4e09559337 Carry the Nepal event images, playback and media across globes 2026-11-03 03:57:18 +04:00
German Khokhlov 811bcaff85 Retain the Nepal locator presentation and draw it on either globe 2026-11-03 03:49:39 +04:00