James Rich
1d24b38746
fix: sync spec docs and add edge-case coordinator tests
...
Spec docs:
- lockdown-ui.md: TTL fields now shown in unlock mode, not just provision
- data-model.md: note Lazy<MeshConnectionManager> in relationships
- plan.md: correct module :core:datastore -> :core:service
Tests (2 new):
- NEEDS_PROVISION after lockNow does not trigger LockNowAcknowledged
- UNLOCKED with no deviceAddress skips save but still authorizes
2026-05-13 12:50:30 -05:00
James Rich
2b1ccd653a
fix: break Koin circular dependency with Lazy<MeshConnectionManager>
...
MeshConnectionManagerImpl and LockdownCoordinatorImpl constructor-inject
each other, causing a StackOverflowError at Koin resolution time.
The coordinator only needs MeshConnectionManager in two rare paths
(lock-now-ack and post-unlock config reload), so defer its resolution
with Lazy<T> — matching the existing Lazy<MeshRouter> pattern in
FromRadioPacketHandlerImpl.
2026-05-13 12:19:22 -05:00
James Rich
2a1734d932
fix: finish lockdown review follow-ups
...
Address remaining review items, add integration and JVM store tests,
and sync the lockdown spec docs with the implemented API and UI.
2026-05-13 11:59:56 -05:00
James Rich
7beb639761
feat: implement lockdown mode authentication
...
- Add LockdownCoordinator state machine with auto-replay, lock-now,
and error-resilient passphrase store calls
- Add EncryptedSharedPreferences-backed Android passphrase store
with nullable fallback on crypto init failure
- Add LockdownDialog (provision/unlock/backoff) with byte-length
passphrase validation and string resources
- Add LockdownSessionStatus composable for token info display
- Gate region-unset banner on sessionAuthorized in ConnectionsScreen
- Wire Lock Now button in SecurityConfigScreen
- Add LockdownCoordinatorImplTest covering all state transitions,
auto-replay, lock-now, error paths, and uint32 overflow
- Add FakeLockdownCoordinator and update test fakes
- Delete unused LockdownUnlockDialog.kt
2026-05-13 10:49:50 -05:00
James Rich
d3ae49781b
refactor(lockdown): extract interfaces and move coordinator to commonMain
...
Phase 2 foundational refactor:
- T006: Extract LockdownPassphraseStore interface to core/repository
- T007: Make concrete Android impl implement the interface (renamed to Impl)
- T008: Add JVM/Desktop no-op passphrase store stub
- T010: Move coordinator state machine from core/service/androidMain to
core/data/commonMain as LockdownCoordinatorImpl (pure KMP, no Android deps)
- Remove old LockdownHandlerImpl (superseded)
- Convert KoinComponent lazy inject to constructor injection
2026-05-13 09:09:15 -05:00
James Rich
d25136f83e
fix: resolve compile errors from PR merge
...
- Replace java.text.DateFormat/java.util.Date usage in SecurityConfigScreen
(constitution violation: no java.* in commonMain) with simplified Lock Now button
- Replace material.icons imports with MeshtasticIcons in LockdownUnlockDialog
- Proper token info display to be re-implemented in Phase 5 (T025-T026)
2026-05-13 09:03:11 -05:00
James Rich
c9c416ee1c
Merge branch 'features/lockdown-v2' of https://github.com/meshtastic/Meshtastic-Android into feat/lockdown-mode
...
# Conflicts:
# app/src/main/kotlin/org/meshtastic/app/ui/Main.kt
# core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/CommandSenderImpl.kt
# core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt
# core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MeshActionHandlerImpl.kt
# core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImpl.kt
# core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/MeshConnectionManager.kt
# feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/ui/ConnectionsScreen.kt
# feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModel.kt
2026-05-13 08:54:22 -05:00
niccellular
f6e97d7ff7
feat(lockdown): implement coordinator and typed status dispatch
...
- CommandSenderImpl: build AdminMessage.lockdown_auth = LockdownAuth(...)
for provision/unlock and lock_now=true for the lock command.
- FromRadioPacketHandlerImpl: route the new FromRadio.lockdown_status
variant to the coordinator; also notify the coordinator on
config_complete_id.
- MeshActionHandlerImpl: forward handleSendLockdownUnlock/handleSendLockNow
to the coordinator.
- MeshConnectionManagerImpl: call coordinator.onConnect/onDisconnect; add
clearRadioConfig to purge cached config after a lock-now ACK.
- ServiceRepositoryImpl: back the lockdownState/lockdownTokenInfo/
sessionAuthorized flows.
- LockdownHandlerImpl: orchestration. Switches on LockdownStatus.State
(NEEDS_PROVISION / LOCKED / UNLOCKED / UNLOCK_FAILED), auto-replays
stored passphrase on LOCKED, clears stored passphrase on a fresh
UNLOCK_FAILED, surfaces backoff_seconds on rate-limit. Tracks a
wasLockNow flag locally so the next LOCKED status after a lock-now
command is translated to LockdownState.LockNowAcknowledged for an
immediate UI disconnect (the new schema has no explicit ACK type).
- LockdownPassphraseStore: per-device EncryptedSharedPreferences store
for auto-unlock. Not biometric-gated by design.
- Add androidx.security:security-crypto dependency.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-13 09:00:53 -04:00
James Rich
0f2b1c064a
fix: clamp future lastHeard timestamps to current time on ingestion ( #5418 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-12 07:35:11 -05:00
James Rich
10c5b5db2e
feat(api): add hasAnyEntries method to local data sources and improve… ( #5406 )
2026-05-11 19:34:41 -05:00
James Rich
95c3bc0bce
Brownfield gap remediation: 28 tasks + intro commonMain migration ( #5401 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-11 20:10:23 +00:00
James Rich
3c75510f01
fix(mqtt): harden TLS enforcement, add user CA trust, and improve error diagnostics ( #5365 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-05-06 12:09:49 -05:00
James Rich
400e0404f6
fix(data): default new-node notifications off for event firmware ( #5323 )
2026-05-02 02:02:30 +00:00
James Rich
e198f52de5
refactor(coroutines): migrate to kotlinx-coroutines 1.11.0-rc02 ( #5312 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-05-01 03:11:22 +00:00
James Rich
2822290908
refactor(build): build-logic cleanup, CC safety, and detekt 2.0 upgrade ( #5311 )
2026-05-01 02:48:37 +00:00
James Rich
3d2b21843e
refactor: update user lookups and localize traceroute responses ( #5294 )
2026-04-29 16:42:02 +00:00
James Rich
bbb7f8b23f
fix(crashlytics): resolve beta 2.7.14 crash issues ( #5245 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-25 19:23:21 +00:00
James Rich
f14ae2643c
feat(node): smoother remote-admin UX with per-node session tracking ( #5217 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-22 14:21:04 -05:00
James Rich
765594f7ee
fix: MQTT proxy connection and probe test failures ( #5215 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-22 11:05:24 -05:00
James Rich
f21d8af9ae
fix(transport): improve BLE / TCP / USB reconnect and handshake resilience ( #5196 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-20 17:34:16 +00:00
James Rich
14e86b90f1
feat(mqtt): adopt mqttastic-client-kmp 0.2.0 — disconnect reasons + Test Connection ( #5181 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-17 21:33:55 -05:00
James Rich
cdeb1ac532
fix: redact MeshLog proto secrets and centralize Compose keep-rules ( #5166 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-17 16:20:50 +00:00
James Rich
a97f704300
feat(mqtt): migrate to MQTTastic-Client-KMP ( #5165 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-17 15:19:08 +00:00
James Rich
17e69c6d4c
chore: review-cleanup fleet (audit + fix + hardening) ( #5158 )
2026-04-17 00:02:59 +00:00
James Rich
878905aea3
perf(messaging): batch node + reply lookups in message loading ( #5149 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-15 15:48:26 +00:00
James Rich
84621acb04
fix: align BLE connection handshake with firmware protocol expectations ( #5141 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-15 11:55:15 +00:00
James Rich
72b981f73b
chore: KMP audit — commonize code, centralize utilities, eliminate dead abstractions ( #5133 )
...
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-15 02:17:50 +00:00
James Rich
938a951737
refactor: leverage CMP 1.11 + Lifecycle 2.11 — v2 test API, Json privacy, dropUnlessResumed nav guards ( #5112 )
2026-04-13 20:02:31 +00:00
James Rich
e85300531e
refactor(transport): complete transport architecture overhaul — extract callback, wire BleReconnectPolicy, fix safety issues ( #5080 )
2026-04-12 04:22:18 +00:00
James Rich
9468bc6ebe
refactor(service): unify dual connectionState flows into single source of truth ( #5077 )
2026-04-12 00:50:52 +00:00
James Rich
5e44cbd3a9
fix(data): make MeshConnectionManagerImpl.onConnectionChanged atomic ( #5076 )
2026-04-12 00:49:09 +00:00
James Rich
62264b10c6
refactor(model): remove ConnectionState helper methods and fix updateStatusNotification return type ( #5074 )
2026-04-11 23:41:34 +00:00
James Rich
174315b21f
refactor(data): replace lateinit var scope + start() with constructor injection ( #5075 )
2026-04-11 23:39:29 +00:00
James Rich
a3c0a4832d
fix(transport): Kable BLE audit + thread-safety, MQTT, and logging fixes across transport layers ( #5071 )
2026-04-11 22:56:29 +00:00
James Rich
14b381c1eb
fix: harden reliability, clean up KMP compliance, and improve code quality ( #5023 )
2026-04-09 18:21:46 +00:00
James Rich
60cc2f4237
fix: resolve bugs across connection, PKI, admin, packet flow, and stability subsystems ( #5011 )
2026-04-09 13:20:06 +00:00
James Rich
b3be9e2c38
fix: improve PKI message routing and resolve database migration racecondition ( #4996 )
2026-04-05 00:37:20 +00:00
James Rich
6af3ad6f0c
refactor(service): harden KMP service layer — database init, connection reliability, handler decomposition ( #4992 )
2026-04-04 18:07:44 +00:00
James Rich
51251ab16a
feat(ci): shard test suite and enable JUnit 5 parallel execution ( #4977 )
2026-04-03 13:08:49 +00:00
James Rich
0167063497
feat(analytics): expand DataDog RUM integration and align with iOS parity ( #4970 )
2026-04-01 20:27:28 +00:00
James Rich
e249461e3c
feat(tak): introduce built-in Local TAK Server and mesh integration ( #4951 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-04-01 20:21:25 +00:00
James Rich
c75c9b34d6
feat: implement XModem file transfers and enhance BLE connection robustness ( #4959 )
2026-03-31 03:49:31 +00:00
James Rich
a005231d94
Refactor map layer management and navigation infrastructure ( #4921 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-03-26 00:29:24 +00:00
James Rich
6516287c62
refactor: BLE transport and UI for Kotlin Multiplatform unification ( #4911 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-03-25 02:15:51 +00:00
James Rich
96060a0a4d
refactor: coroutine dispatchers and modernize testing infrastructure ( #4901 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-03-24 01:31:48 +00:00
James Rich
664ebf218e
refactor: null safety, update date/time libraries, and migrate tests ( #4900 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-03-23 23:17:50 +00:00
James Rich
a0b4c56505
feat: optimistically persist local configs and channels ( #4898 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-03-23 19:57:45 +00:00
James Rich
b3b38acc0b
feat: Migrate networking to Ktor and enhance multiplatform support ( #4890 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-03-23 16:48:10 +00:00
James Rich
c38bfc64de
Refactor command handling, enhance tests, and improve discovery logic ( #4878 )
...
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com >
2026-03-22 05:42:27 +00:00
James Rich
d136b162a4
feat: Implement iOS support and unify Compose Multiplatform infrastructure ( #4876 )
2026-03-21 23:19:13 +00:00