Commit Graph
225 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 58d1d5068c feat(data): enable wasmJs, exposing mqttTransportFactory from core:network
core:data ties together core:database, core:datastore, core:di,
core:model, core:network, core:prefs, core:repository (all already
wasmJs-enabled), core:takserver (out of scope, relocated below), and
Room -- the last of which turned out to be the real blocker.

core:takserver's dependency moves to nonWebMain-only: a grep pass
confirmed core:data's own commonMain never actually references
org.meshtastic.tak (the only "TAK" substring matches were the
unrelated PortNum.ATAK_PLUGIN protobuf constant and a code comment),
so this is a mechanical relocation, not a port -- core:takserver
itself stays out of scope (niche ATAK feature).

MqttManagerImpl.kt duplicated the exact TCP+WS transport composition
core:network's MqttTransportSelection.kt already solved for
MQTTRepositoryImpl. Rather than duplicate the platform-selection
logic (and its TCP-exclusion reasoning) a second time, core:network's
mqttTransportFactory drops its `internal` modifier and becomes public;
MqttManagerImpl.kt's one-off probe client now calls it directly.

The real, unpredicted blocker: core:database exposes Room only as
`implementation` in its own commonMain, so RoomDatabase -- the
supertype of MeshtasticDatabase that core:data's repositories reach
through DatabaseProvider -- isn't visible to external consumers on
wasmJs. This never surfaced on android/jvm/iOS because core:data's
own jvmAndroidMain already carries the identical redundant Room
redeclaration, for the same reason, pre-dating this session. Fixed
with a matching wasmJsMain dependency on
androidx.room.runtime/androidx.room.paging (both confirmed to publish
real wasmJs variants; sqlite-bundled stays excluded, native-only and
unrelated to RoomDatabase itself). core:database's own
implementation-vs-api Room exposure would be a cleaner long-term fix
but is out of this pass's scope since nothing else currently needs it.

