Commit Graph
244 Commits
Author SHA1 Message Date
James RichandClaude Sonnet 5 1433033436 fix(wasm): close detekt/test gaps found while building the webApp module
detekt's source set list never included src/wasmJsMain or src/nonWebMain,
so every prior "detekt clean" claim in this effort never actually scanned
wasmJs code. Found while adding :webApp (whose entire source lives in
wasmJsMain and reported NO-SOURCE forever) and fixed at the root: both
source sets are now scanned repo-wide. Real findings it surfaced are
suppressed with honest, specific justification (embedded js("...") string
interop that static analysis can't see into) or fixed outright — nothing
silenced to dodge a genuine issue.

core:ble's own compileTestKotlinWasmJs had never actually been exercised:
7 of its 9 commonTest files reference Kable directly, which has no wasmJs
target, so they silently never compiled for wasmJs until this pass tried.
Moved them to a new nonWebTest source set, matching this effort's existing
android/jvm/ios-only test pattern elsewhere.

core:repository had a latent iOS-hierarchy trap: a manual nonWebTest
dependsOn edge (needed once core:testing was pulled out of commonTest)
silently disabled Kotlin's default hierarchy template, which is what wires
iosMain to the leaf iOS compilations. Restored the explicit
applyHierarchyTemplate(default) call alongside the manual edge.

Also tried retrofitting every wasmJs-enabled module to wasmJs { browser() }
to satisfy KGP's root npm resolver ahead of the webApp module (see next
commit) — reverted repo-wide: browser() arms each module's
wasmJsBrowserTest task, which allTests then picks up with no
karma/headless-Chrome runner configured anywhere in this repo, a CI-gate
regression that outweighs the benefit. Every wasmJs-enabled module's
comment now explains this explicitly instead of the stale "that's for the
eventual webApp executable" text, which turned out to be wrong.

