Commit Graph
100 Commits
Author SHA1 Message Date
German Khokhlov c733e4d2ad Merge pull request #1594 from meirm/feat/hebrew-i18n
i18n(he): complete and ship Hebrew
2026-11-10 21:47:12 +04:00
German Khokhlov 59ac26ed8c Merge branch 'main' into feat/hebrew-i18n 2026-11-10 21:37:45 +04:00
German Khokhlov b6c2ba379b i18n(he): translate the photo credit added on main 2026-11-10 21:26:15 +04:00
German Khokhlov 2919e90c63 Merge branch 'main' into feat/hebrew-i18n 2026-11-10 21:24:21 +04:00
German Khokhlov 7571e42556 i18n(he): apply the second translation review
- RECORD is «רשומה», a record rather than a recording.
- Time abbreviations end in the geresh again (דק׳, שנ׳, שע׳, ימ׳), and the
  counted forms agree with 1.
- Numbers after a Latin name, ordinals and units keep their order in RTL.
- Meaning, agreement and domain terms fixed across the catalog: cyclone
  advisories and storm centre, sensor swath, track-up, cinematic, tropical
  depression, pilot and sailing vessels, chips, metered billing, radio static,
  airspace, NOT AN ALL-CLEAR, and the remaining review items.
- LOOK and OFF-NADIR are translated; {value} KM stays Latin as an instrument
  readout, like KM/S.
- rtl.css shares the Arabic and Hebrew letter-spacing reset and drops the
  duplicated Arabic rules; he.md and its glossary follow the catalog.
2026-11-10 21:23:28 +04:00
German Khokhlov 9cfac35e38 Merge pull request #1280 from bilawalsidhu/codex/fix-tool-display-text
fix(tools): bound untrusted display text at output boundaries
2026-11-10 16:29:25 +04:00
German Khokhlov 353eebf224 refactor(tools): normalize ALPR text once, in the records
Every camera find_alpr_cameras returns comes from the tile source, which builds
it through normalizeAlprNode, so the tags are already one line and capped.
Drop the second pass in the tool, its duplicate test and the boundary entry,
and the function check normalizeDisplayText never sees.
2026-11-10 15:37:16 +04:00
German Khokhlov 12a5630991 docs: tighten the display-text notes
Name routeId among the canonical analyst IDs in CURRENT-STATE, say what the
changelog entry changes for users, and drop the comment that repeated the
canonical-field doc.
2026-11-10 15:34:32 +04:00
German Khokhlov 3521c96172 Merge remote-tracking branch 'origin/main' into codex/fix-tool-display-text 2026-11-10 14:32:55 +04:00
German Khokhlov 1b010fe328 fix(voice): keep transit route IDs out of display-text normalization
A follow-up analyst_query filters on the routeId it was handed back, so a
route ID with repeated spaces or over 180 characters must stay byte-for-byte
raw like the other canonical fields.
2026-11-10 14:31:28 +04:00
German Khokhlov 5874773ad9 Merge pull request #1577 from bilawalsidhu/german/vessel-callout-under-card
Hide a vessel's detection callout while its own card paints
2026-11-10 14:23:33 +04:00
German Khokhlov 20d58cf888 Report zero queued alpha for an entry the yield pass hid
getQueuedOverlayEntryAlpha now returns 0 for a yielding entry that
declutterYieldingEntries marked collisionHidden this frame. That pass runs
before custom lanes, so they no longer read full opacity for an entry that
will not paint.
2026-11-10 14:06:24 +04:00
German Khokhlov 0af33707da fix(voice): restore the globe-rotation import a main merge dropped
The earlier main merge replaced `import { interruptGlobeRotation } from
'../cameraVerbs.js'` with the displayText import while keeping the
`interruptGlobeRotation('voice-zoom-intent')` call, so voice zoom actions
threw ReferenceError. The same merge replaced main's Overpass reservation
paragraph in docs/CURRENT-STATE.md; restore it next to the new text.
2026-11-10 13:58:48 +04:00
German Khokhlov 39246adaf7 Merge remote-tracking branch 'origin/main' into codex/fix-tool-display-text
Conflicts:
- docs/CURRENT-STATE.md: keep main's hidden-tab polling paragraph and the
  display-text normalization paragraph.
