Commit Graph
1441 Commits
Author SHA1 Message Date
Sameh Khamis c37e301ab7 Merge branch 'main' into fix/geo-distance-dateline
# Conflicts:
#	CHANGELOG.md
2026-10-16 14:59:29 -07:00
Sameh Khamis ccd38c0c44 Merge branch 'main' into fix/cctv-missing-numbers
# Conflicts:
#	CHANGELOG.md
2026-10-16 14:59:28 -07:00
Sameh Khamis 31ef637ba7 Merge branch 'main' into fix/director-goto-shot 2026-10-16 14:53:56 -07:00
Rudy Mizrahi Celekli fa8e3e989f fix(tools): exclude unknown altitude from requested aircraft bands (#1115)
aircraft_in_area compared a nullable altitude, so a contact with neither barometric nor geometric altitude matched max_altitude_m as though it were at zero. Require a reported finite altitude only when a band is requested; unfiltered queries keep the contact.
2026-10-16 14:53:50 -07:00
Sameh Khamis e5ee6696b1 Merge pull request #1097 from Rohilalala/fix/overpass-failure-phrases-in-data
fix(overpass): read failure phrases from the remark, not element tags
2026-10-16 14:48:24 -07:00
Sameh Khamis d5a7246302 Merge branch 'main' into fix/overpass-failure-phrases-in-data 2026-10-16 14:44:04 -07:00
Sameh Khamis bb00a13b03 Merge pull request #1096 from Rohilalala/fix/military-sticky-track
fix(military): hold the last track and speed when a poll omits them
2026-10-16 14:43:59 -07:00
Sameh Khamis 41be10f320 Move the changelog entry into changelog.d
Main now takes release notes as one fragment per pull request (#787).
2026-10-16 14:16:36 -07:00
Sameh Khamis 23363589a8 Merge branch 'main' into fix/director-goto-shot
# Conflicts:
#	CHANGELOG.md
2026-10-16 14:16:36 -07:00
Sameh Khamis aa7943a07b Move the changelog entry into changelog.d
Main now takes release notes as one fragment per pull request (#787).
2026-10-16 14:16:34 -07:00
Sameh Khamis 6bc473ac29 Merge branch 'main' into fix/overpass-failure-phrases-in-data
# Conflicts:
#	CHANGELOG.md
2026-10-16 14:16:33 -07:00
Sameh Khamis 1d62cdd805 Move the changelog entry into changelog.d
Main now takes release notes as one fragment per pull request (#787).
2026-10-16 14:16:32 -07:00
Sameh Khamis 8667993b7f Merge branch 'main' into fix/military-sticky-track
# Conflicts:
#	CHANGELOG.md
2026-10-16 14:16:32 -07:00
Said Turksever 20c4c4a97f Merge pull request #787 from daikaginza/feat/changelog-fragments
feat(tooling): one changelog file per pull request
2026-10-16 21:48:37 +01:00
Rudy CelekliandClaude Sonnet 5.5 0d8caaafd8 fix(launches): keep null pad and landing coordinates unknown instead of 0
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Signed-off-by: Rudy Celekli <[email protected]>
2026-10-16 15:24:08 -04:00
Said Turksever 4ae6d154f9 Merge branch 'main' into feat/changelog-fragments 2026-10-16 19:33:08 +01:00
Arianna Method 8d37661219 fix(perimeters): handle antimeridian queries and incident card anchors
Rebase #1142 onto current main, keeping both sides of the changelog and runtime documentation conflicts. Retain unwrapped containment and circular query coordinates.

Address review feedback on perimeterAnchorDegrees: use circular longitude for the selected outer ring, excluding its closing duplicate. Compare multipart areas along short longitude edges so a small dateline part cannot steal the card anchor from a larger polygon.

Three new card regressions fail before the fix and pass afterward. Coverage includes reversed/rotated rings, vertices at +/-180 and both multipart selection directions. Local validation: 43 focused tests; full suite 7,636 passed, one skipped, zero failures; production build, formatting, module boundaries and whitespace checks pass on Node 24.19.0. Browser tracking validation follows on the QA branch.
2026-10-16 21:33:01 +03:00
German Khokhlov e8b3a10a07 Merge pull request #602 from meirm/i18n-spanish
i18n: interface localization with Spanish and Russian (English-text keys)
2026-10-16 21:43:26 +04:00
German Khokhlov 69f2089636 Merge remote-tracking branch 'meirm/i18n-spanish' into i18n-spanish 2026-10-16 21:30:15 +04:00
German KhokhlovandClaude Opus 5.5 b0e28f97d9 i18n: translate the SDR messages from the latest main
Seek stopped, the decoder overload stops and the stalled USB transfer
now follow the UI language.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 21:29:28 +04:00
German Khokhlov 178a57c16a Merge branch 'main' into i18n-spanish 2026-10-16 21:26:06 +04:00
German Khokhlov e48841072d Merge remote-tracking branch 'origin/main' into i18n-spanish 2026-10-16 21:25:39 +04:00
Mazeyar Moeini Feizabadi ecaab6a946 Merge pull request #1183 from bilawalsidhu/codex/sdr-bounded-playback
fix(sdr): stabilize local playback and integrate seek-wrap fix
2026-10-16 19:12:27 +02:00
German Khokhlov c71ce9cf9b Merge remote-tracking branch 'meirm/i18n-spanish' into i18n-spanish 2026-10-16 21:00:43 +04:00
German KhokhlovandClaude Opus 5.5 20f4cf3763 i18n: fix the LGTM review findings and tidy the branch texts
- i18n scanner: lastError sink, no false sinks on defaults and ternaries
- shared src/i18n/marker.js for modules that only mark strings
- wind field messages move to wind/fields.js; CITY_POIS imports from cityPois.js
- drop review IDs, change history and stale references from comments and docs

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 21:00:28 +04:00
Mazeyar Moeini Feizabadi e021159938 Merge remote-tracking branch 'origin/main' into codex/sdr-bounded-playback 2026-10-16 19:00:04 +02:00
Meir Michanie 5bfa4a290c Merge branch 'main' into i18n-spanish 2026-10-16 18:59:54 +02:00
Mazeyar Moeini Feizabadi 365b2e7913 test(radio): fixture unavailable optional Google tokens 2026-10-16 18:56:17 +02:00
Said Turksever 6a4960762d Merge branch 'main' into feat/changelog-fragments 2026-10-16 17:52:11 +01:00
Said Turksever 3a57a04c3b Merge pull request #1159 from asturksever/fix/street-level-gate-pill-race
test(street-level): settle coverage before reading the ON/OFF pill
2026-10-16 17:52:04 +01:00
Mazeyar Moeini Feizabadi fc11fd0370 docs(sdr): document bounded playback and credit seek fix 2026-10-16 18:48:44 +02:00
Mazeyar Moeini FeizabadiandAditya 240f7ae3da fix(sdr): bound decoder work and stabilize FM playback
Keep USB reads in a bounded ordered pipeline, acknowledge and cap decoder
work, terminate stopped workers, and buffer short playback jitter. Throttle
display telemetry and compute spectra only while seeking.

Preserve PR #1174's wrapped seeking and fresh-spectrum tagging. Add opt-in
bounded timing diagnostics and decoder/playback lifecycle regressions.

Co-authored-by: Aditya <[email protected]>
2026-10-16 18:37:15 +02:00
Said Turksever e30f9a73f4 Merge branch 'main' into fix/street-level-gate-pill-race 2026-10-16 17:23:34 +01:00
German KhokhlovandClaude Opus 5.5 0ed05568f7 Merge meirm/i18n-spanish: latest upstream main
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 19:30:11 +04:00
German KhokhlovandClaude Opus 5.5 3157888780 i18n: fix the repeat-review findings
- Status pieces translate in one place (src/ui/statusText.js): a Local
  ADS-B error with a single piece now translates, and the analyst card
  splits empty-layer notes into pieces (Transit, Local ADS-B).
- Translate the ALPR retry chip text, the ECCC error on the Air quality
  card, "Upstream response too large" and the "entry {n}" feed label.
- The unmarked-text check also sees error/loadingLabel/statusMessage/
  status assignments, `status:` properties and showToast?.( /
  this._showToast( calls; the scene import preview marks its pack
  statuses, data and model-facing text carry i18n-ignore with a reason.
- Tests check the real code: the HUD locality formatter moves to
  src/hudLocalityFormat.js, the unsaved-keys test pins the teardown.
- One copy each: city names come from src/cityPois.js, the GNSS HTTP
  template and wind "field unavailable" texts; dead fallbacks removed.
- Leftovers of the reverted vessel-label change and the reformatting of
  detectionHost.test.mjs / keySetup.test.mjs are back to main.

Catalogs: es/ru 2617 messages each, complete.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 19:28:59 +04:00
Meir Michanie 0b58265cee Merge remote-tracking branch 'upstream/main' into i18n-spanish 2026-10-16 17:03:26 +02:00
djabhi31 f60eeacb2d test(earthquakes): add unit test coverage for earthquake snapshot normalization
- Pin GeoJSON earthquake snapshot normalization contract in src/layers/earthquakes/records.test.mjs
- Cover complete-feed validation, M2.5 magnitude filtering, coordinate and depth bounds
- Verify stable fallback IDs, duplicate ID rejection, and malformed structure handling
- Register records.test.mjs in scripts/format-scope.json and apply Prettier formatting
2026-10-16 19:12:46 +05:30
German KhokhlovandClaude Opus 5.5 a2463ca2d2 Revert hiding vessel detection callouts under ambient cards
The vessels layer hid the detection callout for every vessel whose card
it published to the world overlay. The overlay paints only part of the
published cards (shared budget, collisions, UI chrome), so vessels whose
card was dropped lost all their text: with 60 vessels and Detection on,
21 showed only an arrow. Back to main's behaviour: the callout always
draws. Hiding it only under a painted card is HAL-628.

The translated speed unit in the callout stays.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 17:37:58 +04:00
German KhokhlovandClaude Opus 5.5 3adce33cc6 i18n: fix the final pre-merge review findings
Fixes the P1 and the confirmed P2 findings of the final review of the
i18n branch.

- CI: the air-quality model no longer imports i18n (portable module),
  so check:boundaries passes again.
- Air quality layer: named in the layer panel, HUD and voice; its
  Weather card, bands and errors translate. A test keeps the layer-name
  table in step with the layer registry.
- Layer statuses that still reached ru/es in English: GNSS, CelesTrak,
  Transit loading and feed errors, launches, perimeters, ALPR, ECCC,
  wind "field unavailable", Local ADS-B streaming lines.
- Voice and HUD: preset ids show city names ("Fly to San Francisco"),
  the HUD city translates, cockpit refusals cover frame, aircraft and
  satellite; empty Transit notes translate on the analyst card.
- tn() keeps a caller's formatted count ("12,345 map objects").
- Cyber HUD: the language button no longer covers the bottom-right
  card or the cockpit position readout.
- CCTV buttons wrap only in non-English locales; English layout matches
  main again.
- Switching language asks first when Provider Settings holds unsaved
  keys.

Catalogs: es/ru 2611 messages each, complete.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 16:39:25 +04:00
Said Turksever d3449313d4 Merge branch 'main' into feat/changelog-fragments 2026-10-16 12:53:10 +01:00
Said Turksever 537e99dfa4 Merge pull request #1063 from YosolosoY/feat/bikeshare-bogota-santiago
feat(bikeshare): add Bogotá (Tembici) and Santiago (Bike Itaú)
2026-10-16 12:47:12 +01:00
Aditya 557d3bb41e fix(military): hold the last track and speed when a poll omits them
MilitaryFlightRecords coerced a missing course to 0 (`courseDeg || 0`)
and a missing speed to 0 (`speedMps ?? 0`) before stickyNumber, so the
hold-last-known-good merge never ran. When an adsb.lol row arrived
without `track` or `gs`, the aircraft's icon swung to north and the
position history got a 0 kt / 0 degree fix, so dead reckoning stopped
or turned it north. The civil FlightRecords holds the last value for
the same input.

Pass the raw values to stickyNumber, with 0 as the fallback only until a
value is known, as before. A grounded row without a speed still reads
0, so a parked aircraft doesn't coast at its landing speed.
2026-10-16 16:52:22 +05:30
Aditya d6c1ea0f4b fix(maps): retry the real imagery and terrain provider after a fallback
In the keyless setup a single transient failure while loading the default
map layers locked in the degraded fallback until reload.

_getImageryProvider cached the construction-fallback resolution (OSM) under
the Esri stack id, so every later "Esri Satellite" selection showed OSM.
createKeylessTerrain turns any Re:Earth failure into a flat
EllipsoidTerrainProvider; the controller cached it and set _terrainMode to
'keyless', so a boot-time network blip left the globe flat.

Fallbacks are still cached and shown at once, and no switch waits on a
retry. One controller timer now retries the real provider behind whichever
fallback is on screen (Esri's OSM stand-in, or flat terrain on a shown
globe), starting at 30 seconds and doubling to a 10-minute cap while it
keeps failing. A failed retry leaves the cached fallback and the installed
terrain untouched. A success replaces the cache entry and applies it live:
terrain is installed in place with a render request (or, behind a 3D
tileset, picked up by the next globe activation), and Esri is reselected
automatically, after any in-flight switch settles. A switch that read the
flat fallback re-reads the terrain cache before installing, and destroy()
cancels the timer and releases a provider built after it.
2026-10-16 16:52:01 +05:30
Aditya a316e12323 fix(overpass): read failure phrases from the remark, not element tags
overpassLooksRuntimeError and overpassLooksRateLimited searched the whole
200 body, element tags included. A result containing a place named
"Timed Out Escape Rooms" (or any tag with "runtime error", "out of
memory", "too many requests" or "rate_limited") was refused as an
upstream failure, and the endpoint was put on cooldown for every other
query.

Parse the body once. A data reply (one with an elements array) reports
failure in its remark, so the phrase checks run on the remark. Any other
body, an error page or JSON without elements, is matched whole as
before.
2026-10-16 16:52:01 +05:30
Aditya 2c61d9e2b7 fix(geo): wrap longitude differences across the antimeridian
The flights ground-floor pipeline subtracted longitudes without wrapping.
approxDistanceKm, and its copy in the mesh-floor sampler, measured two
points 0.2° apart either side of 180° (21 km at Fiji) as about 38,000 km,
so low and grounded aircraft just across the line from the viewer were
never floored or mesh-sampled. corridorFloorCells walked a segment across
180° the long way round, filling its cell budget with ground behind the
contact and never requesting the cells it was about to cross, and
stickyFloorCell dropped its hysteresis for a contact on the seam. Each now
takes the short way round, and corridor points are normalised back into
[-180, 180].

SEARCH NEARBY SITES centred its Google Places search on the mean of west
and east, which for a view across 180° (west > east) is longitude 0, and
sized the radius from the view's height alone. It now measures the view's
width through 180° and searches its real centre.
2026-10-16 16:48:37 +05:30
Aditya bd48533b03 fix(director): land on the requested shot
A shot action seeks to the target shot's startProgress, which
sceneTimingForShot computes as start / total. sceneSeekState multiplied
that back into seconds and compared it with each shot's end, but
(start / total) * total can round one ulp below start. The comparison
then put the seek at the very end of the previous shot. With five equal
3.9 s shots, "go to" shots 2, 3 and 5 landed on shots 1, 2 and 4.

Compare the requested progress against each shot's end / total instead,
the same division the caller used, so a shot's own start always selects
that shot. Exact boundaries still select the next shot, and anything
below a start still selects the previous one.
2026-10-16 16:48:37 +05:30
Said TurkseverandClaude Opus 5.5 7a38727b85 fix(bikeshare): drop stations outside a city's load radius
Bogotá's and Santiago's PBSC feeds list depot stations in São Paulo and
Madrid as installed and renting, so activating either city drew live
docks thousands of kilometres away and counted them in the layer total.
Station information is now limited to the city's registered load radius;
every other registered feed already sits inside its radius (checked live
2026-10-16), so nothing else changes.

Adds a Bogotá/Santiago registry test matching the Brazilian and Barcelona
ones: proxy allowlist, outermost-station activation and radius reach, and
the depot filter through the real ingestion path.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 11:43:48 +01:00
Said Turksever c5feec26dc Merge remote-tracking branch 'upstream/main' into feat/bikeshare-bogota-santiago
# Conflicts:
#	CHANGELOG.md
#	DATA_SOURCES.md
#	src/data/dataCredits.js
#	src/layers/bikeshare/registry.js
2026-10-16 11:41:25 +01:00
Said Turksever 1e3ba28c88 Merge branch 'main' into feat/changelog-fragments 2026-10-16 11:40:51 +01:00
Said Turksever d4492d8f8c Merge pull request #1176 from ulihhhh/feat/bikeshare-barcelona
feat(bikeshare): add Barcelona's Bicing and AMBici
2026-10-16 11:39:16 +01:00