Commit Graph
1930 Commits
Author SHA1 Message Date
Sameh Khamis 473ea3b90b Merge branch 'main' into upstream/voice-alias-hint-budget 2026-11-02 07:07:55 -08:00
Sameh Khamis 31013d2201 Merge branch 'main' into security/cross-site-gate-overpass-military 2026-11-02 07:04:15 -08:00
Sameh Khamis c1b12a6aa4 Merge branch 'main' into fix/multipart-cable-feature-ownership 2026-11-02 07:00:05 -08:00
Sameh Khamis b17fe2b11c Merge branch 'main' into fix/e-bikeshare-derived-capacity 2026-11-02 06:58:29 -08:00
quanticsoul4772 0697cd8493 Merge branch 'main' into upstream/voice-alias-hint-budget 2026-11-02 06:51:15 -08:00
quanticsoul4772 468d5078e3 Merge branch 'main' into upstream/terrain-partial-heights 2026-11-02 06:50:47 -08:00
German Khokhlov cfc83a6078 Release the tuner noise graph after a silent dial release
A release that only selects a station now stops the looping noise source and suspends its AudioContext. The qa-radio dial scenarios start from an active stream, or expect a silent release from a stopped Radio.
2026-11-02 17:19:53 +04:00
German Khokhlov 645e13aeaa fix(hud): catch the UNAVAILABLE word flush against Han and keep multi-word names whole
Han and kana have no word edges, so a CJK forbidden word now counts anywhere
in the reply. The proxy no longer counts words: the model reads Rue de Rivoli
as one, so only the 80-character word-boundary cap remains.

