From 14d7cf4ae0e86be3d4a4a1e9da400abc8b72bfb7 Mon Sep 17 00:00:00 2001 From: James Rich Date: Mon, 11 May 2026 13:11:27 -0500 Subject: [PATCH] docs(specs): mark 22 brownfield gap tasks complete Update tasks.md across specs 004-017 to reflect completed gap remediation work: test coverage additions, constitution violation fixes, and documentation improvements. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- specs/004-messaging/tasks.md | 2 +- specs/005-device-connections/tasks.md | 2 +- specs/006-firmware-update/tasks.md | 2 +- specs/007-node-detail-metrics/tasks.md | 12 ++++++------ specs/008-radio-app-settings/tasks.md | 4 ++-- specs/009-map-view/tasks.md | 2 +- specs/012-core-data/tasks.md | 2 +- specs/013-core-ble/tasks.md | 2 +- specs/014-core-network/tasks.md | 4 ++-- specs/015-core-database/tasks.md | 6 +++--- specs/016-core-service/tasks.md | 4 ++-- specs/017-core-model/tasks.md | 6 +++--- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/specs/004-messaging/tasks.md b/specs/004-messaging/tasks.md index 25e8d0add..4615ebc96 100644 --- a/specs/004-messaging/tasks.md +++ b/specs/004-messaging/tasks.md @@ -227,7 +227,7 @@ ## Gap Tasks (Identified During Migration) -### MSG-T029: Fix hardcoded English strings in SelectionToolbar [ ] +### MSG-T029: Fix hardcoded English strings in SelectionToolbar [x] - **File**: `feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/ui/contact/Contacts.kt` (lines 468–470) - **Issue**: `contentDescription` for mute/unmute icons uses hardcoded `"Mute selected"` / `"Unmute selected"` instead of `stringResource()`. diff --git a/specs/005-device-connections/tasks.md b/specs/005-device-connections/tasks.md index c5d3a7b09..372229960 100644 --- a/specs/005-device-connections/tasks.md +++ b/specs/005-device-connections/tasks.md @@ -162,7 +162,7 @@ - [ ] DC-T036 `[GAP]` [US1] Write `AndroidScannerViewModelTest` in `feature/connections/src/androidTest/` — test `requestBonding()` success/failure paths, `requestPermission()` USB flow, `SecurityException` handling, "bond state 11" special case. *Rationale: Android-specific bonding and permission logic has no test coverage.* - [ ] DC-T037 `[GAP]` [US1/US5] Write Compose UI tests for `ConnectionsScreen` in `feature/connections/src/commonTest/` — test `AnimatedContent` state transitions (NO_DEVICE → CONNECTING → CONNECTED), transport chip toggles, device card selection. *Rationale: All existing tests are ViewModel/use-case level; no UI-layer test coverage.* -- [ ] DC-T038 `[GAP]` Add KDoc to `ConnectionActionButtonStyle.kt` — document each enum value (`Filled`, `Tonal`, `Outlined`, `Text`) with usage context. *Rationale: Only enum in the module without documentation.* +- [x] DC-T038 `[GAP]` Add KDoc to `ConnectionActionButtonStyle.kt` — document each enum value (`Filled`, `Tonal`, `Outlined`, `Text`) with usage context. *Rationale: Only enum in the module without documentation.* --- diff --git a/specs/006-firmware-update/tasks.md b/specs/006-firmware-update/tasks.md index 950d8657d..08fdd211f 100644 --- a/specs/006-firmware-update/tasks.md +++ b/specs/006-firmware-update/tasks.md @@ -254,7 +254,7 @@ ## Identified Gaps -- [ ] **FW-T059**: Add `WifiOtaTransport` unit tests +- [x] **FW-T059**: Add `WifiOtaTransport` unit tests The WiFi/TCP OTA transport has no dedicated test coverage. Should test connection, command sending, response reading, firmware streaming, and error handling using a fake Ktor socket. - [ ] **FW-T060**: Add `FirmwareUpdateScreen` composable/screenshot tests diff --git a/specs/007-node-detail-metrics/tasks.md b/specs/007-node-detail-metrics/tasks.md index ec7e3756a..54fa60b2e 100644 --- a/specs/007-node-detail-metrics/tasks.md +++ b/specs/007-node-detail-metrics/tasks.md @@ -292,7 +292,7 @@ ## Identified Gaps ### NDM-T100: Missing — MetricsViewModel CSV export tests for device/environment/signal/power -- [ ] Add unit tests for `saveDeviceMetricsCSV`, `saveEnvironmentMetricsCSV`, `saveSignalMetricsCSV`, `savePowerMetricsCSV` verifying correct column headers and data formatting +- [x] Add unit tests for `saveDeviceMetricsCSV`, `saveEnvironmentMetricsCSV`, `saveSignalMetricsCSV`, `savePowerMetricsCSV` verifying correct column headers and data formatting - **Rationale**: Only `savePositionCSV` has a test; the other four export methods are untested. - **Priority**: Medium @@ -302,8 +302,8 @@ - **Priority**: Low ### NDM-T102: Missing — Compass accuracy edge cases -- [ ] Add tests for `calculatePositionalAccuracyMeters` with various DOP combinations (PDOP-only, HDOP+VDOP, HDOP-only, precision-bits-only, and none) -- [ ] Add test for `calculateAngularError` when distance is zero +- [x] Add tests for `calculatePositionalAccuracyMeters` with various DOP combinations (PDOP-only, HDOP+VDOP, HDOP-only, precision-bits-only, and none) +- [x] Add test for `calculateAngularError` when distance is zero - **Rationale**: `CompassViewModelTest` exists but accuracy calculation branch coverage is not verified. - **Priority**: Medium @@ -313,7 +313,7 @@ - **Priority**: Low ### NDM-T104: Missing — Remote admin session timeout testing -- [ ] Add `NodeDetailViewModelTest` coverage for `openRemoteAdmin` with `Disconnected` and `Timeout` session results +- [x] Add `NodeDetailViewModelTest` coverage for `openRemoteAdmin` with `Disconnected` and `Timeout` session results - **Rationale**: Only `Mute` and `TraceRoute` actions are tested; session error paths are untested. - **Priority**: Medium @@ -335,6 +335,6 @@ | Compass | 2 | 2 | 0 | | Navigation | 1 | 1 | 0 | | Testing | 10 | 10 | 0 | -| **Gaps** | 6 | 0 | **6** | -| **Total** | **46** | **40** | **6** | +| **Gaps** | 6 | 3 | **3** | +| **Total** | **46** | **43** | **3** | diff --git a/specs/008-radio-app-settings/tasks.md b/specs/008-radio-app-settings/tasks.md index 26cdf865f..376622d28 100644 --- a/specs/008-radio-app-settings/tasks.md +++ b/specs/008-radio-app-settings/tasks.md @@ -332,7 +332,7 @@ - Target: `commonTest/radio/ProfileRoundTripTest.kt` - Gap: Import and export are tested individually but not end-to-end -- [ ] **SET-T074**: Add test for MQTT probe timeout and error path (`probeMqttConnection` exception handling, `clearMqttProbeStatus`) +- [x] **SET-T074**: Add test for MQTT probe timeout and error path (`probeMqttConnection` exception handling, `clearMqttProbeStatus`) - Target: `commonTest/radio/RadioConfigViewModelTest.kt` (extend) - Gap: MQTT probe not tested @@ -340,7 +340,7 @@ - Target: `commonTest/AdministrationAccessibilityTest.kt` - Gap: No accessibility testing exists -- [ ] **SET-T076**: Add test for `SettingsViewModel.saveDataCsv()` verifying CSV export through `FileService` and `ExportDataUseCase` +- [x] **SET-T076**: Add test for `SettingsViewModel.saveDataCsv()` verifying CSV export through `FileService` and `ExportDataUseCase` - Target: `commonTest/SettingsViewModelTest.kt` (extend) - Gap: CSV export function exists but is not tested diff --git a/specs/009-map-view/tasks.md b/specs/009-map-view/tasks.md index 8cc5b53d3..07976f8b8 100644 --- a/specs/009-map-view/tasks.md +++ b/specs/009-map-view/tasks.md @@ -87,7 +87,7 @@ **Purpose**: Address identified coverage gaps in the existing implementation. -- [ ] MAP-T022 [US3] **[GAP]** Add unit tests for waypoint expiration filtering logic in `BaseMapViewModel` — test that waypoints with `expire > nowSeconds` are included, `expire <= nowSeconds` are excluded, and `expire == 0` (never expires) are always included. File: `feature/map/src/commonTest/.../BaseMapViewModelTest.kt`. (SC-003) +- [x] MAP-T022 [US3] **[GAP]** Add unit tests for waypoint expiration filtering logic in `BaseMapViewModel` — test that waypoints with `expire > nowSeconds` are included, `expire <= nowSeconds` are excluded, and `expire == 0` (never expires) are always included. File: `feature/map/src/commonTest/.../BaseMapViewModelTest.kt`. (SC-003) - [ ] MAP-T023 [US1,US5] **[GAP]** Add Compose UI tests for `MapControlsOverlay` and `MapButton` composables — verify compass rotation, filter button click, location tracking toggle icon switch, refresh spinner visibility. File: `feature/map/src/commonTest/.../component/MapControlsOverlayTest.kt`. (NFR-001) **Dependencies**: Phase 4 testing infrastructure. diff --git a/specs/012-core-data/tasks.md b/specs/012-core-data/tasks.md index e6ab7ce84..1f6102071 100644 --- a/specs/012-core-data/tasks.md +++ b/specs/012-core-data/tasks.md @@ -194,7 +194,7 @@ - Verify reconnect on network recovery. - **Priority**: Medium -### DAT-T028: Add MeshRouterImpl unit tests [ ] +### DAT-T028: Add MeshRouterImpl unit tests [x] - **File to create**: `commonTest/.../manager/MeshRouterImplTest.kt` - Cover service action routing: send message, request position, traceroute, admin commands. diff --git a/specs/013-core-ble/tasks.md b/specs/013-core-ble/tasks.md index 5c0beec26..3c3d96d77 100644 --- a/specs/013-core-ble/tasks.md +++ b/specs/013-core-ble/tasks.md @@ -149,7 +149,7 @@ - Verify state transitions, profile access, disconnect handling. - **Priority**: Medium -### BLE-T020: Add KableBleScanner unit tests [ ] +### BLE-T020: Add KableBleScanner unit tests [x] - **File to create**: `commonTest/.../KableBleConnectionTest.kt` - Test scan flow emissions, timeout behavior, service UUID filtering. diff --git a/specs/014-core-network/tasks.md b/specs/014-core-network/tasks.md index 1de1124c5..c5472a83f 100644 --- a/specs/014-core-network/tasks.md +++ b/specs/014-core-network/tasks.md @@ -179,13 +179,13 @@ - Test USB attach/detach event handling; serial parameter configuration. - **Priority**: Medium -### NET-T024: Expand MQTT test coverage [ ] +### NET-T024: Expand MQTT test coverage [x] - **File to extend**: `commonTest/.../MQTTRepositoryImplTest.kt` - Add tests: topic pattern construction, JSON decode, protobuf decode, reconnect, subscription failure. - **Priority**: Medium -### NET-T025: Add HeartbeatSender unit test [ ] +### NET-T025: Add HeartbeatSender unit test [x] - **File to create**: `commonTest/.../HeartbeatSenderTest.kt` - Test periodic interval, cancellation, edge cases. diff --git a/specs/015-core-database/tasks.md b/specs/015-core-database/tasks.md index ff01e5a20..c9a1b0ade 100644 --- a/specs/015-core-database/tasks.md +++ b/specs/015-core-database/tasks.md @@ -131,19 +131,19 @@ ## Gap Tasks (Incomplete) -### DB-T017: Add Converters round-trip tests [ ] +### DB-T017: Add Converters round-trip tests [x] - **File to create**: `commonTest/.../ConvertersTest.kt` - Test proto ↔ ByteArray, ByteString ↔ ByteArray round-trips for all converter methods. - **Priority**: Low -### DB-T018: Add missing DAO tests [ ] +### DB-T018: Add missing DAO tests [x] - **Files to create**: `commonTest/.../dao/CommonQuickChatActionDaoTest.kt`, `CommonMeshLogDaoTest.kt`, etc. - Cover CRUD + reactive query behavior for untested DAOs. - **Priority**: Medium -### DB-T019: Add withDb() concurrent retry test [ ] +### DB-T019: Add withDb() concurrent retry test [x] - **File to create**: `commonTest/.../DatabaseManagerRetryTest.kt` - Simulate DB switch during active `withDb()` query; verify retry succeeds. diff --git a/specs/016-core-service/tasks.md b/specs/016-core-service/tasks.md index ac5ed65e5..6c831d341 100644 --- a/specs/016-core-service/tasks.md +++ b/specs/016-core-service/tasks.md @@ -153,13 +153,13 @@ ## Gap Tasks (Incomplete) -### SVC-T021: Add ServiceRepositoryImpl unit tests [ ] +### SVC-T021: Add ServiceRepositoryImpl unit tests [x] - **File to create**: `commonTest/.../ServiceRepositoryImplTest.kt` - Test all state flow emissions: connection, errors, packets, actions, traceroute. - **Priority**: Medium -### SVC-T022: Add DirectRadioControllerImpl tests [ ] +### SVC-T022: Add DirectRadioControllerImpl tests [x] - **File to create**: `commonTest/.../DirectRadioControllerImplTest.kt` - Test direct radio control operations (send, request config, disconnect). diff --git a/specs/017-core-model/tasks.md b/specs/017-core-model/tasks.md index 0a57a2704..1f1c9d057 100644 --- a/specs/017-core-model/tasks.md +++ b/specs/017-core-model/tasks.md @@ -132,13 +132,13 @@ ## Gap Tasks (Incomplete) -### MDL-T018: Add Node domain model unit tests [ ] +### MDL-T018: Add Node domain model unit tests [x] - **File to create**: `commonTest/.../NodeTest.kt` - Test `isOnline` boundary values, `distance()` with known coordinates, `bearing()` cardinal directions, `colors` contrast, `createFallback()`, `getRelayNode()`. - **Priority**: Medium -### MDL-T019: Add MeshDataMapper tests [ ] +### MDL-T019: Add MeshDataMapper tests [x] - **File to create**: `commonTest/.../util/MeshDataMapperTest.kt` - Test proto → domain mapping for User, Position, DeviceMetrics, EnvironmentMetrics. @@ -156,7 +156,7 @@ - Metric ↔ imperial conversion, distance formatting for known values. - **Priority**: Low -### MDL-T022: Add DataPacket + Message tests [ ] +### MDL-T022: Add DataPacket + Message tests [x] - **File to create**: `commonTest/.../DataPacketTest.kt` - Test `nodeNumToDefaultId`, equality, display formatting.