Commit Graph
3835 Commits
Author SHA1 Message Date
Enzo Abyie 8785f4c886 i18n(ar): Arabic strings from #915
The Arabic locale by abiyeenzo (#915), converted from its namespaced JS
catalogs to the English-keyed ar.json: 852 entries whose English still
matches the current UI.
2026-10-28 12:37:14 +04:00
Meir Michanie e2acee4b0a i18n(uk): Ukrainian strings from #312
The Ukrainian locale by meirm (#312), converted from its namespaced JS
catalogs to the English-keyed uk.json: 832 entries whose English still
matches the current UI.
2026-10-28 12:37:13 +04:00
Enzo Abyie bdd24798db i18n(ja): Japanese strings from #913
The Japanese locale by abiyeenzo (#913), converted from its namespaced JS
catalogs to the English-keyed ja.json: 852 entries whose English still
matches the current UI.
2026-10-28 12:37:08 +04:00
Enzo Abyie 978cd72ac2 i18n(it): Italian strings from #912
The Italian locale by abiyeenzo (#912), converted from its namespaced JS
catalogs to the English-keyed it.json: 859 entries whose English still
matches the current UI.
2026-10-28 12:36:27 +04:00
German Khokhlov 1a694baf5a feat(installations): add Navara renderer 2026-10-28 12:18:03 +04:00
a4d3701c3c Merge pull request #1430 from bilawalsidhu/codex/hal-646-zh-hant
i18n: add Chinese (Traditional) zh-Hant (#1430)

Co-authored-by: Enzo Abyie <[email protected]>
Co-authored-by: EDIT-Aeterna <[email protected]>
Co-authored-by: caxer <[email protected]>
Co-authored-by: tbdavid2019 <[email protected]>
2026-10-28 12:14:29 +04:00
German Khokhlov d1ba0a7b8a Merge remote-tracking branch 'origin/main' into codex/hal-646-zh-hant 2026-10-28 11:28:43 +04:00
German KhokhlovandClaude Opus 5.5 982edfd56d i18n: use 公布 in zh-Hant to match 發布
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 11:26:52 +04:00
German KhokhlovandClaude Opus 5.5 018b6d3f1b i18n: fix zh-Hant characters OpenCC converts wrongly
Correct 年曆史 → 年歷史, 下遊 → 下游, 並道 → 併道 and 發佈 → 發布,
and list these fixes for future reconversions from zh-CN.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 10:37:21 +04:00
German Khokhlov 965a82144c refactor(installations): inject engine renderer adapter 2026-10-28 09:54:05 +04:00
German Khokhlov f4f0088814 refactor(installations): use globe camera contract 2026-10-28 09:50:17 +04:00
German Khokhlov c58bc9864b refactor(installations): make model engine neutral 2026-10-28 09:47:40 +04:00
German Khokhlov 5dd05a4a81 feat(firms): add Navara renderer checkpoint 2026-10-28 09:36:50 +04:00
Sameh Khamis 72eb3fdc73 Merge pull request #1439 from bilawalsidhu/release/v0.3.0
chore(release): prepare v0.3.0
v0.3.0
2026-10-27 22:17:54 -07:00
Sameh Khamis 237684ba86 chore(release): prepare v0.3.0 2026-10-27 22:08:29 -07:00
Said Turksever 9448c49acd Merge pull request #1431 from Rohilalala/fix/b-street-bearing-north
fix(street-level): show a 359.6° bearing as 0°, not 360°
2026-10-28 00:36:53 +00:00
quanticsoul4772 ea491e1603 Merge branch 'main' into upstream/perimeters-stale 2026-10-27 16:51:15 -07:00
quanticsoul4772 eef64cfb4f Merge branch 'main' into upstream/traffic-layer-stale 2026-10-27 16:51:08 -07:00
quanticsoul4772 0ba59112f9 Merge branch 'main' into upstream/terrain-429-pause 2026-10-27 16:51:00 -07:00
quanticsoul4772 702037f833 Merge branch 'main' into upstream/geocode-place-region 2026-10-27 16:50:51 -07:00
German KhokhlovandClaude Opus 5.5 51ee9ae914 i18n: write zh-Hant as zh-CN in Traditional characters
Rebuild the zh-Hant catalog from zh-CN with OpenCC s2tw glyph
conversion, so wording and terminology match zh-CN and only the
script differs. Drop Taiwan-specific vocabulary and wording notes;
zh-TW/HK/MO browser tags still select zh-Hant.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 23:57:25 +04:00
Aditya ffbb0f9d65 docs(changelog): add #1436 fragment 2026-10-27 21:57:42 +05:30
Aditya dc56ada3a5 docs(changelog): add #1435 fragment 2026-10-27 21:57:34 +05:30
Aditya 5d9264e65f docs(changelog): add #1434 fragment 2026-10-27 21:57:27 +05:30
Aditya 7a1a9cc706 docs(changelog): add #1433 fragment 2026-10-27 21:57:20 +05:30
Aditya 003a622602 docs(changelog): add #1432 fragment 2026-10-27 21:57:12 +05:30
Aditya 09cef19829 docs(changelog): add #1431 fragment 2026-10-27 21:56:52 +05:30
German Khokhlov 8269facb5a i18n: address Traditional Chinese translation review 2026-10-27 19:41:07 +04:00
German Khokhlov 5654be5074 docs: point Traditional Chinese changelog to replacement PR 2026-10-27 19:36:35 +04:00
German KhokhlovandClaude Fable 5.1 887b261195 fix(fires): paint aggregated heat cells warm by density, not by strongest FRP
Coloring each far-zoom cell with the ramp stop of its strongest detection
turned a burning region into a blue / teal / lime mosaic: neighbouring
cells flipped hue on one outlier and the cold stops did not read as fire.
Cells say where it burns, so they go back to the heat-normalized score
(density, night share, max FRP) on the warm end of the ramp — lime, amber,
red — with the cell card accent matching. Single detections keep the full
six-stop FRP ramp.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-27 19:19:40 +04:00
German KhokhlovandClaude Fable 5.1 1dad6b658a feat(fires): caption the confidence switch and name the slider "Fire intensity (FRP)"
The switch had no visible word saying what ALL / NOMINAL+ / HIGH refer to,
and "Min FRP" assumed the reader knows the acronym. The segmented row
descriptor gains an optional visible `label` (a caption above the group);
the fires row uses "Confidence" and "Fire intensity (FRP)", and the slider
value reads "≥ N MW" so the threshold is still clear. Locales updated.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-27 18:50:03 +04:00
German KhokhlovandClaude Fable 5.1 22a87500c6 docs(fires): current-state note and changelog fragment for the intensity filter (#1426)
Describe the six-stop FRP ramp, the slider / confidence switch / counter,
the single filter point, the share-token options and the tool arguments in
docs/CURRENT-STATE.md, and add changelog.d/1426-fire-intensity-filter.md as
CONTRIBUTING asks for runtime changes.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-27 18:30:58 +04:00
manjunath d4434aa6d7 feat(outlines): restore voice outlines without public Overpass
use bundled place boundaries and shared OpenFreeMap tiles before a guarded Nominatim fallback

preserve multipart shapes, holes and cancellation,
and keep pending annotations visible while ground sampling finishes across frames

keep non-Latin name distinctions when selecting provider results,
and retain an outline anchor only when it lies in filled geometry
2026-10-27 13:24:02 +00:00
Sunil56224972 accb8983ca fix(security): add cross-site gate to military-installations proxy
The /api/military-installations endpoint was the last keyless proxy without
the admitSameSite gate that protects terrain, CCTV, traffic, places, and
Celestrak. A cross-site <img>, foreign Origin, opaque origin, or
reverse-proxy-forwarded request now receives 403 before any Overpass query.
Same-origin app requests and bare tool requests continue to work.

Adds 4 integration tests (cross-site refused, same-origin admitted,
bare tool admitted, proxied refused) following the terrainHeightsBounds
test pattern.
2026-10-27 18:21:53 +05:30
Matt Van Horn f2e722c4bf Merge remote-tracking branch 'upstream/main' into fix/houston-cctv-pack
# Conflicts:
#	.env.example
#	README.md
#	docs/CURRENT-STATE.md
#	server/providers/cctv/catalog.js
#	server/providers/cctv/normalize.js
#	server/providers/cctv/sources.js
#	src/data/dataCredits.js
2026-10-27 05:09:29 -07:00
Matt Van Horn 4c2159a70a Merge upstream/main into fix/drone-airspace
Move the share-link token to 6 (3 is gnss-integrity), build altitude
ranges from LOWER/UPPER VAL, UOM and CODE, mark card and legend strings
for translation, rename the layer to Prohibited & Restricted Airspace,
move the changelog entry to changelog.d, and keep the layer voice-off
while the Realtime prompt is at its budget.
2026-10-27 05:06:05 -07:00
Aditya 4f7b1bc015 fix(military): read a GNSS-sourced vertical rate when no baro rate is sent
readsb reports an aircraft's vertical rate as geom_rate instead of baro_rate
when its source is GNSS. The military normaliser read only baro_rate, so about
one in six live /v2/mil contacts had a null vertical rate in analyst and
tracked-aircraft data. Fall back to geom_rate, as the adsb.lol flights
fallback already does; a sent baro_rate still wins.
2026-10-27 16:45:33 +05:30
German Khokhlov a9b3125a99 Extract the native FIRMS renderer and own its settle timer
Keep fire normalization, LOD, anchors, cards and selection portable while the native renderer owns ground cells, sprites, input and scene disposal. Cancel superseded/removed settle timers and unregister the original sprite collection.

Preserve all ten native raster pairs exactly in dev and preview; record source/click/focus/lifecycle, legacy Metal and full regression evidence with strict comparator sensitivity checks.
2026-10-27 14:40:08 +04:00
Aditya 83c4388e64 fix(awareness): show a 999.6 m contact marker as 1.0 km, not 1000 m
The on-globe Contacts markers picked metres before rounding, so a contact
999.5 m or more away read "1000 m" while the Contacts panel read
"1.0 km". The marker label now rounds first, as the panel does.
2026-10-27 15:55:30 +05:30
Aditya ea1b0d8d55 fix(voice): leave out an unreported altitude instead of saying 0 feet
select_nearest_aircraft passes altitudeM: null for an airborne contact
without a barometric altitude (military rows from adsb.lol can lack
alt_baro). The speech builder coerced it with Number(), and Number(null)
is 0, so the reply said "..., 0 feet." and the voice card showed
"Altitude 0 feet". Read the altitude only when it is a finite number,
so an unknown one is left out as the builder already intends.
2026-10-27 15:54:36 +05:30
Aditya d58199a214 fix(vessels): show a 359.7° course as 0°, not 360°
Vessel cards and the AIS HUD rounded the direction without wrapping, so
a vessel reporting no heading and a course over ground of 359.5° or more
read "360°" on its cards and "HDG: 360DEG" in the HUD. The rounded
direction now wraps to 0°.
2026-10-27 15:54:28 +05:30
Aditya 6d6b2e8fe9 fix(street-level): show a 359.6° bearing as 0°, not 360°
The Street Level viewer caption rounded the photo's bearing without
wrapping, so a view facing 359.5° or more read "360°". The rounded
bearing now wraps to 0°.
2026-10-27 15:52:27 +05:30
Aditya 60dad0c35e fix(military): don't treat adsb.lol's position-less rows as a partial snapshot
readsb omits lat/lon for a contact heard without a current position; about a
third of every /v2/mil response is such rows. They made every military
snapshot partial, so a contact that left the feed was retained at full
opacity for five minutes instead of fading and leaving on the missed-poll
limits. A row with a hex and no lat/lon now leaves the snapshot complete and
is listed in retainIds, as OpenSky's null-position rows already are.
2026-10-27 15:44:36 +05:30
German Khokhlov a3152ab719 Add depth-classified earthquakes on Navara
Match native ground footprints, encoded alpha and source ordering on real terrain and photoreal tiles while excluding forward meshes. Cache static screen data and reduce large-disc edge work without changing GPU pixels.

Add deterministic lifecycle, source/share, foreground/horizon and three-context performance proof; restore credits for available Navara feeds and retain failure history in migration evidence.
2026-10-27 13:42:07 +04:00
German KhokhlovandClaude Fable 5.1 38d29f2beb feat(fires): FRP intensity filter, confidence switch and six-stop color ramp (HAL-676)
Color every FIRMS detection by fire radiative power on the Portolan
cold → hot ramp (blue · teal · lime · amber · orange · red at
0 · 5 · 20 · 50 · 100 · 300 MW), replacing the three warm stops that
made a 2 MW and a 40 MW fire look alike. Heat cells, glow sprites and
card accents all read the same ramp (src/data/firmsIntensity.js).

Add a minimum-FRP log slider whose track is painted with the ramp (so
it doubles as the legend), an All / Nominal+ / High confidence switch
and an "N of M shown" counter to the Active Fires row. The filter runs
once in ingestion.applyFilter(), so markers, cards, heat cells, the
context store, the top-fires query and the analyst records all see one
set. Default is 0 MW / All: many of the strongest fires are rated low.

Persist both options in the layer state (token w: minFrp `f`,
confidence `c`), including the short share codec, and give the agent's
get_active_fires tool matching min_frp_mw / confidence arguments.

Layer panel gains generic `slider` and `segmented` row descriptors
(src/ui/rowFilterControls.js). New strings in es / ru / zh-CN.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-27 13:09:32 +04:00
German Khokhlov c89185f352 refactor(earthquakes): extract native renderer with identical ground-disc output
Keep refresh, cancellation and label policy engine-neutral; inject the original native entities at composition. Prove static geometry, analyst records, owner disposal and last-good refresh behavior. Native dev and QA-preview pass 18 checks each; all eight baseline PNGs remain byte-identical.
2026-10-27 10:56:41 +04:00
German Khokhlov e8870a4766 test(migration): establish W2 native oracle and release removed overlay identities
Add the sequential W2/completion plan and deterministic earthquake ground-raster, geometry, lifecycle and strict runtime QA. Prove the comparator rejects incomplete evidence and release deleted overlay entries from the collision arbiter. Record native dev/preview acceptance and full checkpoint gates.
2026-10-27 10:48:26 +04:00
German Khokhlov ba9db7fc41 Merge origin/main and sync Traditional Chinese catalog 2026-10-27 10:25:07 +04:00
German Khokhlov 8f16cf263b i18n: use zh-Hant for Chinese (Traditional) 2026-10-27 10:20:54 +04:00
nu-statsandClaude Opus 5.5 48bfaa787a Merge main; give the HUD visibility test's camera a moveStart event
Main now listens to camera.moveStart in IntelHUD's constructor (#1384), so
the fake camera in src/hudPageVisibility.test.mjs needs that event too, as
hudAltitudeDatum.test.mjs already has. No change to the fix itself.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 21:56:44 -04:00