- scripts/package-boundaries.json: keep main's voice panel and text chat
  modules and add src/data/displayText.js.
- src/voice/gevActions.test.mjs: keep main's set_panel_open and partial
  analyst card tests and the display-text tests.
2026-11-10 13:58:41 +04:00
German Khokhlov 8eb0173940 Merge branch 'main' into german/vessel-callout-under-card 2026-11-10 12:47:09 +04:00
German Khokhlov 10784fa9c9 Merge pull request #1552 from IMBrandao/fix/firms-drop-snpp
fix(firms): stop requesting the retired Suomi NPP source
2026-11-09 21:52:09 +04:00
German Khokhlov fce5ee6381 docs(firms): tighten the Suomi NPP notes 2026-11-09 21:44:09 +04:00
German Khokhlov d90da158ea Merge branch 'main' into fix/firms-drop-snpp
# Conflicts:
#	docs/CURRENT-STATE.md
2026-11-09 21:41:01 +04:00
German Khokhlov b04fcf191c docs(firms): count two VIIRS sources in the layer table and test note 2026-11-09 21:38:07 +04:00
German Khokhlov 581ef7eef4 Merge pull request #766 from BreezeDelegate/fix/node26-allocation-gates
fix(ci): run allocation gates on Node 26
2026-11-09 20:35:28 +04:00
German Khokhlov 015e3ff7fc Merge branch 'main' into fix/node26-allocation-gates 2026-11-09 20:19:29 +04:00
German Khokhlov 72a240ba6f Merge pull request #762 from monwiss/refactor/tile-budget
refactor(providers): move the tile budget helpers out of the TomTom module
2026-11-09 20:00:55 +04:00
German Khokhlov 77df600329 Merge branch 'main' into refactor/tile-budget 2026-11-09 19:52:40 +04:00
German Khokhlov e22348a8e1 Merge branch 'main' into refactor/tile-budget 2026-11-09 19:43:58 +04:00
German Khokhlov 75e8e7ddbd refactor(data): describe tile budgets per period, drop a duplicate test, add the changelog entry 2026-11-09 19:41:51 +04:00
German Khokhlov 45108a0b0b Merge pull request #794 from daikaginza/fix/api-method-guard
fix(server): declare the method contract on the three read-only query proxies
2026-11-09 19:17:49 +04:00
German Khokhlov cdf52ab290 test(server): drop unused fields from the /track hand-off stub 2026-11-09 19:07:14 +04:00
German Khokhlov c3738c0fdb docs(server): tighten the method-guard comments and changelog 2026-11-09 19:07:14 +04:00
German Khokhlov ace88172d3 Merge branch 'main' into fix/api-method-guard 2026-11-09 18:51:02 +04:00
German Khokhlov 6a7a09372a Merge pull request #795 from daikaginza/feat/opensky-compress-cached-body
feat(server): compress the cached OpenSky snapshot for clients that accept gzip
2026-11-09 18:40:19 +04:00
German Khokhlov 9d7fe8fcaa Merge branch 'main' into feat/opensky-compress-cached-body 2026-11-09 18:30:32 +04:00
German Khokhlov a45d6af5f7 Merge pull request #1611 from abiyeenzo/fr-fixes
i18n(fr): typography, terminology and wording fixes
2026-11-09 18:22:18 +04:00
German Khokhlov caad795fa2 refactor(server): drop the null and String paths from gzipBody 2026-11-09 18:15:13 +04:00
German Khokhlov 09bf01630b docs(server): tighten compression comments and docs 2026-11-09 18:14:30 +04:00
German Khokhlov 2ea4a78e75 Fix the fr review follow-ups
- "destination refresh" is the refresh at the place the camera flew to,
  so restore "son actualisation à destination".
