Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
34673c2
chore(conductor): Add new track 'migrate the fully featured debug pan…
jamesarich Mar 19, 2026
a2e83eb
conductor(checkpoint): Checkpoint end of Phase 1
jamesarich Mar 19, 2026
5124f7f
conductor(plan): Mark phase 'Phase 1: Analysis and Relocation' as com…
jamesarich Mar 19, 2026
834f42c
conductor(checkpoint): Checkpoint end of Phase 2
jamesarich Mar 19, 2026
d539097
conductor(plan): Mark phase 'Phase 2: Adaptation to KMP' as complete
jamesarich Mar 19, 2026
de2ae06
conductor(checkpoint): Checkpoint end of Phase 3
jamesarich Mar 19, 2026
704e167
conductor(plan): Mark phase 'Phase 3: Desktop Integration' as complete
jamesarich Mar 19, 2026
d2c0814
chore(conductor): Mark track 'migrate the fully featured debug panel …
jamesarich Mar 19, 2026
84ef449
docs(conductor): Synchronize docs for track 'migrate the fully featur…
jamesarich Mar 19, 2026
ac69e73
fix(conductor): Apply review suggestions for track 'migrate the fully…
jamesarich Mar 19, 2026
6ab3d2f
conductor(plan): Mark task 'Apply review suggestions' as complete
jamesarich Mar 19, 2026
b13e2f3
fix(conductor): Flesh out desktop file export stub
jamesarich Mar 19, 2026
3be3a80
chore(conductor): Archive track 'migrate the fully featured debug pan…
jamesarich Mar 19, 2026
7734272
chore(conductor): Mark archived track metadata as completed
jamesarich Mar 19, 2026
1ff47b9
chore(conductor): Mark all archived tracks as completed
jamesarich Mar 19, 2026
4f1973f
fix(settings): Resolve detekt issues in debugging panel migration
jamesarich Mar 19, 2026
fe951a6
test(settings): Enable Android host-side JVM UI tests for Debug Panel
jamesarich Mar 19, 2026
fe2e79e
docs: Update KMP status and roadmap to reflect Debug Panel migration
jamesarich Mar 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "android_kable_migration_20260314",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-14T17:15:00Z",
"updated_at": "2026-03-14T17:15:00Z",
"description": "Replace Nordic with Kable on Android"
Expand Down
2 changes: 1 addition & 1 deletion conductor/archive/deep_dive_docs_20260316/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "deep_dive_docs_20260316",
"type": "chore",
"status": "new",
"status": "completed",
"created_at": "2026-03-16T12:00:00Z",
"updated_at": "2026-03-16T12:00:00Z",
"description": "do a deep dive of project docs and plans in /docs - verify against actual project/codebase state, then validate against modern best practices for android, kotlin, kmp, and the dependencies used. be thorough - check all the major dependencies. Update docs and plans accordingly."
Expand Down
2 changes: 1 addition & 1 deletion conductor/archive/desktop_ble_kable_20260314/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "desktop_ble_kable_20260314",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-14T12:00:00Z",
"updated_at": "2026-03-14T12:00:00Z",
"description": "Kable swap Keep Nordic on Android short-term. Add Kable backend only for jvmMain in core:ble first (desktop BLE enablement). Introduce a MeshtasticRadioProfile abstraction in core:ble/commonMain so NordicBleInterface no longer depends on Android/Nordic classes. Once that seam is clean, decide whether Android should stay Nordic or move to Kable."
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "desktop_di_autowiring_20260313",
"type": "chore",
"status": "new",
"status": "completed",
"created_at": "2026-03-13T12:00:00Z",
"updated_at": "2026-03-13T12:00:00Z",
"description": "Architecture Health & DI (Immediate Priority) * Desktop Koin checkModules() test: Add a test to ensure Desktop DI bindings are validated at compile-time/test-time so we catch missing interfaces early. * Auto-wire Desktop ViewModels: Configure KSP so we can eliminate the manual ViewModel wiring in DesktopKoinModule and rely on @KoinViewModel annotations like Android does."
Expand Down
2 changes: 1 addition & 1 deletion conductor/archive/desktop_parity_20260311/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "desktop_parity_20260311",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-11T12:00:00Z",
"updated_at": "2026-03-11T12:00:00Z",
"description": "continue bringing desktop up to parity with android"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "desktop_serial_transport_20260317",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-17T12:00:00Z",
"updated_at": "2026-03-17T12:00:00Z",
"description": "Implement Serial/USB transport for the Desktop target using jSerialComm. This fulfills the medium-term priority for direct radio connections on JVM and uses the shared RadioTransport interface."
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "desktop_ux_enhancements_20260316",
"name": "Desktop UX Enhancements",
"status": "in-progress",
"status": "completed",
"priority": "medium",
"tags": ["desktop", "ux", "compose"]
}
2 changes: 1 addition & 1 deletion conductor/archive/doc_consolidation_20260311/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "doc_consolidation_20260311",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-11T00:00:00Z",
"updated_at": "2026-03-11T00:00:00Z",
"description": "Implement document consolidation plan"
Expand Down
2 changes: 1 addition & 1 deletion conductor/archive/expand_testing_20260318/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "expand_testing_20260318",
"type": "chore",
"status": "new",
"status": "completed",
"created_at": "2026-03-18T10:00:00Z",
"updated_at": "2026-03-18T10:00:00Z",
"description": "Expand Testing Coverage"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "extract_android_navigation_20260318",
"type": "refactor",
"status": "new",
"status": "completed",
"created_at": "2026-03-18T00:00:00Z",
"updated_at": "2026-03-18T00:00:00Z",
"description": "Extract Android Navigation graphs to feature modules for app thinning"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "extract_hardware_transport_20260311",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-11T00:00:00Z",
"updated_at": "2026-03-11T00:00:00Z",
"description": "extract hardware/transport layers out of :app into dedicated :core modules"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "extract_remaining_background_20260318",
"type": "refactor",
"status": "new",
"status": "completed",
"created_at": "2026-03-18T14:55:00Z",
"updated_at": "2026-03-18T14:55:00Z",
"description": "Extract remaining background services and workers from app module"
Expand Down
2 changes: 1 addition & 1 deletion conductor/archive/extract_services_20260317/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "extract_services_20260317",
"type": "refactor",
"status": "new",
"status": "completed",
"created_at": "2026-03-17T00:00:00Z",
"updated_at": "2026-03-17T00:00:00Z",
"description": "Extract service/worker/radio files from `app` to `core:service/androidMain` and `core:network/androidMain`"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "extract_viewmodels_20260316",
"type": "refactor",
"status": "new",
"status": "completed",
"created_at": "2026-03-16T12:00:00Z",
"updated_at": "2026-03-16T12:00:00Z",
"description": "Extract remaining 5 App-Only ViewModels (AndroidSettingsViewModel, AndroidRadioConfigViewModel, AndroidDebugViewModel, AndroidMetricsViewModel, UIViewModel) to shared KMP feature/core modules by isolating Android-specific dependencies (Uri, Location, Locale) behind abstractions."
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "fix_android_animations_20260313",
"type": "bug",
"status": "new",
"status": "completed",
"created_at": "2026-03-13T12:00:00Z",
"updated_at": "2026-03-13T12:00:00Z",
"description": "Android animations broken - mainly noticeable on Connections screen, the indescriminate circular and linear progress bars don't move, and the MeshActivity animation is not firing, investigate recomposition and threading strangely enough they're working on Desktop"
Expand Down
2 changes: 1 addition & 1 deletion conductor/archive/kmp_doc_review_20260313/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "kmp_doc_review_20260313",
"type": "chore",
"status": "new",
"status": "completed",
"created_at": "2026-03-13T12:00:00Z",
"updated_at": "2026-03-13T12:00:00Z",
"description": "do a thorough review of the project docs for quality and veracity against the current codebase and recent changes - use tooling as needed. Evaluate updating project documentation for clarity and context. Synthesize and condense documentation and plans as needed. Be sure to thoroughly investigate the current state of the codebase and it's migration to kmp."
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "kmp_test_migration_20260318",
"type": "chore",
"status": "new",
"status": "completed",
"created_at": "2026-03-18T10:00:00Z",
"updated_at": "2026-03-18T10:00:00Z",
"description": "Migrate tests to KMP best practices and expand coverage"
Expand Down
5 changes: 5 additions & 0 deletions conductor/archive/migrate_debug_panel_20260319/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Track migrate_debug_panel_20260319 Context

- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)
8 changes: 8 additions & 0 deletions conductor/archive/migrate_debug_panel_20260319/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"track_id": "migrate_debug_panel_20260319",
"type": "feature",
"status": "completed",
"created_at": "2026-03-19T00:00:00Z",
"updated_at": "2026-03-19T10:00:00Z",
"description": "migrate the fully featured debug panel to common source for use in other targets, wire it up in desktop"
}
23 changes: 23 additions & 0 deletions conductor/archive/migrate_debug_panel_20260319/plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Implementation Plan: Debug Panel KMP Migration

## Phase 1: Analysis and Relocation [checkpoint: a2e83eb]
- [x] Task: Locate all source files for the Android Debug Panel (UI, ViewModels, States).
- [x] Task: Move these files from the Android-specific source sets (e.g., `feature/settings/src/androidMain`) into `feature/settings/src/commonMain`.
- [x] Task: Conductor - User Manual Verification 'Phase 1: Analysis and Relocation' (Protocol in workflow.md)

## Phase 2: Adaptation to KMP [checkpoint: 834f42c]
- [x] Task: Resolve compilation errors by removing Android-specific imports (`android.*`, `java.*`).
- [x] Task: Migrate Android Jetpack Compose imports (`androidx.compose`) to Compose Multiplatform equivalents (`org.jetbrains.compose.*` or ensuring the standard Multiplatform aliases are used).
- [x] Task: Ensure the Debug Panel ViewModel uses the multiplatform `androidx.lifecycle.ViewModel`.
- [x] Task: Abstract any necessary platform-specific logging or hardware interactions using `expect`/`actual` or KMP interfaces.
- [x] Task: Write or migrate corresponding unit tests to `commonTest`.
- [x] Task: Conductor - User Manual Verification 'Phase 2: Adaptation to KMP' (Protocol in workflow.md)