core:ui's MeshtasticNavigationSuite gained an optional visibleDestinations
parameter (default: today's full tab set) so a host can hide a tab it has
no entry provider for without a per-platform expect/actual — needed by
webApp, which omits Map.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 04:42:26 -05:00
James RichandClaude Sonnet 5 0f1ad6d13b feat(node): enable wasmJs target
feature:node depends on core:common/data/database/datastore/domain/
model/navigation/repository/resources/service/ui/di (all already
wasmJs-enabled), coil, jetbrains.compose.material3.adaptive*, and two
libraries not yet checked by this session: com.mikepenz:multiplatform-
markdown-renderer(-m3) and com.patrykandpatrick.vico:compose(-m3) --
both confirmed to publish real wasmJs Gradle variants at their exact
pinned versions (0.45.0, 3.3.1) via Maven Central's own module
metadata.

feature:map (a real, 92-file module with its own unported expect/
actual gaps -- map rendering is deferred, this effort's own v0 scope)
was a commonMain dependency here too, but a grep found zero direct
references to it anywhere in feature:node's own source: the
dependency exists purely for Koin's classpath-based
ComponentScan("org.meshtastic.feature.map") to reach feature:map's own
@Single-annotated MapLayersManager. Since feature:map has no wasmJs
target, the dependency moves to per-platform main source sets
(android/jvm/iOS) instead of commonMain -- feature:map itself is
untouched.

This module also surfaces a real limit in this session's own
screening method: a loose `grep "expect \|actual "` pass missed a
genuine expect/actual pair in ChartDrawGuard.kt
(platformSaveCount/platformRestoreToCount), because an unrelated
`compareAndSet(expect = ...)` call elsewhere in the same file produced
a false-positive-shaped match that made the earlier pass stop looking
closely enough. The wasmJs actual is byte-identical to the existing
jvmMain one (both render via Skia/Skiko's skiaCanvas, unlike Android's
native Canvas) -- confirmed by a real compile, not assumed from the
jvm actual's shape.

Wiring the relocated feature:map dependency to iosMain needed a bare
applyHierarchyTemplate(KotlinHierarchyTemplate.default) call: unlike
core:ble/feature:connections (which both needed a custom "nonWeb"
group), this module's iosMain source set had unreliable
creation/wiring timing with wasmJs() + android registered but no
template call of its own -- the default template alone resolves it,
with iosMain correctly wired to appleMain by the template itself (no
extra manual dependsOn edge needed, unlike those two modules' iOS gap).

2 of 24 commonTest files (importing core:testing, which has no wasmJs
target) move to a new nonWebTest source set.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-31 01:51:49 -05:00
James Rich 37e8649ae4 fix(ui): show device roles by name, and stop doubling two percent signs (#6962) 2026-08-30 12:55:21 +00:00
James RichandClaude Opus 5 f5a6ae38b8 feat(map): replace OSMdroid with MapLibre on F-Droid, and put a map on desktop (#6901)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-29 15:59:26 +00:00
9bd91c75ad fix(node): scroll traceroute/log history detail popups (#6708)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: James Rich <james.a.rich@gmail.com>
2026-08-28 19:40:39 +00:00
James RichandClaude Opus 5 0cdaddbd4d chore: give each display unit symbol one definition, and pin action digests (#6936)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 15:30:01 +00:00
James RichandClaude Opus 5 834b99ce8c fix(node): convert temperature before labelling it °F, and show wind in km/h (#6925)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 12:44:49 +00:00
232d2f9d51 feat(units): resolve units from the device region, add a Units setting, render through ICU (#6916)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: nomdetom <nomdetom@protonmail.com>
2026-08-27 14:32:55 -05:00
Jeremiah K c86e2e88f0 Stabilize Mid-Session Locale Unit State Test (#6870) 2026-08-25 13:41:30 +00:00
James RichandClaude Fable 5 8a9e428ec8 feat(units): follow the OS locale for units and number formatting (#6854)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 18:51:46 +00:00
James RichandClaude Fable 5 9665eafe41 fix(metrics): eliminate the Vico canvas restore underflow crash (#6847)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 10:49:41 +00:00
James RichandClaude Fable 5 a0e18bf1fb feat(privacy): shield sensitive UI content from non-tool accessibility services (#6794)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-20 17:34:02 +00:00
James RichandClaude Fable 5 4d9cf8ec18 fix: derive temperature unit from locale temperature preference, not distance system (#6775)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 23:42:36 +00:00
James BeechingandClaude Sonnet 5 c8d9795885 feat(node): label SNR quality on the Node Details signal row (#6703)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 17:43:07 +00:00
James RichandClaude Sonnet 5 7bc6722510 fix(node): confirm before clearing a node's position track (#6745)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 16:00:53 +00:00
Jeremiah K e9d09a3380 fix(lifecycle): harden packet admission and transport ownership (#6716) 2026-08-15 21:44:17 +00:00
James Rich e8af75e09b feat(icons): add Material icons for custom SF Symbols and fix soil telemetry icons (#6722) 2026-08-15 19:40:10 +00:00
James RichandClaude Opus 5 7114dd3d5b refactor(compose): adopt keyed SideEffect and drop redundant config write-back effects (#6684)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:53:04 +00:00
James RichandClaude Opus 5 72f2d39e9d chore(compose): follow-ups from the Compose 1.12 bump (#6678)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:35:30 +00:00
James RichandClaude Opus 5 e330442dd5 feat(node): surface incomplete nodes with a badge and show them by default (#6673)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 15:56:40 +00:00
James RichandClaude Opus 5 2a3d04c498 test(node): give the compass lifecycle waits a CI-sized budget (#6670)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 11:56:17 +00:00
James RichandClaude Opus 5 492afbde5c fix(telemetry): repoint 1-Wire temperature at per-channel fields, adopt ADC voltage (#6653)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 19:39:54 +00:00
James RichandClaude Opus 5 bc7634bd81 fix(ui): restore bottom time-axis height at large font scales (#6656)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 19:26:30 +00:00
James RichandClaude Fable 5 9fa9f1e341 feat(analytics): report key user interactions as named RUM actions (#6654)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 19:11:44 +00:00
James RichandClaude Fable 5 62237342a6 fix(ui): locale-aware unit formatting and message-view font scaling (design audit) (#6629)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 13:23:40 +00:00
simulationstation 9613ba91a7 fix(node): stop compass updates while backgrounded (#6620) 2026-08-12 12:11:37 +00:00
James RichandClaude Fable 5 5a69ac101e chore: remove orphaned SatelliteCountInfo composable (#6633)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 12:07:43 +00:00
James RichandClaude Fable 5 4e30fb5cd5 fix(node): chart environment metrics in the user's display units (#6634)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 02:10:28 +00:00
James RichandClaude Opus 5 2d20cd8a47 fix(ui): give rx_snr real presence semantics end to end (#6523)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 16:40:41 +00:00
James RichandClaude Opus 5 d714b22571 chore(deps): bump protobufs to 2.7.26.140 (optional rx_time) (#6510)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 18:08:24 +00:00
James RichandClaude Opus 5 c7ca45fe93 fix(ui): stop discarding measured-zero sensor and RSSI readings (#6507)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 19:49:31 -05:00
James RichandClaude Opus 5 39139398e6 fix(model): rssi explicit presence for protobufs 2.7.26.138 (#6498)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:12:28 +00:00
James RichandClaude Opus 5 72ca3313d8 fix(node): disambiguate signal-log packet keys (#6492)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 15:11:09 +00:00
James RichandClaude Opus 5 a828e9d513 feat(node): show AQI in the air quality graph and table (#6434)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 21:25:22 +00:00
James RichandClaude Opus 5 a4be81c3a9 feat(node): group related metric cards into vertical columns (#6431)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 19:24:31 +00:00
James RichandClaude Opus 5 d9b9ce6e8a fix(node): show node counts without truncation (#6433)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 19:23:37 +00:00
James RichandClaude Sonnet 5 609732b622 fix(node): respect display units for position ground speed (#6376)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 22:34:50 +00:00
James RichandClaude Sonnet 5 aa1edae4b2 fix(node-metrics): apply full typography style instead of fontSize-only (#6375)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 22:30:05 +00:00
James RichandClaude Opus 4.8 26582710ba fix(node): stop metric-card trailing values crushing to one-char-per-line (#6374)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 22:04:56 +00:00
James RichandClaude Fable 5 beac608d9f fix: keep cached data flowing when api.meshtastic.org is down (#6335)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 07:56:30 -05:00
James RichandClaude Opus 4.8 0632993386 revert(map): back out per-waypoint DM/channel recipient picker (#6218) (#6284)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 22:25:30 +00:00
James RichandClaude Opus 4.8 40a9f227b9 fix: stabilize traceroute map node identity & fix log metric alignment (#6270)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 11:10:09 +00:00
Joey Leake 8f3bf001cc feat(map): send a waypoint as a DM or to a specific channel (#6218) 2026-07-11 17:17:30 +00:00
James Rich 0d82d76744 chore: strip ponytail: comment markers from the codebase (#6221) 2026-07-11 11:54:33 +00:00
James RichandClaude Opus 4.8 228fa8a368 fix: dedup node lists to prevent LazyColumn duplicate-key crash (#6193)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 13:31:54 +00:00
James RichandClaude Fable 5 0a3e000252 fix: address 2.8.0 release-audit findings (#6189)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 12:41:54 +00:00
James RichandClaude Opus 4.8 ae0bdd9e97 feat(node): histogram of nodes per hop distance (#5745) (#6146)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 02:13:38 +00:00
James RichandClaude Opus 4.8 0964a0b345 feat(node): show CO₂ sensor temperature & humidity on Air Quality page (#6143)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 01:57:35 +00:00
James RichandClaude Opus 4.8 9cfe72ec3c fix(metrics): air-quality chart legend follows plotted data, not selection (#6145)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 01:11:53 +00:00
James RichandClaude Opus 4.8 17501048b4 feat(map): Site Planner coverage integration — import + estimate (#6136)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 23:24:14 +00:00