14 of core:data's 33 commonTest files -- the ones that actually import
core:testing (core:testing itself has no wasmJs target, same gap
core:ble/core:database/core:network hit) -- move to a new nonWebTest
source set; confirmed empirically that core:data's own
compileTestKotlinWasmJs task genuinely needs every commonTest
dependency to resolve, even with no browser()/nodejs() test executor
configured -- this is a real compile-time constraint on every module,
not something a bare wasmJs() sidesteps by omission.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-30 23:12:35 -05:00
James RichandClaude Fable 5 ce137a7f5e feat(discovery): suppress beacon invitations for channels the radio already has (#6964)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 18:05:25 +00:00
James Rich f78268581e feat(messaging): mark unread, swipe row actions, and pinned conversations (#6857) 2026-08-24 20:44:07 +00:00
James Rich 1ab4da0fa6 feat(messaging): per-contact drafts and a quieter composer (#6851) 2026-08-24 10:43:59 -05:00
James Rich e549d24ea3 fix(messaging): clear and suppress notifications for the conversation on screen (#6849) 2026-08-24 15:01:46 +00:00
James RichandClaude Fable 5 5447674bb4 fix(connection): extend BLE handshake deadlines while config progress flows (#6848)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 06:18:42 -05:00
James RichandClaude Sonnet 5 99075c5dbe feat(hardware): fetch the maintenance UF2 manifest from the API, digest-pinned (#6803)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 17:58:51 +00:00
James RichandClaude Sonnet 5 4651c85361 feat(hardware): fetch bootloader OTA quirks from the API, seeded from the bundled asset (#6802)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 13:23:32 +00:00
James Rich 2df817db7a fix(node): make node-list search case-insensitive for non-ASCII names (#6753) 2026-08-17 17:37:23 +00:00
James RichandClaude Opus 5 19bb682c9c feat(firmware): add nRF52/RP2040 factory erase and OTAFIX bootloader upgrade over USB (#6526)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 16:43:07 +00:00
Jeremiah K e9d09a3380 fix(lifecycle): harden packet admission and transport ownership (#6716) 2026-08-15 21:44:17 +00:00
99c5be7858 fix(notifications): stop repeated protected position alerts (#6700)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: James Rich <james.a.rich@gmail.com>
2026-08-14 13:08:40 +00:00
simulationstation 2f387369c1 fix(messaging): disambiguate sender-scoped packet IDs (#6624) 2026-08-13 13:50:37 +00:00
simulationstation b4bedd92fc fix(settings): restore channels from device profiles (#6618) 2026-08-13 12:10:18 +00:00
James RichandClaude Fable 5 b3e3804b78 fix(database): recover from Room's silent connection-pool wedge (#6608) (#6658)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 03:08:37 +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 Fable 5 dda971b5ce fix(messaging): time out orphaned "Sending..." messages into a retryable failure (#6630)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 02:10:30 +00:00
James RichandClaude Opus 5 bfb66eb988 fix(data): stop "1 hour" log retention from wiping the MeshLog table (#6635)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 02:01:32 +00:00
simulationstation fd8414abe3 fix(database): delete nodes and metadata atomically (#6623) 2026-08-12 01:36:57 +00:00
simulationstation 7a7bc50a75 fix(messaging): wait for shared-contact routing ACK (#6603) 2026-08-11 15:35:07 +00:00
James RichandClaude Opus 5 1dac0f3ac9 fix(service): unwedge the inbound pipeline behind stale-Connected zombies (#6587)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 00:57:35 +00:00
Jeremiah K 2f191868e9 fix(database): recover wedged observer pools (#6540) 2026-08-01 21:39:16 +00:00
Jeremiah K 064c8c92d9 fix(nodes): suppress alerts during initial database sync (#6538) 2026-08-01 21:38:51 +00:00
James RichandClaude Opus 5 07d253130b refactor(di): replace Koin string qualifiers with distinct types (#6522)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 20:56:07 +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 Fable 5 be320ec622 fix(mqtt): stop reporting transport failures as credential rejections (#6506)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 20:09:23 -05:00
James RichandClaude Fable 5 8a4e2e3567 fix(connections): send set_time_only at MyNodeInfo instead of onNodeDbReady (#6503)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 23:14:19 +00: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 6c32af9a84 test: revive 80 dormant tests in eight abstract Common*Test classes (#6501)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:11:42 +00:00
James RichandClaude Opus 5 b4105e3e3f fix(event): honor disabled node events, gate brand URLs, observe the manifest (#6499)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:09:13 +00:00
James RichandClaude Opus 5 5235b8fc51 fix(logging): stop reporting expected conditions as crashes (#6470)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 18:53:54 +00:00
James RichandClaude Opus 5 2d63db8dd4 fix(mqtt): scope user-CA trust to the MQTT connection (#6464)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 16:35:32 +00:00
James RichandClaude Opus 5 01cd54907d chore: harden untrusted-input handling and diagnostic output (#6441)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 08:32:07 -05:00
James RichandClaude Opus 5 237c0674c4 fix(data): don't let coarse position reports overwrite precise coordinates (#6432)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 19:24:46 +00:00
James RichandClaude Opus 5 c75223c43a fix(messaging): use mesh time for message timestamps and grouping (#6422)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-24 22:12:13 +00:00
James RichandClaude Opus 4.8 bfbf74df1e fix(channels): store channel set per-device to stop cross-device duplicates (#4623) (#6409)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 13:57:39 -05:00
Jeremiah K 8cf8214162 fix(hardware): throttle repeated catalog refreshes for cache misses (#6399) 2026-07-24 16:29:10 +00:00
James RichandClaude Opus 4.8 c07c9141c0 fix(settings): stop dropping admin config responses (0% stall, missing remote channels) (#6391)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 19:58:13 +00:00
Jeremiah K 09555a4398 fix(node): reconcile stale identity replays after renumbering (#6259) 2026-07-22 23:53:43 +00:00
James RichandClaude Fable 5 78ba069098 docs: full documentation audit for the 2.8.0 release (#6366)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 17:03:12 +00:00
Jeremiah K 602b9b086f fix(database): reduce write-lane pressure from one-shot reads (#6255) 2026-07-22 16:50:41 +00:00
James RichandClaude Opus 4.8 2ea50d5146 fix(waypoint): reject non-owner modification of a stored locked waypoint (#6348)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:23:05 +00:00
James RichandClaude Opus 4.8 83ed71d452 fix(map): allow editing/deleting your own locked waypoint (#6344)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:44:01 +00:00
Jeremiah K 1bf25121ca fix(database): make DB updates atomic across device switches (#6256) 2026-07-21 14:36:00 +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
91d2f7660b Add firmware update notice (#6309)
Co-authored-by: Benjamin Faershtein <benjaminfaershtein@Benjamins-MacBook-Pro-2.local>
Co-authored-by: James Rich <james.a.rich@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 14:31:25 -05:00
James RichandClaude Opus 4.8 e48640e473 fix(database): route all one-shot DB writes through the merge drain barrier (#6233)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:12:57 +00:00
James RichandClaude Fable 5 bc5719c8a7 fix(database): migrate device identity across firmware 2.8 renumbering (#6228)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 22:54:54 +00:00