James Rich
1f92259f6d
feat(database): enable wasmJs with real OPFS-backed persistence
...
Room 3.0.2 + androidx.sqlite:sqlite-web:2.7.0's WebWorkerSQLiteDriver, backed by real
SQLite compiled to WASM (@sqlite.org/sqlite-wasm) running in a dedicated Web Worker
(core/database/worker/{package.json,worker.js}), persisting via OPFS -- same shape
already proven end-to-end this session (insert survives a full page reload) against
the upstream danysantiago/room-web-demo reference. Uses the same nonWebMain
hierarchy-split pattern already proven for core:ble.
DatabaseManager (multi-device switching, legacy-DB migration, cross-transport merge)
is built entirely on DatabaseDataStore (a DataStore<Preferences> wrapper), and
androidx.datastore.preferences has zero wasmJs variant at any published version --
not a temporary gap, the Preferences type itself doesn't resolve for that target. That
whole orchestrator is out of scope for a web client (no BLE/USB device-switching story
exists there), so it moves to nonWebMain unchanged, alongside DatabaseDataStore and its
Koin module. wasmJs gets a new SingleDatabaseProvider: one real, persistent,
non-switching MeshtasticDatabase, nothing to switch between.
BusyTimeoutSQLiteDriver turned out not to be platform-neutral as originally assumed:
androidx.sqlite.SQLiteDriver.open() is suspend on androidx.sqlite's own webMain branch,
non-suspend everywhere else (confirmed from androidx.sqlite:sqlite:2.7.0's own
sources) -- split into two independent, identically-shaped classes rather than one
shared implementation, since the suspend-modifier difference means actual can't
paper over it (same "disjoint compilations" shape as core:ble's
BleServiceExtensions.kt).
getInMemoryDatabaseBuilder()/getDatabaseDirectory()/deleteDatabase()/getFileSystem()
fail loudly or return best-effort placeholders on wasmJs -- confirmed via grep that
their only real caller, DatabaseManager, lives entirely in nonWebMain now, so nothing
wasmJs-reachable needs them to do anything real. Same "fail loudly, don't silently
return wrong data" precedent as core:resources' getString().
androidApp/desktopApp needed a small, necessary addition: registering the new
CoreDatabaseNonWebModule alongside the existing CoreDatabaseModule, since without it
neither platform would have a DatabaseDataStore Koin binding anymore.
Verified independently twice: compileKotlinWasmJs/compileTestKotlinWasmJs pass;
full regression (android/jvm/iOS compiles, allTests -- with the ~21 moved
DatabaseManager*/DAO tests confirmed actually executing via real test-report output,
not just exit code) passes; androidApp and desktopApp both compile clean with the new
DI wiring; detekt/spotlessCheck clean across core:database and both app modules. No
real browser round-trip test was run against this exact worker.js (accepted as a
stretch goal, not required for this pass).
2026-08-30 20:50:59 -05: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 and Claude 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 Rich and Claude 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 and Claude Fable 5
459eb61948
fix(database): give every SQLite connection a busy timeout ( #6809 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-08-21 12:42:59 +00:00
James Rich and Claude Fable 5
b6213f94ec
fix(database): rebuild the packet FTS index after the schema-52 table recreation ( #6808 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-08-21 12:23:57 +00:00
James Rich
3796787cdf
fix(database): raise default cache limit and warn before eviction ( #6742 )
2026-08-17 17:37:51 +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 Rich and Claude 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
41414f832f
fix(discovery): restore radio state after interrupted scans ( #6717 )
2026-08-15 23:49:38 +00:00
Jeremiah K
e9d09a3380
fix(lifecycle): harden packet admission and transport ownership ( #6716 )
2026-08-15 21:44:17 +00:00
simulationstation
2f387369c1
fix(messaging): disambiguate sender-scoped packet IDs ( #6624 )
2026-08-13 13:50:37 +00:00
James Rich and Claude 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 Rich and Claude Opus 5
d5848ad5e0
fix(database): bound withDb execution so one wedged callback can't stall every write ( #6661 )
...
Co-authored-by: Claude Opus 5 <noreply@anthropic.com >
2026-08-12 20:45:10 +00:00
James Rich and Claude 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
simulationstation
fd8414abe3
fix(database): delete nodes and metadata atomically ( #6623 )
2026-08-12 01:36:57 +00:00
Jeremiah K
2f191868e9
fix(database): recover wedged observer pools ( #6540 )
2026-08-01 21:39:16 +00:00
James Rich and Claude 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 Rich and Claude 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 Rich and Claude 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 Rich and Claude 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 Rich and Claude 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 Rich and Claude Opus 5
4c3196c29a
fix(connections): dedupe recent-TCP and reaction list keys ( #6494 )
...
Co-authored-by: Claude Opus 5 <noreply@anthropic.com >
2026-07-28 16:19:07 +00:00
James Rich and Claude 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 Rich and Claude 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
Jeremiah K
09555a4398
fix(node): reconcile stale identity replays after renumbering ( #6259 )
2026-07-22 23:53:43 +00:00
Jeremiah K
602b9b086f
fix(database): reduce write-lane pressure from one-shot reads ( #6255 )
2026-07-22 16:50:41 +00:00
Jeremiah K
1bf25121ca
fix(database): make DB updates atomic across device switches ( #6256 )
2026-07-21 14:36:00 +00:00
James Rich and Claude Opus 4.8
c0cf5a6da9
fix(database): make the injected DiscoveryDao follow the active database ( #6236 )
...
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:48:45 +00:00
James Rich and Claude 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 Rich and Claude Opus 4.8
4e48e64e78
fix(database): make completed cross-transport merges retry-idempotent ( #6231 )
...
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-11 23:40:17 +00:00
James Rich and Claude 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
James Rich and Claude Fable 5
5b0d046d42
feat(firmware): nightly preview channel behind the hidden-features unlock ( #6225 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-11 19:41:19 +00:00
James Rich and Claude Fable 5
97935eb30d
fix(database): force Room single-connection pool on all platforms ( #6202 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-10 18:43:02 +00:00
James Rich and Claude Fable 5
efbd70d591
build: apply Gradle/Kotlin best-practices audit fixes ( #6200 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-10 18:39:53 +00:00
James Rich and Claude Fable 5
1d91a9f22c
fix(service): route notification quick-replies through the send pipeline; drop dead parcelize plugin ( #6196 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-10 15:24:31 +00:00
James Rich and Claude Fable 5
7115c176d4
fix(discovery): restore radio home config after an interrupted scan ( #6192 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-10 13:48:04 +00:00
James Rich and Claude Opus 4.8
f6a3f091ed
test(database): exercise the Room migration chain in CI ( #6191 )
...
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-10 13:22:42 +00:00
James Rich and Claude 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
Jeremiah K
a3a8397134
fix(database): recover firmware metadata reads after DB pool churn ( #6177 )
2026-07-09 23:36:27 +00:00
James Rich and Claude Opus 4.8
9e55cdb3eb
feat: wire up event-firmware metadata API (offline-first) + post-event firmware reminder ( #6162 )
...
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-08 23:53:32 +00:00
Jeremiah K
e12c4a579d
fix(runtime): harden BLE profile, OTA setup, and DB access ( #6126 )
2026-07-07 19:58:43 +00:00
James Rich
33fbb9f7fc
chore: fix build warnings and migrate deprecated APIs ( #6130 )
2026-07-07 18:17:42 +00:00
James Rich and Claude Opus 4.8
6b58a975ef
feat(node): label power channels and fix pressure axis scale ( #6111 )
...
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-06 16:40:00 +00:00
James Rich and Claude Opus 4.8
4ea3f27e8c
test: activate dead NodeInfoDao tests ( #6113 )
...
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-06 15:13:24 +00:00
James Rich and Claude Opus 4.8
4a9f85bf5e
feat(database): unify device database across transports ( #6096 )
...
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-06 01:41:29 +00:00
Ben Meadors
d815d6d363
feat(messaging): translate chat messages in-place with on-device ML Kit (google flavor only) ( #6103 )
2026-07-06 01:03:38 +00:00
James Rich and Claude Fable 5
32cbf522bd
fix(data): stale firmware/hardware caches — stop cancelling slow API refreshes, prune pulled releases, seed from newer bundles ( #6060 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-02 02:35:18 +00:00