- Radio note: "que vous la demandez par la voix", "Votre adresse IP".
- "{count} / 30D": "30 J", like "{days} j".
- Starlink: "la couche complète", as in the active-state tooltip.
- "Show {name} sighting": colon form, so names starting with a vowel
  do not break the elision after "de".
- Wildlife note: Acartia is the source, not a kind of marine mammal.
- Straight apostrophes in the five strings added on main since.
2026-11-09 18:12:48 +04:00
German Khokhlov 61e9cf87f9 Merge branch 'main' into fr-fixes
# Conflicts:
#	src/i18n/locales/fr.json
2026-11-09 18:12:09 +04:00
German Khokhlov a5b40dfc3d Merge pull request #1569 from rudycelekli/fix/perimeters-sub-acre-size
fix(perimeters): show a 0.25-acre fire as 0.25 ac, not 0 ac
2026-11-09 17:39:29 +04:00
German Khokhlov be9c37bee2 Merge remote-tracking branch 'origin/main' into fix/perimeters-sub-acre-size 2026-11-09 17:07:05 +04:00
German Khokhlov 394f3216f8 Drop the sub-acre rounding comment 2026-11-09 17:06:56 +04:00
German Khokhlov c62f7ef00e Merge pull request #1524 from quanticsoul4772/upstream/tools-heading-wrap
fix(tools): wrap whole-degree headings at 360 to 0
2026-11-09 17:00:58 +04:00
German Khokhlov da6b63b6fd docs(tools): tighten the heading-wrap changelog, comments and overview 2026-11-09 16:45:11 +04:00
German Khokhlov 3150a460aa Merge pull request #1547 from quanticsoul4772/upstream/nominatim-cache-mode-windows
test(nominatim): check cache file modes only where POSIX modes exist
2026-11-09 16:44:00 +04:00
German Khokhlov c2bff536a5 Merge branch 'main' into upstream/nominatim-cache-mode-windows 2026-11-09 16:07:00 +04:00
German Khokhlov c06eb89190 Merge branch 'main' into german/transit-bikeshare-empty-state 2026-11-06 23:37:24 +04:00
German Khokhlov 4c62435910 Drop the duplicate callout test and the card id cache 2026-11-06 22:01:39 +04:00
German Khokhlov ea76fc4bc0 Fold duplicate coverage tests into their neighbours 2026-11-06 22:01:39 +04:00
German Khokhlov 096b891099 Simplify failed-entry camera handling and tests 2026-11-06 22:01:39 +04:00
German Khokhlov 72e2eba70d Merge pull request #1581 from bilawalsidhu/german/i18n-new-strings-fixes
Fix the translations of the voice geometry, fire filter, airspace and sea mark strings
2026-11-06 21:03:09 +04:00
German Khokhlov 41cc57d630 Merge branch 'main' into german/i18n-new-strings-fixes 2026-11-06 20:55:36 +04:00
German Khokhlov d544613aae Merge pull request #847 from kvnloo/exp/cyclone-shared-context
feat(cyclones): publish explicit storm selection to shared context
2026-11-06 20:35:22 +04:00
German Khokhlov c9f40a837c Tighten callout fade comments and docs 2026-11-06 20:20:11 +04:00
German Khokhlov 5c4918affb Tighten coverage prompt comments and docs 2026-11-06 20:20:11 +04:00
German Khokhlov 8917eebe12 Tighten failed-entry comments and docs 2026-11-06 20:20:11 +04:00
German Khokhlov 5bab5ec26d refactor(cyclones): drop defensive shared-context state and checks 2026-11-06 20:15:27 +04:00
German Khokhlov 5e64e599e1 docs(cyclones): tighten shared-context comments, changelog and notes 2026-11-06 20:07:56 +04:00
German Khokhlov 3a78f40024 Merge main into german/transit-bikeshare-empty-state
Conflict in src/layers/transit/queries.js: keep the branch's shared note with the gate's enter altitude and main's distinct region count.
2026-11-06 20:00:58 +04:00
German Khokhlov 910e63a56a Merge main into german/vessel-callout-under-card
Resolve addPaintItem by keeping both the collision reset from main and the
queued-card frame stamp from this branch.
2026-11-06 20:00:45 +04:00
German Khokhlov e1ea524b68 Merge main into german/space-missions-failed-entry 2026-11-06 20:00:21 +04:00
German Khokhlov ea22d16c1a Merge branch 'main' into exp/cyclone-shared-context 2026-11-06 19:44:54 +04:00
German Khokhlov 4e518821b5 fix(cyclones): name the classification and mark a stale cache in shared context
- Publish classificationName next to the raw NHC code; unknown codes stay
  unexpanded.