## Phase 3: Desktop Integration [checkpoint: de2ae06]
- [x] Task: Wire the Debug Panel into the Desktop target's settings menu (`DesktopSettingsNavigation.kt`).
- [x] Task: Add DI bindings for the Desktop module if the Debug Panel requires specific dependencies.
- [x] Task: Verify the Debug Panel screen can be opened and navigated to from the Desktop app.
- [x] Task: Conductor - User Manual Verification 'Phase 3: Desktop Integration' (Protocol in workflow.md)

## Phase: Review Fixes
- [x] Task: Apply review suggestions ac69e73
24 changes: 24 additions & 0 deletions conductor/archive/migrate_debug_panel_20260319/spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Specification: Debug Panel KMP Migration

## Overview
Migrate the existing Android-specific Debug Panel to `commonMain` to enable its use across all Kotlin Multiplatform targets, specifically wiring it up for the Desktop target.

## Functional Requirements
- The complete Android debug panel implementation will be moved and adapted to `commonMain`.
- All capabilities from the existing Android debug panel should be preserved and made functional on the Desktop target if possible.
- The Debug Panel will be accessible within the Desktop Settings menu, mirroring the Android application's navigation structure.
- Any platform-specific system logging (e.g., Logcat) that cannot be migrated will be appropriately abstracted or gracefully degraded.

## Non-Functional Requirements
- **Architecture:** Follow the project's MVI/UDF architecture.
- **UI:** Leverage Compose Multiplatform for the shared UI, removing any Android-specific Jetpack Compose dependencies from the core shared UI logic.
- **Testing:** Add `commonTest` coverage for the migrated ViewModels and presentation logic.

## Acceptance Criteria
- [ ] The Debug Panel source code resides in a `commonMain` module (e.g., `feature/settings/src/commonMain`).
- [ ] The Debug Panel compiles and runs successfully on both the Android and Desktop targets.
- [ ] The Desktop application can navigate to the Debug Panel from the Settings menu.
- [ ] Essential debug features (transport logs, packet inspection, etc.) function on the Desktop.

## Out of Scope
- Creating new debug capabilities that do not already exist in the Android implementation.
2 changes: 1 addition & 1 deletion conductor/archive/mqtt_transport_20260318/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "mqtt_transport_20260318",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-18T00:00:00Z",
"updated_at": "2026-03-18T00:00:00Z",
"description": "MQTT transport"
Expand Down
2 changes: 1 addition & 1 deletion conductor/archive/wire_up_notifs_20260316/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"track_id": "wire_up_notifs_20260316",
"type": "feature",
"status": "new",
"status": "completed",
"created_at": "2026-03-16T00:00:00Z",
"updated_at": "2026-03-16T00:00:00Z",
"description": "wire up notifs"
Expand Down
1 change: 1 addition & 0 deletions conductor/product.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Meshtastic-Android is a Kotlin Multiplatform (KMP) application designed to facil
- Adaptive node and contact management
- Offline map rendering and device positioning
- Device configuration and firmware updates
- Unified cross-platform debugging and packet inspection