Also restore src/voice/gevActions.test.mjs, reformatted by mistake in 818d2c82.
2026-11-02 17:13:58 +04:00
German Khokhlov 818d2c8295 fix(hud): keep localized summary words whole and drop padding
- The proxy keeps combining marks, in-word apostrophes and name dots
  (ar vowel signs, fr d'Orléans, ja ・), normalizes to NFC, caps every
  summary in characters and cuts at a word boundary.
- feedState is nullable instead of a `none` token, and the summary has at
  most five words: "exactly five" made the model pad short views with
  "no data" or "unavailable".
- The HUD caches only the model's words and adds the current warning on
  every paint; an RTL locale gets a leading right-to-left mark.
- The echo check also rejects an all-Latin reply in a non-Latin language,
  translated layer ids and, with every feed healthy, the UNAVAILABLE word;
  places are matched by word and one-word layer names are skipped in
  Latin-script locales.
- The warning tag names the worst layers first; a partial analyst card
  shows one partial chip.
2026-11-02 13:44:53 +04:00
German Khokhlov 857b007fb1 Keep the Radio tuning dial silent unless a stream is playing
Releasing the tuning dial always started the chosen station, plus tuning
static, even when nothing was playing. It now follows the Previous/Next
rule: the release plays only if a stream was loading, buffering or playing
when the drag began; otherwise it just selects the station.

The privacy note no longer lists finishing tuning as a way to connect and
now names voice instead, in all locales. Docs, changelog and comments are
tightened to match.
2026-11-02 13:27:55 +04:00
German Khokhlov a2be947aba Merge origin/main into fix/hal-722-radio-next-no-autoplay
main moved the Radio markup into Vue views and rebuilt the UI tests on
stores. Resolved:
- src/ui/templates/context.html: deleted in main; the new privacy note now
  lives in src/ui/views/panels/RadioPanel.vue.
- src/ui/radioControls.test.mjs: main's store fixture; the Next/Previous
  autoplay test drives store.act('cycleRadio').
- src/voice/gevRealtime.test.mjs: main's createTestVoiceUi; the stop and
  select handoff cases stay one table-driven test.
- src/data/radioNextState.test.mjs reads the published gev-radio view.
- src/i18n/locales/ar.json: the new note translated for the Arabic locale.
2026-11-02 12:36:31 +04:00
Sameh Khamis d479c1c6f6 Read an ADS-B vertical rate from one shared field reader 2026-11-02 00:09:18 -08:00
Sameh Khamis 780d8903ee Merge branch 'main' into fix/e-local-adsb-geom-rate 2026-11-02 00:09:11 -08:00
Sameh Khamis d25951272b Merge branch 'main' into fix/d-military-geom-vertical-rate 2026-11-02 00:01:44 -08:00
German Khokhlov 0d3c1ef1d9 fix(hud): ask again in the new language after an in-place switch
- _relocalize() now drops the received reply and aborts one in flight, so
  the next tick asks in the new language instead of keeping old-language
  text under the new-language state tag.
- The English-echo check also allows state words inside a place label
  (Estación Loading Dock).
- Reword the non-English instruction so it reads for every language name.
- Add the two new test files to the format scope.
2026-11-02 12:00:44 +04:00
German Khokhlov 1a6687632d Merge remote-tracking branch 'origin/main' into german/hal-623-hud-summary-locale
# Conflicts:
#	src/hud.js
#	src/hudAltitudeDatum.test.mjs
2026-11-02 11:59:08 +04:00
Sameh Khamis 6a01355560 Merge branch 'main' into fix/e-satellite-launch-year 2026-11-01 23:51:11 -08:00
Sameh Khamis e6be83cad7 Merge branch 'main' into fix/e-cable-tool-duplicates 2026-11-01 23:42:33 -08:00
Sameh Khamis 36410c7f82 Merge branch 'main' into fix/e-traffic-coverage-rounding 2026-11-01 23:35:19 -08:00
Sameh Khamis 01c6977cdd Merge branch 'main' into fix/c-unknown-altitude-speech 2026-11-01 23:25:42 -08:00
Sameh Khamis 004b452966 Merge branch 'main' into fix/e-replay-speed-countdown 2026-11-01 23:16:11 -08:00
Sameh Khamis e4c39fbea9 Merge branch 'main' into fix/e-replay-countdown-ten 2026-11-01 23:06:41 -08:00
Sameh Khamis 8a5cad98fa Merge branch 'main' into fix/b-awareness-marker-km 2026-11-01 22:57:14 -08:00
Sameh Khamis 4779432e48 Read a satellite's launch year from one TLE parser
The catalog stored the designator on satrec.intldesg for
internationalDesignatorYear, while the active-TLE lookup parsed the same
columns with tleLineLaunchYear. Each catalog entry now keeps launchYear from
tleLineLaunchYear, which moves to src/sources/tle.js beside the other TLE
field readers, and internationalDesignatorYear goes.

A blank designator now reads as an unknown year in both lookups; the
active-TLE lookup read it as 2000.
2026-11-01 22:53:35 -08:00
Sameh Khamis bfeec17c81 Merge branch 'main' into fix/e-satellite-launch-year 2026-11-01 22:51:43 -08:00
Sameh Khamis 98173afd6b test(launches): stub the replay panel the speed control now publishes to
On main, setReplaySpeed publishes the speed control through
parts.panel.publishPanel, so the replay rig needs a panel stub.
2026-11-01 22:51:37 -08:00
Sameh Khamis 950d1b78ce Merge branch 'main' into fix/b-awareness-marker-km 2026-11-01 22:47:58 -08:00
Sameh Khamis e40bff37d2 test(traffic): keep the timing test's Vite cache out of the package tree
The traffic timing test starts a Vite server rooted at the package, which
wrote its dependency cache to node_modules/.vite and kept writing after the
server closed. A host running Core's suite then finds files inside Core and
its check refuses them. The server now uses a temporary cache directory,
removed afterwards, and skips dependency discovery, which the SSR-loaded
modules never need.

The HUD place-lookup changelog note credits its PR, #1459.
2026-11-01 22:47:05 -08:00
Sameh Khamis d14205160a Format every metre/kilometre distance through one shared helper
Directions, the Contacts marker and panel, placed annotation labels, the
drawn-line measure, the Cockpit and formatRouteDistance each chose the unit
and precision on their own, and most chose before rounding: #1450, #1433 and
formatDistanceText or kilometreDigits from src/data/distanceFormat.js, which
cut after rounding. Each keeps its own metre step and rendering.

That also fixes the 10 km cut the Contacts marker and panel, the drawn-line
measure and the Cockpit still had (9,960 m read 10.0 km). The helper returns
kilometres already rounded, so the plain marker and the localized panel no
longer disagree on half-tenths such as 1,450 m.

A negative annotation distance now leaves the label without a distance, and
a drawn line with a coordinate that is not a number shows no measure, rather
than printing 0 m or NaN km. The HUD altitude tag and the spoken view height
keep their own unit choice.
2026-11-01 22:40:28 -08:00
Sameh Khamis d546d65380 feat(kit): show the panel rails as labelled pills until a panel opens
UiRail takes `collapsible`: while no panel on its side is open, each item
shows its icon and label as a pill, and once one opens the labels fold away
to the icon rail, making room for the panel. The tip is not shown while the
label is on screen; the button keeps its accessible name and the visible
label is hidden from assistive technology. The side panel rails turn it on.

Each rail is now placed by its screen-side edge, at the rail clearance, so a
rail that widens grows toward the middle of the screen; collapsed, it sits
6px outside its stack as before.
2026-11-01 22:40:17 -08:00
Sameh Khamis 2124f56f92 Merge branch 'main' into fix/b-awareness-marker-km 2026-11-01 22:40:10 -08:00
Sameh Khamis 54f12140cf Merge branch 'main' into fix/e-route-label-kilometre 2026-11-01 22:30:51 -08:00
Sameh Khamis 941a7a392e Merge branch 'main' into fix/e-route-distance-ten-km 2026-11-01 22:22:22 -08:00
manjunath d9a460658d merge main 0c28dc7 into feat/voice-outlines 2026-11-02 11:39:21 +05:30
Sameh Khamis 639a7fb23a Merge branch 'main' into fix/e-context-heading-north 2026-11-01 21:58:41 -08:00
Sameh Khamis 7d236a1174 build: cache compiled components and load them on the test thread
Since the UI moved to single-file components, every unit-test process
compiled the views it imports from scratch, and the loader ran off-thread
(module.register), adding a round trip to every module a test imports,
including the ones that are not components. Core's unit tests took about
twice as long, and a host running Core's suite on smaller runners passed
its CI time limit.

register-vue now installs synchronous hooks on the loading thread
(module.registerHooks). Compiled components are kept in the system temp
directory, keyed by the file's path and text, the Vue version and the
loader's own code, so each one compiles once across test processes; the
compiler itself loads only on a cache miss. Cached modules run as code, so
the directory is used only when it is a real directory owned by the current
user and writable by no one else; on Windows it lives in the user's local
app data instead of a temp directory that may be shared. The cache never
sits inside the package tree, and GEV_VUE_CACHE=0 compiles every time.

On four cores the full suite went from 441 s to 240 s from a cold cache.
2026-11-01 21:50:25 -08:00
Sameh Khamis 0e90a03de7 Round every heading readout through one shared helper
The transit, ALPR, vessel, CCTV and flight/military context fixes each
wrapped 359.5° to north with an inline Math.round(x) % 360. They now call
roundHeadingDegrees in src/data/headingDegrees.js, which also wraps negative
and multi-turn bearings. normalizeHeading moves there with it, and
cockpitMath re-exports it so existing imports keep working. It now adds a
turn only to a negative remainder, so a bearing just under half a degree
keeps its precision.

The awareness, Local ADS-B, cockpit wind, cockpit heading and Street Level
readouts use the same helper. The Cockpit's TRACK ACQUIRED signal rounded
without wrapping and could read COURSE 360°; it now uses
formatHeadingReadout, which shows --- for a track that is not finite.
2026-11-01 21:41:49 -08:00
Sameh Khamis e200e46695 Merge branch 'main' into fix/e-context-heading-north 2026-11-01 21:41:48 -08:00
manjunath c5aa0d28c3 merge main 07094d9 into feat/voice-outlines 2026-11-02 11:05:08 +05:30
Sameh Khamis 0e942de38c Merge branch 'main' into fix/e-cctv-heading-north 2026-11-01 21:28:43 -08:00
Sameh Khamis 87e2a2eaa8 Merge branch 'main' into fix/b-vessel-course-north 2026-11-01 21:16:27 -08:00
Sameh Khamis e5fb496d90 Merge branch 'main' into fix/b-awareness-marker-km 2026-11-01 21:04:42 -08:00
Sameh Khamis 188dd4fd29 Merge branch 'main' into fix/e-alpr-direction-360 2026-11-01 21:04:29 -08:00
Sameh Khamis 37d12ad731 Merge branch 'main' into fix/e-context-heading-north 2026-11-01 20:53:42 -08:00
Sameh Khamis 0e170e0515 test(vessels): read the north-rounding HUD heading from the published readout
The vessel HUD now publishes its text through services.readouts, so the
test harness exposes hud.readout rather than a DOM node's textContent.
2026-11-01 20:53:37 -08:00
Sameh Khamis af79691a19 test(cctv): check the north-rounding meta line through presentCctvPanel
The panel now renders from the CCTV store, so the meta line is no longer
written to a DOM node by _renderCctvState. Assert on presentCctvPanel's
meta text instead.
2026-11-01 20:53:32 -08:00
Sameh Khamis c62e580d7e Merge branch 'main' into fix/e-cctv-heading-north
# Conflicts:
#	src/ui/cctvPresentation.js
2026-11-01 20:52:40 -08:00
Sameh Khamis 08265d94d4 Merge branch 'main' into fix/b-vessel-course-north 2026-11-01 20:52:20 -08:00
Sameh Khamis 66d7a4ebce Merge branch 'main' into fix/e-transit-heading-north 2026-11-01 20:52:05 -08:00
Sameh Khamis 1f9a453bc4 i18n(ar): own the Arabic catalog in the application package; mirror select chevrons
The application package boundary owns src/i18n/locales/ar.json beside the
other catalogs, and the style.css shim test checks that the shim holds only
import statements rather than counting its lines, so adding rtl.css to it
does not read as rules.

Selects pad the chevron's side with padding-inline-end, as do the Radio
filter, the SDR gain select and the voice timeout select, which set their
own padding; rtl.css moves the chevron to the left, where an Arabic field's
text ends. A rail legend's range keeps left-to-right order under its colour
ramp, which always runs low to high from left to right.
2026-11-01 20:22:51 -08:00