- Publish staleCacheFetchedAt only while the proxy serves its cache.
- Touch the shared store on clear only after this layer published, so a
  feed failure no longer evicts another layer's dangling selection.
- Drop the unreachable no-storm branch and the unused return value.
- Tests: split the heading fixture into due north and stationary, cover
  the unavailable and failure paths with the real store, and check that
  clear/disable leave another layer's selection alone; fold the fake-store
  test into the real-store one.
2026-11-06 19:43:04 +04:00
German Khokhlov 39ff131d60 Merge pull request #953 from trygvehhh/feat/datacenters-norway-refresh
data: refresh Norway datacenters from a Geofabrik OSM extract
2026-11-06 16:08:18 +04:00
German Khokhlov aca5317a2a Merge branch 'main' into exp/cyclone-shared-context 2026-11-06 16:03:13 +04:00
German Khokhlov c058ecf21b docs(infrastructure): keep the dataset scope note 2026-11-06 15:58:12 +04:00
German Khokhlov e073e4dbe4 Merge branch 'main' into feat/datacenters-norway-refresh 2026-11-06 15:55:23 +04:00
German Khokhlov a69d0492d0 docs(datacenters): tighten the Norway refresh notes 2026-11-06 15:54:53 +04:00
German Khokhlov 5d8f2b878f chore(datacenters): drop the one-off Norway refresh script
The data refresh is committed and its provenance (extract, timestamp, MD5,
filter) stays in the dataset README. The script needed osmium-tool and could
only re-verify while Geofabrik still listed that extract, so it goes with its
test.
2026-11-06 15:47:36 +04:00
German Khokhlov 697b6b59e6 Repaint coverage rows after loads, nudges and cleared failures 2026-11-06 14:47:47 +04:00
German Khokhlov 1015b16664 Prune queued-card rows whose pooled item paints another entry
A pooled paint item reused by another card keeps a fresh frame stamp, so
rows for cards that stopped painting survived every prune and the index
grew for the whole session. The prune now also drops a row whose item
paints a different entry id or source, and a test pins the bound.
2026-11-06 14:45:37 +04:00
German Khokhlov 0de347c328 Leave other camera flights running when Space Missions stops without a replay 2026-11-06 14:45:36 +04:00
German Khokhlov 7f8556c691 Merge branch 'main' into exp/cyclone-shared-context
# Conflicts:
#	src/app/constructCatalog.js
2026-11-05 23:01:23 +04:00
German Khokhlov 067383fda8 fix(datacenters): drop the redundant seen set and test skipped against exports
The merge test now passes an exported newly tagged feature, so removing
'- set(fresh)' from the skipped report fails it.
2026-11-05 21:42:22 +04:00
German Khokhlov edd6212793 Merge pull request #1481 from IMBrandao/feat/rio-transit-gtfs-rt
feat(transit): add Rio de Janeiro buses and BRT (SMTR GTFS-RT, CC BY 4.0)
2026-11-05 21:40:29 +04:00
German Khokhlov b5cef8daf4 Tighten the Rio comments, notes and credits
Name each Rio feed in its credit instead of repeating the licence, drop the
deprecation history from the bus note, list Rio among the feeds with a
route-name table, and shorten the route-table header and test comments.
2026-11-05 21:29:21 +04:00
German Khokhlov 017a3bc99c Merge branch 'main' into feat/rio-transit-gtfs-rt 2026-11-05 21:21:13 +04:00
German Khokhlov 90db4eb2c9 Name the real gate altitude and repaint coverage rows at once
The Transit prompt said "Fly below 3,000 km", but the closed gate opens at
2,850 km; it now names the enter threshold, as Bike Share does. When the
camera changes coverage, Transit and Bike Share ask the Layers panel to
repaint instead of leaving the old prompt up until the next 15 s / 60 s tick.
2026-11-05 21:21:03 +04:00
German Khokhlov da00b096d2 Fade a vessel's callout by its card's painted opacity
The callout now asks for the opacity its own card paints with this frame,
keyhole fade included, and fades out as the card fades in. A card faded out
at the keyhole rim leaves the callout readable, and a card fading out after
leaving its source still hides it. The vessel card id is cached on the
record, and the allocation gate covers the lookup.
2026-11-05 21:21:02 +04:00
German Khokhlov 655d93cc92 Keep a newer camera view when a failed Space Missions entry rolls back 2026-11-05 21:21:02 +04:00
German Khokhlov 1011dc04fe Merge pull request #1521 from bilawalsidhu/german/hal-721-provider-labels
Name the reporting provider in Contacts and Cockpit counts
2026-11-05 21:11:37 +04:00
German Khokhlov e9e7ed4c1a Merge branch 'main' into german/hal-721-provider-labels 2026-11-05 21:02:35 +04:00
German Khokhlov ed0ad9cf0f Add the changelog entry for #1581 2026-11-05 14:32:39 +04:00
German Khokhlov 70f405cf1b chore(transit): register rioRouteNames.js in the package and format scopes 2026-11-05 13:48:11 +04:00
German Khokhlov a67c7969fd fix(transit): read Rio speeds as the m/s SMTR publishes
Both SMTR feeds now publish Position.speed in m/s. Compared with how far
vehicles moved between reports on 2026-11-05, the published values ran
3.1x (buses) and 3.6x (BRT) below the observed speed, so the km/h
conversion divided real speeds by 3.6. Drop speedUnit and the conversion.
2026-11-05 13:48:11 +04:00
German Khokhlov e5dd7c71ac Merge main into feat/rio-transit-gtfs-rt 2026-11-05 13:35:27 +04:00
German Khokhlov ee3466dff9 Keep the queued-card check off the per-frame allocation path
Writing a fractional alpha onto the overlay record for every paint item
boxed a heap number per item per frame. The allocation gate caught it:
the generic 60-entry workload went from 2,838 to 12,614 B/frame. The
record now keeps only the frame stamp and a pointer to its paint item,
and isOverlayEntryQueued multiplies the alphas when it is asked. The
gate is back to main's numbers on Node 24.
2026-11-05 13:14:00 +04:00
German Khokhlov c64ed40c62 Add the changelog entry for #1578 2026-11-05 12:54:36 +04:00
German Khokhlov 092e7e71a8 Add the changelog entry for #1577 2026-11-05 12:54:11 +04:00
German Khokhlov 652f3c8ea1 Hide a vessel's detection callout while its own card paints
With Vessels and Detection on, a vessel with an ambient card on the map
also got its detection callout next to the bracket. The callout lane
paints beneath the cards, so its text showed through the card's plate
and covered the speed and course.