## Key Architecture Goals
- Provide a robust, shared KMP core (`core:model`, `core:ble`, `core:repository`, `core:domain`, `core:data`, `core:network`, `core:service`) to support multiple platforms (Android, Desktop, iOS)
Expand Down
1 change: 0 additions & 1 deletion conductor/tracks.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# Project Tracks

This file tracks all major tracks for the project. Each track has its own detailed plan in its respective folder.

1 change: 0 additions & 1 deletion desktop/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ The module depends on the JVM variants of KMP modules:
| `ui/settings/DesktopNetworkConfigScreen.kt` | Network config without QR/NFC scanning |
| `ui/settings/DesktopSecurityConfigScreen.kt` | Security config with JVM `SecureRandom` (omits file export) |
| `ui/settings/DesktopExternalNotificationConfigScreen.kt` | External notification config without MediaPlayer/file import |
| `ui/settings/DesktopDebugScreen.kt` | Desktop-specific debug info screen |
| `ui/nodes/DesktopAdaptiveNodeListScreen.kt` | Adaptive node list-detail using JetBrains `ListDetailPaneScaffold` |
| `ui/messaging/DesktopAdaptiveContactsScreen.kt` | Adaptive contacts list-detail using JetBrains `ListDetailPaneScaffold` |
| `ui/messaging/DesktopMessageContent.kt` | Desktop message content with send, reactions, and selection |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,10 @@ fun EntryProviderScope<NavKey>.desktopSettingsGraph(backStack: NavBackStack<NavK
CleanNodeDatabaseScreen(viewModel = viewModel)
}

// Debug Panel — Desktop-specific basic log viewer
// Debug Panel — shared commonMain composable
entry<SettingsRoutes.DebugPanel> {
val viewModel: org.meshtastic.feature.settings.debugging.DebugViewModel = koinViewModel()
org.meshtastic.desktop.ui.settings.DesktopDebugScreen(
org.meshtastic.feature.settings.debugging.DebugScreen(
viewModel = viewModel,
onNavigateUp = { backStack.removeLastOrNull() },
)
Expand Down

This file was deleted.

2 changes: 1 addition & 1 deletion docs/kmp-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Working Compose Desktop application with:
- **Desktop language picker** backed by `UiPreferencesDataSource.locale`, with immediate Compose Multiplatform resource updates
- **Navigation-preserving locale switching** via `Main.kt` `staticCompositionLocalOf` recomposition instead of recreating the Nav3 backstack
- Node detail metrics screens (Device, Environment, Signal, Power, Pax) wired with shared KMP + Vico charts
- 7 desktop-specific screens (Settings, Device, Position, Network, Security, ExternalNotification, Debug)
- 6 desktop-specific screens (Settings, Device, Position, Network, Security, ExternalNotification)
- **Native notifications and system tray icon** wired via `DesktopNotificationManager`
- **Native release pipeline** generating `.dmg` (macOS), `.msi` (Windows), and `.deb` (Linux) installers in CI

Expand Down
2 changes: 1 addition & 1 deletion docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ here| **Migrate to JetBrains Compose Multiplatform dependencies** | High | Low |

| Feature | Status |
|---|---|
| Settings | ✅ ~35 real screens (7 desktop-specific) + desktop locale picker with in-place recomposition |
| Settings | ✅ ~35 real screens (6 desktop-specific) + desktop locale picker with in-place recomposition |
| Node list | ✅ Adaptive list-detail with real `NodeDetailContent` |
| Messaging | ✅ Adaptive contacts with real message view + send |
| Connections | ✅ Unified shared UI with dynamic transport detection |
Expand Down
13 changes: 12 additions & 1 deletion feature/settings/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,17 @@ kotlin {
implementation(project(":core:datastore"))
}

val androidHostTest by getting { dependencies { implementation(project(":core:datastore")) } }
val androidHostTest by getting {
dependencies {
implementation(project(":core:datastore"))
implementation(libs.junit)
implementation(libs.robolectric)
implementation(libs.turbine)
implementation(libs.kotlinx.coroutines.test)
implementation(libs.androidx.compose.ui.test.junit4)
implementation(libs.androidx.compose.ui.test.manifest)
implementation(libs.androidx.test.ext.junit)
}
}
}
}
Loading