The callout now gives way only to a card the shared overlay actually
paints in the same frame. The overlay paints part of the published
cards (shared budget, collisions, UI chrome), so a vessel whose card
was dropped keeps its callout.

The detection lane paints before the cards publish their paint rects,
so getOverlayPaintRect has nothing for the current frame there. The new
isOverlayEntryQueued answers from the paint queue that the overlay
solves before painting. Vessel detection objects name their card in
cardSourceId/cardEntryId.
2026-11-05 12:53:17 +04:00
German Khokhlov 25c33893f6 Add the changelog entry for #1576 2026-11-05 12:53:09 +04:00
German Khokhlov b6ad32009f Say why Transit and Bike Share rows are empty outside coverage
Over a city with no feed or system (London, Tokyo) both rows read
"ON · — · never", the same as a feed that never answered. Transit already
computed a coverage note but put it only in `coverage`, which the row does
not show; Bike Share reported nothing at all.

Both layers now report a `zoom-in` guidance status with a `statusMessage`:
"Fly below 3,000 km to a covered region" / "No feed here yet · N regions
available" for Transit, and "Fly below 48 km to a covered city" / "No bike
share here yet · N systems available" for Bike Share. A loading or failed
Bike Share city keeps its own text. Leaving coverage clears the layer's
last-update time, so the row no longer dates data it no longer draws.

The coverage-note translations move from the voice card into
`translateStatusMessage` (ui/statusText.js), which the Layers row and the
voice card now share.
2026-11-05 12:52:28 +04:00
German Khokhlov 5c04b12164 Roll back a Space Missions entry whose mission index fails to load
The launches layer swallowed every fetch error in its update, so the
manager treated a 429 or timeout on /api/launches as a successful start.
Context then committed the isolating mode with no missions: the other
layers stayed off, unrelated enables were refused, the camera stayed at
the full-globe view and the roster kept reading "loading".

Until the first index loads, the update now reports the failure. The
manager fails the enable closed and both entry routes roll back to the
pre-entry layers. The camera pose captured at entry is restored when the
mode is left before any index loaded, and the roster shows a failed
state instead of loading. A valid empty index still enters, and a
refresh failure after a loaded index keeps its records.
2026-11-05 12:43:49 +04:00
German Khokhlov 33a2876bc0 Fix the translations of the voice geometry, fire filter, airspace and sea mark strings 2026-11-05 12:36:13 +04:00
German Khokhlov 7d8b80db0a Merge pull request #1561 from bilawalsidhu/german/chat-autocomplete-arabic-marks
Ignore Arabic short vowels and shadda in chat autocomplete
2026-11-04 23:58:19 +04:00
German Khokhlov e84cae6baa Add the changelog entry for #1561 2026-11-04 23:35:46 +04:00
German Khokhlov 06c84f92d3 Ignore Arabic short vowels and shadda in chat autocomplete
Arabic catalog strings carry optional marks ("تتبّع"), but people type
without them, so "تتبع" found no suggestion. Fold the marks out of both
the draft and the candidates before comparing.
2026-11-04 23:35:25 +04:00
German Khokhlov cd7c5d5a17 Merge pull request #1426 from bilawalsidhu/claude/hal-676-gev-fire-intensity-742bd1
feat(fires): FRP intensity filter, confidence switch and six-stop color ramp
2026-11-04 22:59:47 +04:00
German Khokhlov 908cce915a Merge remote-tracking branch 'origin/main' into claude/hal-676-gev-fire-intensity-742bd1
# Conflicts:
#	src/i18n/locales/es.json
#	src/i18n/locales/ru.json
#	src/i18n/locales/uk.json
#	src/i18n/locales/zh-CN.json
2026-11-04 22:45:08 +04:00
German Khokhlov ac28a11e41 Merge pull request #1319 from ch-bas/feat/cctv-model-specs-refresh
feat(cctv): vendor the Bosch MIC PTZ records the Amsterdam register names
2026-11-04 18:37:46 +04:00
German Khokhlov 11fb45b31b Merge branch 'main' into feat/cctv-model-specs-refresh 2026-11-04 18:24:30 +04:00
German Khokhlov 22946b075d Merge pull request #1545 from bilawalsidhu/german/typed-chat-translations
Fix the typed AI chat translations
2026-11-04 18:22:51 +04:00
German Khokhlov f79e9328d6 docs(cctv): tighten the Bosch MIC record notes 2026-11-04 18:17:26 +04:00