diff --git a/.gitignore b/.gitignore index 93f6820717..d02a8bbd3d 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,9 @@ hs_err_pid*.log replay_pid*.log .attach_pid* +# Local build output redirected to a file +/build.log + # Local library development clones /coil/ /kable/ diff --git a/build.log b/build.log deleted file mode 100644 index 64ddce300d..0000000000 --- a/build.log +++ /dev/null @@ -1,21484 +0,0 @@ -gradle-queue: acquired slot.1 -> /Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/gradlew spotlessApply spotlessCheck detekt assembleDebug test allTests kmpSmokeCompile -Isolated Projects is an incubating feature. -Calculating task graph as configuration cache cannot be reused because file 'gradle/libs.versions.toml' has changed. -> Task :settings-plugin:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :settings-plugin:compileKotlin UP-TO-DATE -> Task :settings-plugin:compileJava NO-SOURCE -> Task :settings-plugin:pluginDescriptors UP-TO-DATE -> Task :settings-plugin:processResources UP-TO-DATE -> Task :settings-plugin:classes UP-TO-DATE -> Task :settings-plugin:jar UP-TO-DATE -Type-safe project accessors is an incubating feature. -> Task :build-logic:convention:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :build-logic:convention:compileKotlin FROM-CACHE -> Task :build-logic:convention:compileJava NO-SOURCE -> Task :build-logic:convention:pluginDescriptors UP-TO-DATE -> Task :build-logic:convention:processResources UP-TO-DATE -> Task :build-logic:convention:classes UP-TO-DATE -> Task :build-logic:convention:jar UP-TO-DATE - -> Configure project :screenshot-tests -WARNING: The option setting 'android.experimental.enableScreenshotTest=true' is experimental. -The current default is 'false'. -Add android.sync.suppressAgpWarnings=UNSUPPORTED_PROJECT_OPTION_USE to the gradle.properties file to suppress this warning. - -> Configure project :docs-screenshots -WARNING: The option setting 'android.experimental.lint.heapSize=3G' is experimental. -Add android.sync.suppressAgpWarnings=UNSUPPORTED_PROJECT_OPTION_USE to the gradle.properties file to suppress this warning. - -> Configure project :feature:docs -WARNING: The 'commonTest' source directory exists, but android host tests are not enabled. To enable android host tests, add `withHostTest {}` to your android target configuration in the Gradle build file. -Add android.sync.suppressAgpWarnings=GENERIC to the gradle.properties file to suppress this warning. - -> Configure project :feature:messaging -WARNING: The 'commonTest' source directory exists, but android host tests are not enabled. To enable android host tests, add `withHostTest {}` to your android target configuration in the Gradle build file. -Add android.sync.suppressAgpWarnings=GENERIC to the gradle.properties file to suppress this warning. - -> Configure project :core:navigation -WARNING: The 'commonTest' source directory exists, but android host tests are not enabled. To enable android host tests, add `withHostTest {}` to your android target configuration in the Gradle build file. -Add android.sync.suppressAgpWarnings=GENERIC to the gradle.properties file to suppress this warning. - -> Configure project :feature:settings -WARNING: The 'commonTest' source directory exists, but android host tests are not enabled. To enable android host tests, add `withHostTest {}` to your android target configuration in the Gradle build file. -Add android.sync.suppressAgpWarnings=GENERIC to the gradle.properties file to suppress this warning. - -> Configure project :core:ui -WARNING: The 'commonTest' source directory exists, but android host tests are not enabled. To enable android host tests, add `withHostTest {}` to your android target configuration in the Gradle build file. -Add android.sync.suppressAgpWarnings=GENERIC to the gradle.properties file to suppress this warning. -[Koin] Auto-enabling strictSafety on :desktopApp (detected startKoin / @KoinApplication / koinApplication). -[Koin] Auto-enabling strictSafety on :desktopApp (detected startKoin / @KoinApplication / koinApplication). -[Koin] Auto-enabling strictSafety on :core:service (detected startKoin / @KoinApplication / koinApplication). - -> Task :docs-screenshots:spotlessKotlin FROM-CACHE -> Task :docs-screenshots:spotlessKotlinApply UP-TO-DATE -> Task :desktopApp:spotlessKotlin FROM-CACHE -> Task :desktopApp:spotlessKotlinApply UP-TO-DATE -> Task :marketing-screenshots:spotlessKotlin FROM-CACHE -> Task :marketing-screenshots:spotlessKotlinApply UP-TO-DATE -> Task :docs-screenshots:spotlessKotlinGradle FROM-CACHE -> Task :docs-screenshots:spotlessKotlinGradleApply UP-TO-DATE -> Task :docs-screenshots:spotlessApply UP-TO-DATE -> Task :desktopApp:spotlessKotlinGradle FROM-CACHE -> Task :desktopApp:spotlessKotlinGradleApply UP-TO-DATE -> Task :desktopApp:spotlessApply UP-TO-DATE -> Task :marketing-screenshots:spotlessKotlinGradle FROM-CACHE -> Task :marketing-screenshots:spotlessKotlinGradleApply UP-TO-DATE -> Task :marketing-screenshots:spotlessApply UP-TO-DATE -> Task :schema-strings:spotlessKotlinGradle -> Task :schema-strings:spotlessKotlinGradleApply -> Task :schema-strings:spotlessKotlin -> Task :schema-strings:spotlessKotlinApply -> Task :schema-strings:spotlessApply -> Task :screenshot-tests:spotlessKotlinGradle FROM-CACHE -> Task :screenshot-tests:spotlessKotlin FROM-CACHE -> Task :screenshot-tests:spotlessKotlinGradleApply UP-TO-DATE -> Task :screenshot-tests:spotlessKotlinApply UP-TO-DATE -> Task :screenshot-tests:spotlessApply UP-TO-DATE -> Task :core:ble:spotlessKotlinGradle FROM-CACHE -> Task :core:ble:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:common:spotlessKotlinGradle FROM-CACHE -> Task :core:common:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:common:spotlessKotlin FROM-CACHE -> Task :core:common:spotlessKotlinApply UP-TO-DATE -> Task :core:common:spotlessApply UP-TO-DATE -> Task :androidApp:spotlessKotlin FROM-CACHE -> Task :core:barcode:spotlessKotlin FROM-CACHE -> Task :androidApp:spotlessKotlinApply UP-TO-DATE -> Task :core:barcode:spotlessKotlinApply UP-TO-DATE -> Task :core:ble:spotlessKotlin FROM-CACHE -> Task :core:ble:spotlessKotlinApply UP-TO-DATE -> Task :core:ble:spotlessApply UP-TO-DATE -> Task :androidApp:spotlessKotlinGradle FROM-CACHE -> Task :androidApp:spotlessKotlinGradleApply UP-TO-DATE -> Task :androidApp:spotlessApply UP-TO-DATE -> Task :core:barcode:spotlessKotlinGradle FROM-CACHE -> Task :core:barcode:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:barcode:spotlessApply UP-TO-DATE -> Task :core:di:spotlessKotlin FROM-CACHE -> Task :core:di:spotlessKotlinApply UP-TO-DATE -> Task :core:datastore:spotlessKotlin FROM-CACHE -> Task :core:datastore:spotlessKotlinApply UP-TO-DATE -> Task :core:di:spotlessKotlinGradle FROM-CACHE -> Task :core:di:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:di:spotlessApply UP-TO-DATE -> Task :core:datastore:spotlessKotlinGradle FROM-CACHE -> Task :core:database:spotlessKotlin FROM-CACHE -> Task :core:datastore:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:database:spotlessKotlinApply UP-TO-DATE -> Task :core:datastore:spotlessApply UP-TO-DATE -> Task :core:data:spotlessKotlin FROM-CACHE -> Task :core:data:spotlessKotlinApply UP-TO-DATE -> Task :core:domain:spotlessKotlin FROM-CACHE -> Task :core:domain:spotlessKotlinApply UP-TO-DATE -> Task :core:domain:spotlessKotlinGradle FROM-CACHE -> Task :core:domain:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:konsist:spotlessKotlin FROM-CACHE -> Task :core:domain:spotlessApply UP-TO-DATE -> Task :core:konsist:spotlessKotlinApply UP-TO-DATE -> Task :core:konsist:spotlessKotlinGradle FROM-CACHE -> Task :core:konsist:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:konsist:spotlessApply UP-TO-DATE -> Task :core:data:spotlessKotlinGradle FROM-CACHE -> Task :core:data:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:data:spotlessApply UP-TO-DATE -> Task :core:navigation:spotlessKotlin FROM-CACHE -> Task :core:navigation:spotlessKotlinApply UP-TO-DATE -> Task :core:database:spotlessKotlinGradle FROM-CACHE -> Task :core:database:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:database:spotlessApply UP-TO-DATE -> Task :core:network:spotlessKotlin FROM-CACHE -> Task :core:network:spotlessKotlinApply UP-TO-DATE -> Task :core:navigation:spotlessKotlinGradle FROM-CACHE -> Task :core:navigation:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:navigation:spotlessApply UP-TO-DATE -> Task :core:nfc:spotlessKotlin FROM-CACHE -> Task :core:nfc:spotlessKotlinApply UP-TO-DATE -> Task :core:nfc:spotlessKotlinGradle FROM-CACHE -> Task :core:nfc:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:nfc:spotlessApply UP-TO-DATE -> Task :core:model:spotlessKotlinGradle -> Task :core:model:spotlessKotlinGradleApply -> Task :core:prefs:spotlessKotlin FROM-CACHE -> Task :core:repository:spotlessKotlin FROM-CACHE -> Task :core:prefs:spotlessKotlinApply UP-TO-DATE -> Task :core:network:spotlessKotlinGradle FROM-CACHE -> Task :core:repository:spotlessKotlinApply UP-TO-DATE -> Task :core:network:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:network:spotlessApply UP-TO-DATE -> Task :core:service:spotlessKotlinGradle FROM-CACHE -> Task :core:service:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:prefs:spotlessKotlinGradle FROM-CACHE -> Task :core:prefs:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:prefs:spotlessApply UP-TO-DATE -> Task :core:resources:spotlessKotlin -> Task :core:resources:spotlessKotlinApply -> Task :core:repository:spotlessKotlinGradle FROM-CACHE -> Task :core:service:spotlessKotlin FROM-CACHE -> Task :core:service:spotlessKotlinApply UP-TO-DATE -> Task :core:repository:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:service:spotlessApply UP-TO-DATE -> Task :core:repository:spotlessApply UP-TO-DATE -> Task :core:testing:spotlessKotlin FROM-CACHE -> Task :core:resources:spotlessKotlinGradle -> Task :core:testing:spotlessKotlinApply UP-TO-DATE -> Task :core:resources:spotlessKotlinGradleApply -> Task :core:resources:spotlessApply -> Task :core:takserver:spotlessKotlin FROM-CACHE -> Task :core:takserver:spotlessKotlinApply UP-TO-DATE -> Task :core:takserver:spotlessKotlinGradle FROM-CACHE -> Task :core:takserver:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:takserver:spotlessApply UP-TO-DATE -> Task :core:testing:spotlessKotlinGradle FROM-CACHE -> Task :core:testing:spotlessKotlinGradleApply UP-TO-DATE -> Task :core:testing:spotlessApply UP-TO-DATE -> Task :feature:connections:spotlessKotlin FROM-CACHE -> Task :feature:connections:spotlessKotlinApply UP-TO-DATE -> Task :feature:discovery:spotlessKotlin FROM-CACHE -> Task :feature:discovery:spotlessKotlinApply UP-TO-DATE -> Task :feature:discovery:spotlessKotlinGradle FROM-CACHE -> Task :feature:discovery:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:discovery:spotlessApply UP-TO-DATE -> Task :feature:connections:spotlessKotlinGradle FROM-CACHE -> Task :feature:connections:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:connections:spotlessApply UP-TO-DATE -> Task :feature:firmware:spotlessKotlin FROM-CACHE -> Task :feature:firmware:spotlessKotlinApply UP-TO-DATE -> Task :core:ui:spotlessKotlinGradle -> Task :core:ui:spotlessKotlinGradleApply -> Task :feature:intro:spotlessKotlin FROM-CACHE -> Task :feature:intro:spotlessKotlinApply UP-TO-DATE -> Task :feature:firmware:spotlessKotlinGradle FROM-CACHE -> Task :feature:intro:spotlessKotlinGradle FROM-CACHE -> Task :feature:firmware:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:firmware:spotlessApply UP-TO-DATE -> Task :feature:map:spotlessKotlin FROM-CACHE -> Task :feature:docs:spotlessKotlinGradle FROM-CACHE -> Task :feature:intro:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:intro:spotlessApply UP-TO-DATE -> Task :feature:map:spotlessKotlinApply UP-TO-DATE -> Task :feature:docs:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:map-maplibre:spotlessKotlinGradle FROM-CACHE -> Task :feature:map-maplibre:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:map:spotlessKotlinGradle FROM-CACHE -> Task :feature:map:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:map:spotlessApply UP-TO-DATE -> Task :feature:map-maplibre:spotlessKotlin FROM-CACHE -> Task :feature:map-maplibre:spotlessKotlinApply UP-TO-DATE -> Task :feature:map-maplibre:spotlessApply UP-TO-DATE -> Task :feature:map-terrain:spotlessKotlin FROM-CACHE -> Task :feature:map-terrain:spotlessKotlinApply UP-TO-DATE -> Task :feature:messaging:spotlessKotlin FROM-CACHE -> Task :feature:messaging:spotlessKotlinApply UP-TO-DATE -> Task :feature:map-terrain:spotlessKotlinGradle FROM-CACHE -> Task :feature:map-terrain:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:map-terrain:spotlessApply UP-TO-DATE -> Task :feature:messaging:spotlessKotlinGradle FROM-CACHE -> Task :feature:messaging:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:messaging:spotlessApply UP-TO-DATE -> Task :feature:docs:spotlessKotlin -> Task :feature:docs:spotlessKotlinApply -> Task :feature:docs:spotlessApply -> Task :feature:widget:spotlessKotlin FROM-CACHE -> Task :feature:widget:spotlessKotlinApply UP-TO-DATE -> Task :androidApp:spotlessKotlinCheck UP-TO-DATE -> Task :androidApp:spotlessKotlinGradleCheck UP-TO-DATE -> Task :androidApp:spotlessCheck UP-TO-DATE -> Task :desktopApp:spotlessKotlinCheck UP-TO-DATE -> Task :desktopApp:spotlessKotlinGradleCheck UP-TO-DATE -> Task :desktopApp:spotlessCheck UP-TO-DATE -> Task :docs-screenshots:spotlessKotlinCheck UP-TO-DATE -> Task :docs-screenshots:spotlessKotlinGradleCheck UP-TO-DATE -> Task :docs-screenshots:spotlessCheck UP-TO-DATE -> Task :marketing-screenshots:spotlessKotlinCheck UP-TO-DATE -> Task :marketing-screenshots:spotlessKotlinGradleCheck UP-TO-DATE -> Task :marketing-screenshots:spotlessCheck UP-TO-DATE -> Task :schema-strings:spotlessKotlinCheck -> Task :schema-strings:spotlessKotlinGradleCheck -> Task :schema-strings:spotlessCheck -> Task :screenshot-tests:spotlessKotlinCheck UP-TO-DATE -> Task :screenshot-tests:spotlessKotlinGradleCheck UP-TO-DATE -> Task :screenshot-tests:spotlessCheck UP-TO-DATE -> Task :core:barcode:spotlessKotlinCheck UP-TO-DATE -> Task :core:barcode:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:barcode:spotlessCheck UP-TO-DATE -> Task :core:ble:spotlessKotlinCheck UP-TO-DATE -> Task :core:ble:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:ble:spotlessCheck UP-TO-DATE -> Task :core:common:spotlessKotlinCheck UP-TO-DATE -> Task :core:common:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:common:spotlessCheck UP-TO-DATE -> Task :core:data:spotlessKotlinCheck UP-TO-DATE -> Task :core:data:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:data:spotlessCheck UP-TO-DATE -> Task :core:database:spotlessKotlinCheck UP-TO-DATE -> Task :core:database:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:database:spotlessCheck UP-TO-DATE -> Task :core:datastore:spotlessKotlinCheck UP-TO-DATE -> Task :core:datastore:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:datastore:spotlessCheck UP-TO-DATE -> Task :core:di:spotlessKotlinCheck UP-TO-DATE -> Task :core:di:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:di:spotlessCheck UP-TO-DATE -> Task :core:domain:spotlessKotlinCheck UP-TO-DATE -> Task :core:domain:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:domain:spotlessCheck UP-TO-DATE -> Task :feature:widget:spotlessKotlinGradle FROM-CACHE -> Task :feature:wifi-provision:spotlessKotlin FROM-CACHE -> Task :core:konsist:spotlessKotlinCheck UP-TO-DATE -> Task :feature:widget:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:widget:spotlessApply UP-TO-DATE -> Task :feature:wifi-provision:spotlessKotlinApply UP-TO-DATE -> Task :core:model:spotlessKotlinGradleCheck -> Task :core:navigation:spotlessKotlinCheck UP-TO-DATE -> Task :core:navigation:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:navigation:spotlessCheck UP-TO-DATE -> Task :core:network:spotlessKotlinCheck UP-TO-DATE -> Task :core:konsist:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:network:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:network:spotlessCheck UP-TO-DATE -> Task :core:konsist:spotlessCheck UP-TO-DATE -> Task :core:nfc:spotlessKotlinCheck UP-TO-DATE -> Task :core:nfc:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:prefs:spotlessKotlinCheck UP-TO-DATE -> Task :core:nfc:spotlessCheck UP-TO-DATE -> Task :core:prefs:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:prefs:spotlessCheck UP-TO-DATE -> Task :core:repository:spotlessKotlinCheck UP-TO-DATE -> Task :core:repository:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:repository:spotlessCheck UP-TO-DATE -> Task :core:resources:spotlessKotlinCheck -> Task :core:resources:spotlessKotlinGradleCheck -> Task :core:resources:spotlessCheck -> Task :core:service:spotlessKotlinCheck UP-TO-DATE -> Task :core:service:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:service:spotlessCheck UP-TO-DATE -> Task :core:takserver:spotlessKotlinCheck UP-TO-DATE -> Task :core:takserver:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:testing:spotlessKotlinCheck UP-TO-DATE -> Task :core:takserver:spotlessCheck UP-TO-DATE -> Task :core:testing:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:testing:spotlessCheck UP-TO-DATE -> Task :feature:connections:spotlessKotlinCheck UP-TO-DATE -> Task :feature:connections:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:connections:spotlessCheck UP-TO-DATE -> Task :feature:discovery:spotlessKotlinCheck UP-TO-DATE -> Task :feature:discovery:spotlessKotlinGradleCheck UP-TO-DATE -> Task :core:ui:spotlessKotlinGradleCheck -> Task :feature:discovery:spotlessCheck UP-TO-DATE -> Task :feature:docs:spotlessKotlinCheck -> Task :feature:docs:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:firmware:spotlessKotlinCheck UP-TO-DATE -> Task :feature:docs:spotlessCheck -> Task :feature:firmware:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:firmware:spotlessCheck UP-TO-DATE -> Task :feature:intro:spotlessKotlinCheck UP-TO-DATE -> Task :feature:intro:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:map:spotlessKotlinCheck UP-TO-DATE -> Task :feature:intro:spotlessCheck UP-TO-DATE -> Task :feature:map:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:map:spotlessCheck UP-TO-DATE -> Task :feature:map-maplibre:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:map-maplibre:spotlessKotlinCheck UP-TO-DATE -> Task :feature:map-maplibre:spotlessCheck UP-TO-DATE -> Task :feature:map-terrain:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:map-terrain:spotlessKotlinCheck UP-TO-DATE -> Task :feature:messaging:spotlessKotlinCheck UP-TO-DATE -> Task :feature:map-terrain:spotlessCheck UP-TO-DATE -> Task :feature:messaging:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:widget:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:widget:spotlessKotlinCheck UP-TO-DATE -> Task :feature:messaging:spotlessCheck UP-TO-DATE -> Task :feature:widget:spotlessCheck UP-TO-DATE -> Task :feature:wifi-provision:spotlessKotlinCheck UP-TO-DATE -> Task :docs-screenshots:detekt NO-SOURCE -> Task :feature:wifi-provision:spotlessKotlinGradle FROM-CACHE -> Task :feature:node:spotlessKotlinGradle FROM-CACHE -> Task :feature:wifi-provision:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:wifi-provision:spotlessApply UP-TO-DATE -> Task :feature:wifi-provision:spotlessKotlinGradleCheck UP-TO-DATE -> Task :feature:wifi-provision:spotlessCheck UP-TO-DATE -> Task :feature:node:spotlessKotlinGradleApply UP-TO-DATE -> Task :feature:node:spotlessKotlinGradleCheck UP-TO-DATE -> Task :screenshot-tests:detekt NO-SOURCE -> Task :feature:settings:spotlessKotlinGradle -> Task :feature:settings:spotlessKotlinGradleApply -> Task :feature:settings:spotlessKotlinGradleCheck -> Task :core:ui:spotlessKotlin -> Task :core:ui:spotlessKotlinApply -> Task :core:ui:spotlessApply -> Task :core:ui:spotlessKotlinCheck -> Task :core:ui:spotlessCheck -> Task :core:model:spotlessKotlin -> Task :core:model:spotlessKotlinApply -> Task :core:model:spotlessApply -> Task :core:model:spotlessKotlinCheck -> Task :core:model:spotlessCheck -> Task :feature:node:spotlessKotlin -> Task :feature:node:spotlessKotlinApply -> Task :feature:node:spotlessApply -> Task :feature:node:spotlessKotlinCheck -> Task :feature:node:spotlessCheck -> Task :feature:settings:spotlessKotlin -> Task :feature:settings:spotlessKotlinApply -> Task :feature:settings:spotlessApply -> Task :feature:settings:spotlessKotlinCheck -> Task :feature:settings:spotlessCheck -> Task :schema-strings:detekt -> Task :core:datastore:detekt -> Task :core:di:detekt -> Task :core:konsist:detekt NO-SOURCE -> Task :core:common:detekt -> Task :core:ble:detekt -> Task :marketing-screenshots:detekt -> Task :core:domain:detekt -> Task :core:barcode:detekt -> Task :desktopApp:detekt -> Task :core:nfc:detekt -> Task :core:navigation:detekt -> Task :core:resources:detekt -> Task :core:model:detekt -> Task :core:repository:detekt -> Task :core:prefs:detekt -> Task :core:testing:detekt -> Task :core:takserver:detekt -> Task :core:network:detekt -> Task :feature:intro:detekt -> Task :core:data:detekt -> Task :feature:discovery:detekt -> Task :feature:docs:detekt -> Task :core:database:detekt -> Task :core:service:detekt -> Task :feature:connections:detekt -> Task :feature:map-terrain:detekt -> Task :feature:widget:detekt -> Task :androidApp:preBuild UP-TO-DATE -> Task :androidApp:preFdroidDebugBuild UP-TO-DATE -> Task :androidApp:mergeFdroidDebugNativeDebugMetadata NO-SOURCE -> Task :androidApp:generateFdroidDebugBuildConfig -> Task :androidApp:detekt -> Task :androidApp:injectCrashlyticsMappingFileIdFdroidDebug SKIPPED -> Task :androidApp:injectCrashlyticsVersionControlInfoFdroidDebug SKIPPED -> Task :feature:map-maplibre:detekt -> Task :androidApp:processFdroidDebugGoogleServices SKIPPED -> Task :feature:map:detekt -> Task :core:barcode:preBuild UP-TO-DATE -> Task :core:barcode:preFdroidDebugBuild UP-TO-DATE -> Task :core:barcode:processFdroidDebugNavigationResources FROM-CACHE -> Task :core:ble:androidPreBuild UP-TO-DATE -> Task :core:ble:preAndroidMainBuild UP-TO-DATE -> Task :core:ble:generateAndroidMainEmptyResourceFiles -> Task :core:common:androidPreBuild UP-TO-DATE -> Task :core:common:preAndroidMainBuild UP-TO-DATE -> Task :core:common:generateAndroidMainEmptyResourceFiles -> Task :core:data:androidPreBuild UP-TO-DATE -> Task :core:data:preAndroidMainBuild UP-TO-DATE -> Task :core:data:generateAndroidMainEmptyResourceFiles -> Task :core:database:androidPreBuild UP-TO-DATE -> Task :core:database:preAndroidMainBuild UP-TO-DATE -> Task :core:database:generateAndroidMainEmptyResourceFiles -> Task :core:datastore:androidPreBuild UP-TO-DATE -> Task :core:datastore:preAndroidMainBuild UP-TO-DATE -> Task :core:datastore:generateAndroidMainEmptyResourceFiles -> Task :core:di:androidPreBuild UP-TO-DATE -> Task :core:di:preAndroidMainBuild UP-TO-DATE -> Task :core:di:generateAndroidMainEmptyResourceFiles -> Task :core:domain:androidPreBuild UP-TO-DATE -> Task :core:domain:preAndroidMainBuild UP-TO-DATE -> Task :core:domain:generateAndroidMainEmptyResourceFiles -> Task :core:model:androidPreBuild UP-TO-DATE -> Task :core:model:preAndroidMainBuild UP-TO-DATE -> Task :core:model:generateAndroidMainEmptyResourceFiles -> Task :core:navigation:androidPreBuild UP-TO-DATE -> Task :core:navigation:preAndroidMainBuild UP-TO-DATE -> Task :core:navigation:generateAndroidMainEmptyResourceFiles -> Task :core:network:androidPreBuild UP-TO-DATE -> Task :core:network:preAndroidMainBuild UP-TO-DATE -> Task :core:network:generateAndroidMainEmptyResourceFiles -> Task :core:nfc:androidPreBuild UP-TO-DATE -> Task :core:nfc:preAndroidMainBuild UP-TO-DATE -> Task :androidApp:generateFdroidDebugResources FROM-CACHE -> Task :core:prefs:androidPreBuild UP-TO-DATE -> Task :core:prefs:preAndroidMainBuild UP-TO-DATE -> Task :core:prefs:generateAndroidMainEmptyResourceFiles -> Task :core:repository:androidPreBuild UP-TO-DATE -> Task :core:repository:preAndroidMainBuild UP-TO-DATE -> Task :core:repository:generateAndroidMainEmptyResourceFiles -> Task :core:resources:androidPreBuild UP-TO-DATE -> Task :core:resources:preAndroidMainBuild UP-TO-DATE -> Task :core:resources:generateAndroidMainEmptyResourceFiles -> Task :core:service:androidPreBuild UP-TO-DATE -> Task :core:service:preAndroidMainBuild UP-TO-DATE -> Task :core:service:generateAndroidMainEmptyResourceFiles -> Task :core:takserver:androidPreBuild UP-TO-DATE -> Task :core:takserver:preAndroidMainBuild UP-TO-DATE -> Task :core:takserver:generateAndroidMainEmptyResourceFiles -> Task :core:ui:androidPreBuild UP-TO-DATE -> Task :core:ui:preAndroidMainBuild UP-TO-DATE -> Task :core:ui:generateAndroidMainEmptyResourceFiles -> Task :feature:connections:androidPreBuild UP-TO-DATE -> Task :feature:connections:preAndroidMainBuild UP-TO-DATE -> Task :feature:connections:generateAndroidMainEmptyResourceFiles -> Task :feature:discovery:androidPreBuild UP-TO-DATE -> Task :feature:discovery:preAndroidMainBuild UP-TO-DATE -> Task :feature:discovery:generateAndroidMainEmptyResourceFiles -> Task :feature:docs:androidPreBuild UP-TO-DATE -> Task :feature:docs:preAndroidMainBuild UP-TO-DATE -> Task :core:nfc:generateAndroidMainEmptyResourceFiles -> Task :feature:firmware:androidPreBuild UP-TO-DATE -> Task :feature:firmware:preAndroidMainBuild UP-TO-DATE -> Task :feature:docs:generateAndroidMainEmptyResourceFiles -> Task :feature:intro:androidPreBuild UP-TO-DATE -> Task :feature:intro:preAndroidMainBuild UP-TO-DATE -> Task :feature:firmware:generateAndroidMainEmptyResourceFiles -> Task :feature:map:androidPreBuild UP-TO-DATE -> Task :feature:map:preAndroidMainBuild UP-TO-DATE -> Task :feature:intro:generateAndroidMainEmptyResourceFiles -> Task :feature:map-maplibre:androidPreBuild UP-TO-DATE -> Task :feature:map-maplibre:preAndroidMainBuild UP-TO-DATE -> Task :feature:map:generateAndroidMainEmptyResourceFiles -> Task :feature:map-terrain:androidPreBuild UP-TO-DATE -> Task :feature:map-terrain:preAndroidMainBuild UP-TO-DATE -> Task :feature:map-maplibre:generateAndroidMainEmptyResourceFiles -> Task :feature:map-terrain:generateAndroidMainEmptyResourceFiles -> Task :feature:messaging:androidPreBuild UP-TO-DATE -> Task :feature:node:androidPreBuild UP-TO-DATE -> Task :feature:messaging:preAndroidMainBuild UP-TO-DATE -> Task :feature:node:preAndroidMainBuild UP-TO-DATE -> Task :feature:node:generateAndroidMainEmptyResourceFiles -> Task :feature:settings:androidPreBuild UP-TO-DATE -> Task :feature:settings:preAndroidMainBuild UP-TO-DATE -> Task :feature:messaging:generateAndroidMainEmptyResourceFiles -> Task :feature:widget:preBuild UP-TO-DATE -> Task :feature:widget:preDebugBuild UP-TO-DATE -> Task :feature:settings:generateAndroidMainEmptyResourceFiles -> Task :feature:wifi-provision:androidPreBuild UP-TO-DATE -> Task :feature:wifi-provision:preAndroidMainBuild UP-TO-DATE -> Task :feature:wifi-provision:generateAndroidMainEmptyResourceFiles -> Task :core:barcode:generateFdroidDebugResources FROM-CACHE -> Task :feature:widget:processDebugNavigationResources FROM-CACHE -> Task :core:common:kmpPartiallyResolvedDependenciesChecker -> Task :core:common:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:common:compileAndroidMain FROM-CACHE -> Task :core:common:bundleAndroidMainClassesToCompileJar -> Task :core:resources:kmpPartiallyResolvedDependenciesChecker -> Task :core:resources:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:resources:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :core:resources:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :core:barcode:packageFdroidDebugResources FROM-CACHE -> Task :core:barcode:parseFdroidDebugLocalResources FROM-CACHE -> Task :core:barcode:generateFdroidDebugRFile FROM-CACHE -> Task :core:resources:generateComposeResClass -> Task :core:resources:generateExpectResourceCollectorsForCommonMain -> Task :core:data:kmpPartiallyResolvedDependenciesChecker -> Task :core:data:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:database:kmpPartiallyResolvedDependenciesChecker -> Task :core:database:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:di:kmpPartiallyResolvedDependenciesChecker -> Task :core:di:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:di:compileAndroidMain FROM-CACHE -> Task :core:di:bundleAndroidMainClassesToCompileJar -> Task :core:model:kmpPartiallyResolvedDependenciesChecker -> Task :core:model:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:database:preAndroidDeviceTestBuild UP-TO-DATE -> Task :core:database:generateAndroidDeviceTestResources FROM-CACHE -> Task :core:database:packageAndroidDeviceTestResources FROM-CACHE -> Task :core:database:processAndroidDeviceTestNavigationResources FROM-CACHE -> Task :core:database:parseAndroidDeviceTestLocalResources FROM-CACHE -> Task :core:database:generateAndroidDeviceTestRFile FROM-CACHE -> Task :core:ble:writeAndroidMainAarMetadata -> Task :core:common:writeAndroidMainAarMetadata -> Task :core:database:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:wifi-provision:detekt -> Task :core:database:writeAndroidMainAarMetadata -> Task :core:datastore:writeAndroidMainAarMetadata -> Task :core:model:writeAndroidMainAarMetadata -> Task :core:di:writeAndroidMainAarMetadata -> Task :core:resources:writeAndroidMainAarMetadata -> Task :core:testing:androidPreBuild UP-TO-DATE -> Task :core:testing:preAndroidMainBuild UP-TO-DATE -> Task :core:repository:writeAndroidMainAarMetadata -> Task :core:testing:writeAndroidMainAarMetadata -> Task :core:database:mapAndroidHostTestSourceSetPaths -> Task :core:resources:convertXmlValueResourcesForCommonMain - -> Task :androidApp:prepareLibraryDefinitionsFdroidDebug ---> `GPLv2 with Classpath exception` does not contain the license text and configuration is in OFFLINE MODE. Please provide manually with `name`: `GPLv2 with Classpath exception` and `hash`: `074cc43976712959e080ddcdfc85831f` ---> `GNU General Public License (GPL) version 2, or any later version` does not contain the license text and configuration is in OFFLINE MODE. Please provide manually with `name`: `GNU General Public License (GPL) version 2, or any later version` and `hash`: `db199403a2b13a9b762a9bf2bca5b8c6` - -> Task :androidApp:exportLibraryDefinitions ---> `GPLv2 with Classpath exception` does not contain the license text and configuration is in OFFLINE MODE. Please provide manually with `name`: `GPLv2 with Classpath exception` and `hash`: `074cc43976712959e080ddcdfc85831f` ---> `GNU General Public License (GPL) version 2, or any later version` does not contain the license text and configuration is in OFFLINE MODE. Please provide manually with `name`: `GNU General Public License (GPL) version 2, or any later version` and `hash`: `db199403a2b13a9b762a9bf2bca5b8c6` - -> Task :core:database:checkAndroidHostTestAarMetadata -> Task :core:testing:generateAndroidMainEmptyResourceFiles -> Task :core:ble:processAndroidMainManifest FROM-CACHE -> Task :core:database:generateAndroidHostTestResources FROM-CACHE -> Task :core:database:processAndroidMainManifest FROM-CACHE -> Task :feature:firmware:detekt -> Task :core:datastore:processAndroidMainManifest FROM-CACHE -> Task :core:model:processAndroidMainManifest FROM-CACHE -> Task :core:di:processAndroidMainManifest FROM-CACHE -> Task :core:repository:processAndroidMainManifest FROM-CACHE -> Task :core:common:processAndroidMainManifest FROM-CACHE -> Task :core:resources:mapAndroidMainSourceSetPaths -> Task :core:resources:processAndroidMainManifest FROM-CACHE -> Task :core:ble:kmpPartiallyResolvedDependenciesChecker -> Task :core:ble:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:repository:kmpPartiallyResolvedDependenciesChecker -> Task :core:datastore:kmpPartiallyResolvedDependenciesChecker -> Task :core:repository:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:datastore:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:testing:kmpPartiallyResolvedDependenciesChecker -> Task :core:testing:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:ui:detekt -> Task :core:database:downloadKotlinNativeDistribution -> Task :core:common:downloadKotlinNativeDistribution -> Task :core:di:downloadKotlinNativeDistribution -> Task :core:testing:processAndroidMainManifest FROM-CACHE -> Task :androidApp:packageFdroidDebugResources FROM-CACHE -> Task :core:resources:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :core:resources:downloadKotlinNativeDistribution -> Task :core:resources:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:model:downloadKotlinNativeDistribution -> Task :core:resources:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :core:resources:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :core:resources:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :core:resources:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :core:resources:generateResourceAccessorsForIosMain NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :core:resources:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :core:resources:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :core:resources:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :core:resources:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:common:jvmProcessResources NO-SOURCE -> Task :core:common:processJvmMainResources SKIPPED -> Task :core:di:jvmProcessResources NO-SOURCE -> Task :core:di:processJvmMainResources SKIPPED -> Task :core:resources:checkJvmMainComposeLibrariesCompatibility -> Task :core:resources:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :core:resources:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :core:model:jvmProcessResources NO-SOURCE -> Task :core:model:processJvmMainResources SKIPPED -> Task :core:common:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:di:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:model:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:database:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:datastore:downloadKotlinNativeDistribution -> Task :core:database:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:repository:downloadKotlinNativeDistribution -> Task :core:ble:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:datastore:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:repository:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:testing:downloadKotlinNativeDistribution -> Task :core:repository:jvmProcessResources NO-SOURCE -> Task :core:repository:processJvmMainResources SKIPPED -> Task :core:ble:jvmProcessResources NO-SOURCE -> Task :core:ble:processJvmMainResources SKIPPED -> Task :core:datastore:jvmProcessResources NO-SOURCE -> Task :core:datastore:processJvmMainResources SKIPPED -> Task :core:testing:jvmProcessResources NO-SOURCE -> Task :core:testing:processJvmMainResources SKIPPED -> Task :core:network:kmpPartiallyResolvedDependenciesChecker -> Task :core:network:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:prefs:kmpPartiallyResolvedDependenciesChecker -> Task :core:prefs:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:takserver:kmpPartiallyResolvedDependenciesChecker -> Task :core:takserver:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:navigation:kmpPartiallyResolvedDependenciesChecker -> Task :core:navigation:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:navigation:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForCommonMain -> Task :core:navigation:generateActualResourceCollectorsForAndroidMain -> Task :core:navigation:generateComposeResClass -> Task :core:navigation:generateExpectResourceCollectorsForCommonMain -> Task :core:service:kmpPartiallyResolvedDependenciesChecker -> Task :core:service:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:ui:kmpPartiallyResolvedDependenciesChecker -> Task :core:ui:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:ui:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :core:ble:downloadKotlinNativeDistribution -> Task :core:ui:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForJvmAndroidMain NO-SOURCE -> Task :core:ui:generateResourceAccessorsForJvmAndroidMain NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForCommonMain -> Task :core:ui:prepareComposeResourcesTaskForCommonMain -> Task :core:ui:generateResourceAccessorsForCommonMain -> Task :core:resources:prepareComposeResourcesTaskForCommonMain -> Task :core:ui:generateActualResourceCollectorsForAndroidMain -> Task :core:database:mergeAndroidHostTestManifest -> Task :core:ui:generateComposeResClass -> Task :core:database:processAndroidHostTestManifest -> Task :core:ui:copyAndroidMainComposeResourcesToAndroidAssets -> Task :core:ui:packageAndroidMainResources FROM-CACHE -> Task :core:ui:parseAndroidMainLocalResources FROM-CACHE -> Task :core:ui:generateAndroidMainRFile FROM-CACHE -> Task :core:ui:generateExpectResourceCollectorsForCommonMain -> Task :core:barcode:javaPreCompileFdroidDebug FROM-CACHE -> Task :core:domain:kmpPartiallyResolvedDependenciesChecker -> Task :core:domain:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:nfc:kmpPartiallyResolvedDependenciesChecker -> Task :core:nfc:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:nfc:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :core:nfc:generateActualResourceCollectorsForAndroidMain -> Task :core:nfc:generateComposeResClass -> Task :core:nfc:generateExpectResourceCollectorsForCommonMain -> Task :core:resources:copyAndroidMainComposeResourcesToAndroidAssets -> Task :core:nfc:compileAndroidMain FROM-CACHE -> Task :core:resources:packageAndroidMainResources FROM-CACHE -> Task :feature:messaging:detekt -> Task :core:resources:parseAndroidMainLocalResources FROM-CACHE -> Task :core:resources:generateAndroidMainRFile FROM-CACHE -> Task :core:nfc:bundleAndroidMainClassesToCompileJar -> Task :feature:connections:kmpPartiallyResolvedDependenciesChecker -> Task :feature:connections:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:connections:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :core:resources:compileAndroidMainLibraryResources FROM-CACHE -> Task :feature:connections:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:connections:generateActualResourceCollectorsForAndroidMain -> Task :feature:connections:generateExpectResourceCollectorsForCommonMain -> Task :feature:discovery:kmpPartiallyResolvedDependenciesChecker -> Task :feature:discovery:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:discovery:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:discovery:generateActualResourceCollectorsForAndroidMain -> Task :feature:discovery:generateComposeResClass -> Task :feature:connections:generateComposeResClass -> Task :feature:docs:kmpPartiallyResolvedDependenciesChecker -> Task :feature:docs:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:docs:syncDocsToComposeResources UP-TO-DATE -> Task :feature:discovery:generateExpectResourceCollectorsForCommonMain -> Task :feature:docs:generateExpectResourceCollectorsForCommonMain -> Task :feature:firmware:kmpPartiallyResolvedDependenciesChecker -> Task :feature:firmware:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:firmware:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :core:resources:assembleJvmMainResources -> Task :feature:firmware:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForJvmAndroidMain NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForJvmAndroidMain NO-SOURCE -> Task :feature:firmware:generateActualResourceCollectorsForAndroidMain -> Task :feature:firmware:generateComposeResClass -> Task :feature:firmware:generateExpectResourceCollectorsForCommonMain -> Task :feature:intro:kmpPartiallyResolvedDependenciesChecker -> Task :feature:intro:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:intro:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:intro:generateActualResourceCollectorsForAndroidMain -> Task :feature:intro:generateComposeResClass -> Task :feature:intro:generateExpectResourceCollectorsForCommonMain -> Task :feature:map:kmpPartiallyResolvedDependenciesChecker -> Task :feature:map:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:map:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:map:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:map:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:map:generateActualResourceCollectorsForAndroidMain -> Task :feature:docs:syncTranslatedDocsToComposeResources UP-TO-DATE -> Task :feature:docs:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:map:generateComposeResClass -> Task :feature:docs:convertXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForJvmAndroidMain NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForJvmAndroidMain NO-SOURCE -> Task :feature:docs:generateComposeResClass -> Task :feature:map:generateExpectResourceCollectorsForCommonMain -> Task :feature:map-maplibre:kmpPartiallyResolvedDependenciesChecker -> Task :feature:map-maplibre:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:map-maplibre:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:map-maplibre:generateActualResourceCollectorsForAndroidMain -> Task :feature:map-maplibre:generateComposeResClass -> Task :feature:map-maplibre:generateExpectResourceCollectorsForCommonMain -> Task :feature:map-terrain:kmpPartiallyResolvedDependenciesChecker -> Task :feature:map-terrain:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:map-terrain:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:map-terrain:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:map-terrain:generateActualResourceCollectorsForAndroidMain -> Task :feature:map-terrain:generateComposeResClass -> Task :feature:map-terrain:generateExpectResourceCollectorsForCommonMain -> Task :core:database:mergeAndroidHostTestResources FROM-CACHE -> Task :core:resources:jvmProcessResources -> Task :core:resources:processJvmMainResources SKIPPED -> Task :feature:messaging:kmpPartiallyResolvedDependenciesChecker -> Task :feature:messaging:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:messaging:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:messaging:generateActualResourceCollectorsForAndroidMain -> Task :feature:messaging:generateComposeResClass -> Task :feature:messaging:generateExpectResourceCollectorsForCommonMain -> Task :feature:node:kmpPartiallyResolvedDependenciesChecker -> Task :feature:node:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:node:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:node:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:node:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:node:generateActualResourceCollectorsForAndroidMain -> Task :feature:node:generateComposeResClass -> Task :feature:node:generateExpectResourceCollectorsForCommonMain -> Task :core:barcode:preGoogleReleaseBuild UP-TO-DATE -> Task :core:barcode:generateGoogleReleaseResources FROM-CACHE -> Task :core:barcode:packageGoogleReleaseResources FROM-CACHE -> Task :core:barcode:processGoogleReleaseNavigationResources FROM-CACHE -> Task :core:barcode:parseGoogleReleaseLocalResources FROM-CACHE -> Task :core:barcode:generateGoogleReleaseRFile FROM-CACHE -> Task :core:barcode:javaPreCompileGoogleRelease FROM-CACHE -> Task :feature:settings:kmpPartiallyResolvedDependenciesChecker -> Task :feature:settings:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:settings:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForJvmAndroidMain NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForJvmAndroidMain NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForJvmAndroidMain NO-SOURCE -> Task :feature:settings:generateActualResourceCollectorsForAndroidMain -> Task :feature:settings:generateComposeResClass -> Task :feature:settings:generateExpectResourceCollectorsForCommonMain -> Task :feature:widget:generateDebugResources FROM-CACHE -> Task :feature:widget:packageDebugResources FROM-CACHE -> Task :core:database:processAndroidHostTestResources FROM-CACHE -> Task :feature:widget:javaPreCompileDebug FROM-CACHE -> Task :feature:wifi-provision:kmpPartiallyResolvedDependenciesChecker -> Task :feature:wifi-provision:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :feature:wifi-provision:convertXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForAndroidMain NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForAndroidMain NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForAndroidMain NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForCommonMain NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForCommonMain NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForCommonMain NO-SOURCE -> Task :feature:wifi-provision:generateActualResourceCollectorsForAndroidMain -> Task :feature:wifi-provision:generateComposeResClass -> Task :feature:wifi-provision:generateExpectResourceCollectorsForCommonMain -> Task :androidApp:javaPreCompileFdroidDebug FROM-CACHE -> Task :androidApp:generateFdroidDebugAssets UP-TO-DATE -> Task :core:barcode:generateFdroidDebugAssets UP-TO-DATE -> Task :core:barcode:mergeFdroidDebugAssets -> Task :core:resources:generateAndroidMainAssets UP-TO-DATE -> Task :feature:widget:parseDebugLocalResources FROM-CACHE -> Task :androidApp:processFdroidDebugNavigationResources FROM-CACHE -> Task :core:resources:mergeAndroidMainAssets -> Task :core:ui:generateAndroidMainAssets UP-TO-DATE -> Task :feature:widget:generateDebugRFile FROM-CACHE -> Task :feature:docs:generateAndroidMainAssets UP-TO-DATE -> Task :feature:widget:generateDebugAssets UP-TO-DATE -> Task :core:ui:mergeAndroidMainAssets -> Task :feature:widget:mergeDebugAssets -> Task :androidApp:parseFdroidDebugLocalResources FROM-CACHE -> Task :androidApp:generateFdroidDebugRFile FROM-CACHE -> Task :feature:docs:copyNonXmlValueResourcesForCommonMain -> Task :feature:docs:prepareComposeResourcesTaskForCommonMain -> Task :androidApp:desugarFdroidDebugFileDependencies FROM-CACHE -> Task :feature:docs:generateResourceAccessorsForCommonMain -> Task :androidApp:generateFdroidDebugGlobalSynthetics FROM-CACHE -> Task :androidApp:generateFdroidDebugJacocoPropertiesFile -> Task :core:common:processAndroidMainJavaRes -> Task :core:di:processAndroidMainJavaRes -> Task :core:nfc:processAndroidMainJavaRes -> Task :core:nfc:bundleLibRuntimeToDirAndroidMain -> Task :feature:docs:generateActualResourceCollectorsForAndroidMain -> Task :core:di:bundleLibRuntimeToDirAndroidMain -> Task :feature:node:detekt - -> Task :core:common:compileKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/common/src/commonMain/kotlin/org/meshtastic/core/common/util/Crc32.kt:36:9 This declaration needs opt-in. Its usage should be marked with '@kotlin.ExperimentalUnsignedTypes' or '@OptIn(kotlin.ExperimentalUnsignedTypes::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/common/src/commonMain/kotlin/org/meshtastic/core/common/util/Crc32.kt:46:47 This declaration needs opt-in. Its usage should be marked with '@kotlin.ExperimentalUnsignedTypes' or '@OptIn(kotlin.ExperimentalUnsignedTypes::class)' - -> Task :core:common:bundleLibRuntimeToDirAndroidMain -> Task :core:data:writeAndroidMainAarMetadata -> Task :core:barcode:writeFdroidDebugAarMetadata -> Task :core:domain:writeAndroidMainAarMetadata -> Task :core:navigation:writeAndroidMainAarMetadata -> Task :core:nfc:writeAndroidMainAarMetadata -> Task :core:network:writeAndroidMainAarMetadata -> Task :core:prefs:writeAndroidMainAarMetadata -> Task :core:service:writeAndroidMainAarMetadata -> Task :core:takserver:writeAndroidMainAarMetadata -> Task :core:ui:writeAndroidMainAarMetadata -> Task :feature:connections:writeAndroidMainAarMetadata -> Task :feature:discovery:writeAndroidMainAarMetadata -> Task :feature:docs:writeAndroidMainAarMetadata -> Task :feature:intro:writeAndroidMainAarMetadata -> Task :feature:firmware:writeAndroidMainAarMetadata -> Task :feature:map:writeAndroidMainAarMetadata -> Task :feature:map-terrain:writeAndroidMainAarMetadata -> Task :feature:map-maplibre:writeAndroidMainAarMetadata -> Task :feature:node:writeAndroidMainAarMetadata -> Task :feature:messaging:writeAndroidMainAarMetadata -> Task :feature:settings:writeAndroidMainAarMetadata -> Task :feature:widget:writeDebugAarMetadata -> Task :feature:wifi-provision:writeAndroidMainAarMetadata -> Task :androidApp:mapFdroidDebugSourceSetPaths -> Task :core:common:compileJvmMainJava NO-SOURCE -> Task :core:common:jvmMainClasses -> Task :core:common:jvmJar UP-TO-DATE -> Task :androidApp:compileFdroidDebugNavigationResources FROM-CACHE -> Task :androidApp:createFdroidDebugCompatibleScreenManifests -> Task :androidApp:checkFdroidDebugAarMetadata -> Task :core:barcode:extractDeepLinksFdroidDebug FROM-CACHE -> Task :core:barcode:processFdroidDebugManifest FROM-CACHE -> Task :core:data:processAndroidMainManifest FROM-CACHE -> Task :core:domain:processAndroidMainManifest FROM-CACHE -> Task :core:navigation:processAndroidMainManifest FROM-CACHE -> Task :core:network:processAndroidMainManifest FROM-CACHE -> Task :core:nfc:processAndroidMainManifest FROM-CACHE -> Task :core:prefs:processAndroidMainManifest FROM-CACHE -> Task :core:service:processAndroidMainManifest FROM-CACHE -> Task :core:takserver:processAndroidMainManifest FROM-CACHE -> Task :core:ui:processAndroidMainManifest FROM-CACHE -> Task :feature:connections:processAndroidMainManifest FROM-CACHE -> Task :feature:discovery:processAndroidMainManifest FROM-CACHE -> Task :feature:docs:processAndroidMainManifest FROM-CACHE -> Task :androidApp:extractDeepLinksFdroidDebug FROM-CACHE -> Task :feature:intro:processAndroidMainManifest FROM-CACHE -> Task :feature:map:processAndroidMainManifest FROM-CACHE -> Task :feature:docs:copyAndroidMainComposeResourcesToAndroidAssets -> Task :feature:docs:packageAndroidMainResources FROM-CACHE -> Task :feature:map-terrain:compileAndroidMain -> Task :feature:docs:parseAndroidMainLocalResources FROM-CACHE -> Task :feature:docs:generateAndroidMainRFile FROM-CACHE -> Task :feature:map-terrain:bundleAndroidMainClassesToCompileJar -> Task :feature:map-terrain:processAndroidMainJavaRes -> Task :feature:map-terrain:bundleLibRuntimeToDirAndroidMain -> Task :core:resources:generateResourceAccessorsForCommonMain -> Task :feature:firmware:processAndroidMainManifest FROM-CACHE -> Task :feature:map-maplibre:processAndroidMainManifest FROM-CACHE -> Task :core:resources:generateActualResourceCollectorsForAndroidMain -> Task :core:resources:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :core:resources:generateActualResourceCollectorsForJvmMain -> Task :feature:settings:detekt -> Task :feature:docs:mergeAndroidMainAssets -> Task :core:di:compileKotlinJvm -> Task :core:di:compileJvmMainJava NO-SOURCE -> Task :core:di:jvmMainClasses -> Task :core:di:jvmJar UP-TO-DATE -> Task :feature:messaging:processAndroidMainManifest FROM-CACHE -> Task :feature:node:processAndroidMainManifest FROM-CACHE -> Task :feature:settings:processAndroidMainManifest FROM-CACHE -> Task :feature:widget:extractDeepLinksDebug FROM-CACHE -> Task :feature:map-terrain:processAndroidMainManifest FROM-CACHE -> Task :feature:wifi-provision:processAndroidMainManifest FROM-CACHE -> Task :core:barcode:mapFdroidDebugSourceSetPaths -> Task :core:barcode:compileFdroidDebugLibraryResources FROM-CACHE -> Task :core:ui:mapAndroidMainSourceSetPaths -> Task :core:ui:compileAndroidMainLibraryResources FROM-CACHE -> Task :feature:docs:mapAndroidMainSourceSetPaths -> Task :feature:docs:compileAndroidMainLibraryResources FROM-CACHE -> Task :feature:widget:mapDebugSourceSetPaths -> Task :androidApp:mergeFdroidDebugJniLibFolders -> Task :core:barcode:mergeFdroidDebugJniLibFolders -> Task :core:barcode:mergeFdroidDebugNativeLibs NO-SOURCE -> Task :core:barcode:copyFdroidDebugJniLibsProjectOnly -> Task :core:ble:mergeAndroidMainJniLibFolders -> Task :core:ble:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:ble:copyAndroidMainJniLibsProjectOnly -> Task :core:common:mergeAndroidMainJniLibFolders -> Task :feature:widget:processDebugManifest FROM-CACHE -> Task :core:common:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:widget:compileDebugLibraryResources FROM-CACHE -> Task :core:common:copyAndroidMainJniLibsProjectOnly -> Task :core:data:mergeAndroidMainJniLibFolders -> Task :core:data:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:database:mergeAndroidMainJniLibFolders -> Task :core:data:copyAndroidMainJniLibsProjectOnly -> Task :core:database:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:database:copyAndroidMainJniLibsProjectOnly -> Task :core:datastore:mergeAndroidMainJniLibFolders -> Task :core:datastore:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:datastore:copyAndroidMainJniLibsProjectOnly -> Task :core:di:mergeAndroidMainJniLibFolders -> Task :core:di:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:domain:mergeAndroidMainJniLibFolders -> Task :core:di:copyAndroidMainJniLibsProjectOnly -> Task :core:domain:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:domain:copyAndroidMainJniLibsProjectOnly -> Task :core:model:mergeAndroidMainJniLibFolders -> Task :core:model:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:model:copyAndroidMainJniLibsProjectOnly -> Task :core:navigation:mergeAndroidMainJniLibFolders -> Task :core:navigation:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:navigation:copyAndroidMainJniLibsProjectOnly -> Task :core:network:mergeAndroidMainJniLibFolders -> Task :core:network:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:nfc:mergeAndroidMainJniLibFolders -> Task :core:nfc:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:nfc:copyAndroidMainJniLibsProjectOnly -> Task :core:network:copyAndroidMainJniLibsProjectOnly -> Task :core:repository:mergeAndroidMainJniLibFolders -> Task :core:prefs:mergeAndroidMainJniLibFolders -> Task :core:prefs:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:repository:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:prefs:copyAndroidMainJniLibsProjectOnly -> Task :core:repository:copyAndroidMainJniLibsProjectOnly -> Task :core:resources:mergeAndroidMainJniLibFolders -> Task :core:service:mergeAndroidMainJniLibFolders -> Task :core:service:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:resources:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:resources:copyAndroidMainJniLibsProjectOnly -> Task :core:service:copyAndroidMainJniLibsProjectOnly -> Task :core:takserver:mergeAndroidMainJniLibFolders -> Task :core:ui:mergeAndroidMainJniLibFolders -> Task :core:takserver:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:ui:mergeAndroidMainNativeLibs NO-SOURCE -> Task :core:takserver:copyAndroidMainJniLibsProjectOnly -> Task :core:ui:copyAndroidMainJniLibsProjectOnly -> Task :feature:discovery:mergeAndroidMainJniLibFolders -> Task :feature:connections:mergeAndroidMainJniLibFolders -> Task :feature:discovery:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:connections:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:discovery:copyAndroidMainJniLibsProjectOnly -> Task :feature:connections:copyAndroidMainJniLibsProjectOnly -> Task :feature:docs:mergeAndroidMainJniLibFolders -> Task :feature:firmware:mergeAndroidMainJniLibFolders -> Task :feature:firmware:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:docs:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:docs:copyAndroidMainJniLibsProjectOnly -> Task :feature:firmware:copyAndroidMainJniLibsProjectOnly -> Task :feature:intro:mergeAndroidMainJniLibFolders -> Task :feature:intro:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:map:mergeAndroidMainJniLibFolders -> Task :feature:map:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:intro:copyAndroidMainJniLibsProjectOnly -> Task :feature:map:copyAndroidMainJniLibsProjectOnly -> Task :feature:map-maplibre:mergeAndroidMainJniLibFolders -> Task :feature:map-terrain:mergeAndroidMainJniLibFolders -> Task :feature:map-maplibre:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:map-terrain:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:map-terrain:copyAndroidMainJniLibsProjectOnly -> Task :feature:map-maplibre:copyAndroidMainJniLibsProjectOnly -> Task :feature:messaging:mergeAndroidMainJniLibFolders -> Task :feature:node:mergeAndroidMainJniLibFolders -> Task :feature:node:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:messaging:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:node:copyAndroidMainJniLibsProjectOnly -> Task :feature:messaging:copyAndroidMainJniLibsProjectOnly -> Task :feature:settings:mergeAndroidMainJniLibFolders -> Task :feature:settings:mergeAndroidMainNativeLibs NO-SOURCE -> Task :feature:settings:copyAndroidMainJniLibsProjectOnly -> Task :feature:widget:mergeDebugJniLibFolders -> Task :feature:widget:mergeDebugNativeLibs NO-SOURCE -> Task :feature:widget:copyDebugJniLibsProjectOnly -> Task :androidApp:validateSigningFdroidDebug -> Task :feature:wifi-provision:mergeAndroidMainJniLibFolders -> Task :feature:wifi-provision:mergeAndroidMainNativeLibs NO-SOURCE -> Task :androidApp:writeFdroidDebugAppMetadata -> Task :androidApp:writeFdroidDebugSigningConfigVersions -> Task :androidApp:preGoogleDebugBuild UP-TO-DATE -> Task :androidApp:mergeGoogleDebugNativeDebugMetadata NO-SOURCE -> Task :feature:wifi-provision:copyAndroidMainJniLibsProjectOnly -> Task :androidApp:generateGoogleDebugBuildConfig -> Task :androidApp:generateGoogleDebugResources FROM-CACHE -> Task :androidApp:injectCrashlyticsMappingFileIdGoogleDebug FROM-CACHE -> Task :androidApp:mergeFdroidDebugAssets -> Task :androidApp:processFdroidDebugMainManifest -> Task :androidApp:mergeFdroidDebugResources FROM-CACHE -> Task :androidApp:injectCrashlyticsVersionControlInfoGoogleDebug FROM-CACHE -> Task :core:barcode:preGoogleDebugBuild UP-TO-DATE -> Task :androidApp:processGoogleDebugGoogleServices FROM-CACHE -> Task :core:barcode:processGoogleDebugNavigationResources FROM-CACHE -> Task :androidApp:processFdroidDebugManifest -> Task :core:barcode:generateGoogleDebugResources FROM-CACHE -> Task :core:barcode:packageGoogleDebugResources FROM-CACHE -> Task :core:barcode:parseGoogleDebugLocalResources FROM-CACHE -> Task :core:barcode:generateGoogleDebugRFile FROM-CACHE -> Task :core:barcode:javaPreCompileGoogleDebug FROM-CACHE -> Task :androidApp:javaPreCompileGoogleDebug FROM-CACHE -> Task :androidApp:generateGoogleDebugAssets UP-TO-DATE -> Task :core:barcode:generateGoogleDebugAssets UP-TO-DATE -> Task :core:barcode:mergeGoogleDebugAssets -> Task :androidApp:processFdroidDebugManifestForPackage -> Task :androidApp:prepareLibraryDefinitionsGoogleDebug -> Task :androidApp:packageGoogleDebugResources FROM-CACHE -> Task :androidApp:generateGoogleDebugGlobalSynthetics FROM-CACHE -> Task :androidApp:compressFdroidDebugAssets -> Task :androidApp:desugarGoogleDebugFileDependencies FROM-CACHE -> Task :androidApp:generateGoogleDebugJacocoPropertiesFile -> Task :core:barcode:writeGoogleDebugAarMetadata -> Task :androidApp:processGoogleDebugNavigationResources FROM-CACHE -> Task :androidApp:checkGoogleDebugAarMetadata -> Task :androidApp:mapGoogleDebugSourceSetPaths -> Task :androidApp:compileGoogleDebugNavigationResources FROM-CACHE -> Task :androidApp:parseGoogleDebugLocalResources FROM-CACHE -> Task :androidApp:generateGoogleDebugRFile FROM-CACHE -> Task :androidApp:createGoogleDebugCompatibleScreenManifests -> Task :androidApp:mergeGoogleDebugAssets -> Task :androidApp:extractDeepLinksGoogleDebug FROM-CACHE -> Task :core:barcode:extractDeepLinksGoogleDebug FROM-CACHE -> Task :core:barcode:processGoogleDebugManifest FROM-CACHE -> Task :androidApp:processGoogleDebugMainManifest -> Task :androidApp:mergeGoogleDebugResources FROM-CACHE -> Task :core:barcode:mapGoogleDebugSourceSetPaths -> Task :core:barcode:compileGoogleDebugLibraryResources FROM-CACHE -> Task :androidApp:mergeGoogleDebugJniLibFolders -> Task :core:barcode:mergeGoogleDebugJniLibFolders -> Task :core:barcode:mergeGoogleDebugNativeLibs NO-SOURCE -> Task :core:barcode:copyGoogleDebugJniLibsProjectOnly -> Task :androidApp:processGoogleDebugManifest -> Task :androidApp:compressGoogleDebugAssets -> Task :androidApp:validateSigningGoogleDebug -> Task :androidApp:writeGoogleDebugAppMetadata -> Task :androidApp:writeGoogleDebugSigningConfigVersions -> Task :docs-screenshots:preBuild UP-TO-DATE -> Task :docs-screenshots:preDebugBuild UP-TO-DATE -> Task :androidApp:processGoogleDebugManifestForPackage -> Task :docs-screenshots:checkDebugAarMetadata -> Task :docs-screenshots:mergeDebugJniLibFolders -> Task :docs-screenshots:mergeDebugNativeLibs NO-SOURCE -> Task :docs-screenshots:stripDebugDebugSymbols NO-SOURCE -> Task :docs-screenshots:copyDebugJniLibsProjectAndLocalJars -> Task :docs-screenshots:generateDebugResources FROM-CACHE -> Task :docs-screenshots:packageDebugResources -> Task :docs-screenshots:processDebugNavigationResources FROM-CACHE -> Task :docs-screenshots:parseDebugLocalResources FROM-CACHE -> Task :docs-screenshots:generateDebugRFile -> Task :docs-screenshots:extractDeepLinksForAarDebug FROM-CACHE -> Task :docs-screenshots:generateDebugAssets UP-TO-DATE -> Task :docs-screenshots:mergeDebugAssets -> Task :docs-screenshots:javaPreCompileDebug FROM-CACHE -> Task :docs-screenshots:prepareDebugArtProfile -> Task :docs-screenshots:prepareLintJarForPublish -> Task :androidApp:processFdroidDebugResources -> Task :docs-screenshots:writeDebugAarMetadata -> Task :screenshot-tests:preBuild UP-TO-DATE -> Task :screenshot-tests:preDebugBuild UP-TO-DATE -> Task :screenshot-tests:checkDebugAarMetadata -> Task :screenshot-tests:mergeDebugJniLibFolders -> Task :screenshot-tests:mergeDebugNativeLibs NO-SOURCE -> Task :screenshot-tests:stripDebugDebugSymbols NO-SOURCE -> Task :screenshot-tests:copyDebugJniLibsProjectAndLocalJars -> Task :screenshot-tests:generateDebugResources FROM-CACHE -> Task :screenshot-tests:packageDebugResources FROM-CACHE -> Task :screenshot-tests:processDebugNavigationResources FROM-CACHE -> Task :screenshot-tests:parseDebugLocalResources FROM-CACHE -> Task :screenshot-tests:generateDebugRFile FROM-CACHE -> Task :screenshot-tests:extractDeepLinksForAarDebug FROM-CACHE -> Task :screenshot-tests:generateDebugAssets UP-TO-DATE -> Task :screenshot-tests:mergeDebugAssets -> Task :screenshot-tests:javaPreCompileDebug FROM-CACHE -> Task :screenshot-tests:prepareDebugArtProfile -> Task :screenshot-tests:prepareLintJarForPublish -> Task :screenshot-tests:processDebugManifest FROM-CACHE -> Task :screenshot-tests:writeDebugAarMetadata -> Task :core:barcode:checkFdroidDebugAarMetadata -> Task :core:barcode:stripFdroidDebugDebugSymbols NO-SOURCE -> Task :core:barcode:copyFdroidDebugJniLibsProjectAndLocalJars -> Task :core:barcode:extractDeepLinksForAarFdroidDebug FROM-CACHE -> Task :docs-screenshots:processDebugManifest -> Task :core:barcode:prepareLintJarForPublish -> Task :core:barcode:prepareFdroidDebugArtProfile -> Task :core:barcode:stripGoogleDebugDebugSymbols NO-SOURCE -> Task :core:barcode:copyGoogleDebugJniLibsProjectAndLocalJars -> Task :core:barcode:extractDeepLinksForAarGoogleDebug FROM-CACHE -> Task :core:barcode:prepareGoogleDebugArtProfile -> Task :core:barcode:checkGoogleDebugAarMetadata -> Task :feature:widget:stripDebugDebugSymbols NO-SOURCE -> Task :feature:widget:copyDebugJniLibsProjectAndLocalJars -> Task :feature:widget:extractDeepLinksForAarDebug FROM-CACHE -> Task :feature:widget:prepareDebugArtProfile -> Task :feature:widget:prepareLintJarForPublish -> Task :androidApp:preFdroidDebugUnitTestBuild UP-TO-DATE -> Task :androidApp:javaPreCompileFdroidDebugUnitTest FROM-CACHE -> Task :androidApp:packageFdroidDebugUnitTestForUnitTest - -> Task :androidApp:mergeFdroidDebugUnitTestManifest -/Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/fdroid/AndroidManifest.xml Warning: - activity#androidx.glance.appwidget.action.ActionTrampolineActivity was tagged at AndroidManifest.xml:0 to remove other declarations but no other declaration present -/Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/fdroid/AndroidManifest.xml Warning: - meta-data#androidx.work.WorkManagerInitializer was tagged at AndroidManifest.xml:0 to remove other declarations but no other declaration present - -> Task :androidApp:processFdroidDebugUnitTestManifest -> Task :androidApp:generateFdroidDebugUnitTestConfig -> Task :androidApp:koverFindJar -> Task :core:common:bundleAndroidMainClassesToRuntimeJar -> Task :core:di:bundleAndroidMainClassesToRuntimeJar -> Task :core:nfc:bundleAndroidMainClassesToRuntimeJar -> Task :feature:map-terrain:bundleAndroidMainClassesToRuntimeJar -> Task :androidApp:preGoogleDebugUnitTestBuild UP-TO-DATE -> Task :androidApp:javaPreCompileGoogleDebugUnitTest FROM-CACHE -> Task :feature:widget:checkDebugAarMetadata -> Task :baselineprofile:test UP-TO-DATE -> Task :desktopApp:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :desktopApp:convertXmlValueResourcesForMain NO-SOURCE -> Task :desktopApp:copyNonXmlValueResourcesForMain NO-SOURCE -> Task :desktopApp:prepareComposeResourcesTaskForMain NO-SOURCE -> Task :desktopApp:generateResourceAccessorsForMain NO-SOURCE -> Task :desktopApp:generateActualResourceCollectorsForMain -> Task :desktopApp:generateComposeResClass - -> Task :androidApp:mergeGoogleDebugUnitTestManifest -/Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/AndroidManifest.xml Warning: - activity#androidx.glance.appwidget.action.ActionTrampolineActivity was tagged at AndroidManifest.xml:0 to remove other declarations but no other declaration present -/Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/AndroidManifest.xml Warning: - meta-data#androidx.work.WorkManagerInitializer was tagged at AndroidManifest.xml:0 to remove other declarations but no other declaration present -/Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/build/intermediates/tmp/manifest/test/google/debug/tempFile2ProcessTestManifest2111012800554672440.xml:94:5-474:19 Warning: - application@android:name was tagged at tempFile2ProcessTestManifest2111012800554672440.xml:94 to replace other declarations but no other declaration present - -> Task :androidApp:processGoogleDebugUnitTestManifest -> Task :core:network:jvmProcessResources NO-SOURCE -> Task :core:network:processJvmMainResources SKIPPED -> Task :core:prefs:jvmProcessResources NO-SOURCE -> Task :core:prefs:processJvmMainResources SKIPPED -> Task :core:takserver:jvmProcessResources UP-TO-DATE -> Task :core:takserver:processJvmMainResources SKIPPED -> Task :core:data:jvmProcessResources NO-SOURCE -> Task :core:data:processJvmMainResources SKIPPED -> Task :core:domain:jvmProcessResources NO-SOURCE -> Task :core:domain:processJvmMainResources SKIPPED -> Task :core:navigation:checkJvmMainComposeLibrariesCompatibility -> Task :core:navigation:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :core:navigation:generateActualResourceCollectorsForJvmMain -> Task :core:navigation:assembleJvmMainResources -> Task :core:navigation:jvmProcessResources UP-TO-DATE -> Task :core:navigation:processJvmMainResources SKIPPED -> Task :core:service:jvmProcessResources NO-SOURCE -> Task :core:service:processJvmMainResources SKIPPED -> Task :core:ui:checkJvmMainComposeLibrariesCompatibility -> Task :core:ui:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :core:ui:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :core:ui:generateActualResourceCollectorsForJvmMain -> Task :core:ui:assembleJvmMainResources -> Task :core:ui:jvmProcessResources UP-TO-DATE -> Task :core:ui:processJvmMainResources SKIPPED -> Task :feature:connections:checkJvmMainComposeLibrariesCompatibility -> Task :feature:connections:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:connections:generateActualResourceCollectorsForJvmMain -> Task :feature:connections:assembleJvmMainResources -> Task :feature:connections:jvmProcessResources UP-TO-DATE -> Task :feature:connections:processJvmMainResources SKIPPED -> Task :feature:discovery:checkJvmMainComposeLibrariesCompatibility -> Task :feature:discovery:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:discovery:generateActualResourceCollectorsForJvmMain -> Task :feature:discovery:assembleJvmMainResources -> Task :feature:discovery:jvmProcessResources UP-TO-DATE -> Task :feature:discovery:processJvmMainResources SKIPPED -> Task :feature:docs:checkJvmMainComposeLibrariesCompatibility -> Task :feature:docs:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:docs:generateActualResourceCollectorsForJvmMain -> Task :desktopApp:generateDesktopBuildConfig -> Task :feature:firmware:checkJvmMainComposeLibrariesCompatibility -> Task :feature:firmware:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:firmware:generateActualResourceCollectorsForJvmMain -> Task :feature:firmware:assembleJvmMainResources -> Task :feature:firmware:jvmProcessResources UP-TO-DATE -> Task :feature:firmware:processJvmMainResources SKIPPED -> Task :feature:intro:checkJvmMainComposeLibrariesCompatibility -> Task :feature:intro:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:intro:generateActualResourceCollectorsForJvmMain -> Task :feature:intro:assembleJvmMainResources -> Task :feature:intro:jvmProcessResources UP-TO-DATE -> Task :feature:intro:processJvmMainResources SKIPPED -> Task :feature:map:checkJvmMainComposeLibrariesCompatibility -> Task :feature:map:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:map:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:map:generateActualResourceCollectorsForJvmMain -> Task :feature:map:assembleJvmMainResources -> Task :feature:map:jvmProcessResources UP-TO-DATE -> Task :feature:map:processJvmMainResources SKIPPED -> Task :feature:map-maplibre:checkJvmMainComposeLibrariesCompatibility -> Task :feature:map-maplibre:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:map-maplibre:generateActualResourceCollectorsForJvmMain -> Task :feature:map-terrain:checkJvmMainComposeLibrariesCompatibility -> Task :feature:map-terrain:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:map-terrain:generateActualResourceCollectorsForJvmMain -> Task :feature:docs:assembleJvmMainResources -> Task :feature:docs:jvmProcessResources UP-TO-DATE -> Task :feature:docs:processJvmMainResources SKIPPED -> Task :feature:map-terrain:assembleJvmMainResources -> Task :feature:map-terrain:jvmProcessResources UP-TO-DATE -> Task :feature:map-terrain:processJvmMainResources SKIPPED -> Task :feature:map-maplibre:assembleJvmMainResources -> Task :feature:map-maplibre:jvmProcessResources UP-TO-DATE -> Task :feature:map-maplibre:processJvmMainResources SKIPPED -> Task :feature:messaging:checkJvmMainComposeLibrariesCompatibility -> Task :feature:messaging:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:messaging:generateActualResourceCollectorsForJvmMain -> Task :feature:messaging:assembleJvmMainResources -> Task :feature:messaging:jvmProcessResources UP-TO-DATE -> Task :feature:messaging:processJvmMainResources SKIPPED -> Task :feature:node:checkJvmMainComposeLibrariesCompatibility -> Task :feature:node:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:node:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:node:generateActualResourceCollectorsForJvmMain -> Task :feature:node:assembleJvmMainResources -> Task :feature:node:jvmProcessResources UP-TO-DATE -> Task :feature:node:processJvmMainResources SKIPPED -> Task :feature:settings:checkJvmMainComposeLibrariesCompatibility -> Task :feature:settings:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:settings:generateActualResourceCollectorsForJvmMain -> Task :feature:settings:assembleJvmMainResources -> Task :feature:settings:jvmProcessResources UP-TO-DATE -> Task :feature:settings:processJvmMainResources SKIPPED -> Task :feature:wifi-provision:checkJvmMainComposeLibrariesCompatibility -> Task :feature:wifi-provision:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :feature:wifi-provision:generateActualResourceCollectorsForJvmMain -> Task :feature:wifi-provision:assembleJvmMainResources -> Task :feature:wifi-provision:jvmProcessResources UP-TO-DATE -> Task :feature:wifi-provision:processJvmMainResources SKIPPED -> Task :desktopApp:assembleMainResources - -> Task :desktopApp:exportLibraryDefinitions ---> `GNU Lesser GPL, Version 3` does not contain the license text and configuration is in OFFLINE MODE. Please provide manually with `name`: `GNU Lesser GPL, Version 3` and `hash`: `68b66fef6185d8a1790c3ded874dace2` ---> `LGPL-2.1-or-later` does not contain the license text and configuration is in OFFLINE MODE. Please provide manually with `name`: `LGPL-2.1-or-later` and `hash`: `LGPL-2.1-or-later` - -> Task :desktopApp:processResources -> Task :desktopApp:convertXmlValueResourcesForTest NO-SOURCE -> Task :desktopApp:copyNonXmlValueResourcesForTest NO-SOURCE -> Task :desktopApp:prepareComposeResourcesTaskForTest NO-SOURCE -> Task :desktopApp:generateResourceAccessorsForTest NO-SOURCE -> Task :desktopApp:koverFindJar -> Task :desktopApp:assembleTestResources -> Task :desktopApp:processTestResources UP-TO-DATE -> Task :docs-screenshots:preDebugUnitTestBuild UP-TO-DATE -> Task :core:common:compileKotlinIosSimulatorArm64 -> Task :docs-screenshots:generateDebugUnitTestStubRFile -> Task :androidApp:mergeFdroidDebugNativeLibs -> Task :androidApp:mergeGoogleDebugNativeLibs -> Task :androidApp:stripFdroidDebugDebugSymbols -> Task :docs-screenshots:javaPreCompileDebugUnitTest FROM-CACHE -> Task :docs-screenshots:koverFindJar -> Task :marketing-screenshots:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :marketing-screenshots:convertXmlValueResourcesForMain -> Task :marketing-screenshots:copyNonXmlValueResourcesForMain NO-SOURCE -> Task :marketing-screenshots:prepareComposeResourcesTaskForMain -> Task :marketing-screenshots:generateResourceAccessorsForMain -> Task :marketing-screenshots:generateActualResourceCollectorsForMain -> Task :marketing-screenshots:generateComposeResClass -> Task :core:di:compileKotlinIosSimulatorArm64 -> Task :marketing-screenshots:assembleMainResources -> Task :marketing-screenshots:processResources UP-TO-DATE -> Task :schema-strings:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :androidApp:stripGoogleDebugDebugSymbols -> Task :marketing-screenshots:convertXmlValueResourcesForTest NO-SOURCE -> Task :marketing-screenshots:copyNonXmlValueResourcesForTest NO-SOURCE -> Task :schema-strings:processResources NO-SOURCE -> Task :schema-strings:processTestResources NO-SOURCE -> Task :marketing-screenshots:prepareComposeResourcesTaskForTest NO-SOURCE -> Task :screenshot-tests:preDebugUnitTestBuild UP-TO-DATE -> Task :marketing-screenshots:generateResourceAccessorsForTest NO-SOURCE -> Task :marketing-screenshots:assembleTestResources -> Task :marketing-screenshots:processTestResources UP-TO-DATE -> Task :screenshot-tests:javaPreCompileDebugUnitTest FROM-CACHE -> Task :screenshot-tests:koverFindJar -> Task :core:barcode:preFdroidDebugUnitTestBuild UP-TO-DATE -> Task :core:barcode:checkFdroidDebugUnitTestAarMetadata -> Task :core:barcode:mapFdroidDebugUnitTestSourceSetPaths -> Task :core:barcode:generateFdroidDebugUnitTestResources FROM-CACHE -> Task :screenshot-tests:generateDebugUnitTestStubRFile -> Task :core:barcode:mergeFdroidDebugUnitTestManifest -> Task :core:barcode:processFdroidDebugUnitTestManifest -> Task :core:barcode:javaPreCompileFdroidDebugUnitTest FROM-CACHE -> Task :core:barcode:generateFdroidDebugUnitTestAssets UP-TO-DATE -> Task :core:barcode:mergeFdroidDebugUnitTestAssets -> Task :core:barcode:koverFindJar -> Task :core:barcode:preGoogleDebugUnitTestBuild UP-TO-DATE -> Task :core:barcode:checkGoogleDebugUnitTestAarMetadata -> Task :core:barcode:mapGoogleDebugUnitTestSourceSetPaths -> Task :core:barcode:generateGoogleDebugUnitTestResources FROM-CACHE -> Task :core:barcode:mergeFdroidDebugUnitTestResources FROM-CACHE -> Task :schema-strings:compileKotlin -> Task :schema-strings:compileJava NO-SOURCE -> Task :schema-strings:classes UP-TO-DATE -> Task :schema-strings:jar -> Task :core:barcode:mergeGoogleDebugUnitTestResources FROM-CACHE -> Task :core:barcode:mergeGoogleDebugUnitTestManifest -> Task :core:barcode:processGoogleDebugUnitTestManifest - -> Task :feature:map-terrain:compileKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-terrain/src/jvmMain/kotlin/org/meshtastic/feature/map/terrain/TerrainTileFetcher.jvm.kt:29:66 'constructor(p0: String!): URL' is deprecated. Deprecated in Java. - -> Task :feature:map-terrain:compileJvmMainJava NO-SOURCE -> Task :feature:map-terrain:jvmMainClasses -> Task :feature:map-terrain:jvmJar UP-TO-DATE -> Task :schema-strings:compileTestKotlin -> Task :core:barcode:javaPreCompileGoogleDebugUnitTest FROM-CACHE -> Task :core:barcode:generateGoogleDebugUnitTestAssets UP-TO-DATE -> Task :schema-strings:compileTestJava NO-SOURCE -> Task :schema-strings:testClasses UP-TO-DATE -> Task :core:barcode:processGoogleDebugUnitTestResources FROM-CACHE -> Task :feature:widget:preDebugUnitTestBuild UP-TO-DATE -> Task :core:barcode:processFdroidDebugUnitTestResources FROM-CACHE -> Task :core:barcode:packageFdroidDebugUnitTestForUnitTest -> Task :core:barcode:generateFdroidDebugUnitTestConfig -> Task :feature:widget:checkDebugUnitTestAarMetadata -> Task :feature:widget:mapDebugUnitTestSourceSetPaths -> Task :core:barcode:mergeGoogleDebugUnitTestAssets -> Task :feature:widget:generateDebugUnitTestResources FROM-CACHE -> Task :core:barcode:packageGoogleDebugUnitTestForUnitTest -> Task :core:barcode:generateGoogleDebugUnitTestConfig -> Task :feature:widget:javaPreCompileDebugUnitTest FROM-CACHE -> Task :feature:widget:generateDebugUnitTestAssets UP-TO-DATE -> Task :androidApp:checkGoogleDebugDuplicateClasses -> Task :feature:widget:mergeDebugUnitTestManifest -> Task :feature:widget:processDebugUnitTestManifest -> Task :feature:widget:koverFindJar -> Task :androidApp:checkFdroidDebugDuplicateClasses -> Task :core:ble:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:testing:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:ble:validateLocalSwiftPMDependencies -> Task :core:ble:computeLocalPackageDependencyInputFiles -> Task :core:ble:fingerprintSyntheticPackage -> Task :core:ble:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:ble:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:common:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:data:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:database:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:datastore:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:di:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:domain:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:konsist:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:model:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:navigation:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:network:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:nfc:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:prefs:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:repository:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:resources:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:service:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:widget:mergeDebugUnitTestAssets -> Task :core:testing:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:ui:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:connections:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:discovery:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:takserver:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:docs:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:firmware:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:intro:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:map:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:map-terrain:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:map-maplibre:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:messaging:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:settings:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:node:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :feature:wifi-provision:serializeSwiftPMDependenciesMetadataForLockFiles -> Task :core:ble:fingerprintXcodebuildIphonesimulator -> Task :core:ble:jvmTestProcessResources NO-SOURCE -> Task :feature:discovery:generateUmbrellaPackageIdentifierBasedResolutionForDefault SKIPPED -> Task :core:ble:processJvmTestResources SKIPPED -> Task :core:ble:koverFindJar -> Task :feature:discovery:fetchUmbrellaPackageIdentifierForDefault SKIPPED -> Task :core:ble:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:ble:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:ble:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:ble:androidJar UP-TO-DATE -> Task :core:ble:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:ble:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:ble:preAndroidHostTestBuild UP-TO-DATE -> Task :core:ble:checkAndroidHostTestAarMetadata -> Task :core:ble:mapAndroidHostTestSourceSetPaths -> Task :core:ble:generateAndroidHostTestResources FROM-CACHE -> Task :core:ble:mergeAndroidHostTestAssets -> Task :core:ble:mergeAndroidHostTestManifest -> Task :core:ble:processAndroidHostTestManifest -> Task :core:ble:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:common:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:common:iosSimulatorArm64MainKlibrary -> Task :core:ble:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:widget:mergeDebugUnitTestResources FROM-CACHE -> Task :core:ble:processAndroidHostTestResources FROM-CACHE -> Task :core:ble:packageAndroidHostTestForUnitTest -> Task :core:ble:generateAndroidHostTestConfig -> Task :core:common:validateLocalSwiftPMDependencies -> Task :core:common:computeLocalPackageDependencyInputFiles -> Task :core:common:fingerprintSyntheticPackage -> Task :core:common:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:common:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:common:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:common:fingerprintXcodebuildIphonesimulator -> Task :core:common:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:common:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :schema-strings:test -> Task :core:common:jvmTestProcessResources NO-SOURCE -> Task :core:common:processJvmTestResources SKIPPED -> Task :core:common:koverFindJar -> Task :core:common:androidJar UP-TO-DATE -> Task :core:common:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:common:preAndroidHostTestBuild UP-TO-DATE -> Task :core:common:mergeAndroidHostTestAssets -> Task :core:common:checkAndroidHostTestAarMetadata -> Task :core:common:mapAndroidHostTestSourceSetPaths -> Task :core:common:generateAndroidHostTestResources FROM-CACHE -> Task :androidApp:processGoogleDebugResources -> Task :androidApp:packageGoogleDebugUnitTestForUnitTest -> Task :androidApp:generateGoogleDebugUnitTestConfig -> Task :core:common:mergeAndroidHostTestManifest -> Task :core:common:processAndroidHostTestManifest -> Task :core:common:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:data:downloadKotlinNativeDistribution -> Task :core:network:downloadKotlinNativeDistribution -> Task :core:network:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:prefs:downloadKotlinNativeDistribution -> Task :core:prefs:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:takserver:downloadKotlinNativeDistribution -> Task :core:takserver:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:data:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:data:validateLocalSwiftPMDependencies -> Task :core:data:computeLocalPackageDependencyInputFiles -> Task :core:data:fingerprintSyntheticPackage -> Task :core:data:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:data:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:data:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:data:fingerprintXcodebuildIphonesimulator -> Task :core:data:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:data:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:data:jvmTestProcessResources NO-SOURCE -> Task :core:data:processJvmTestResources SKIPPED -> Task :core:data:koverFindJar -> Task :core:data:androidJar UP-TO-DATE -> Task :core:data:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:data:preAndroidHostTestBuild UP-TO-DATE -> Task :core:data:mergeAndroidHostTestAssets -> Task :core:data:checkAndroidHostTestAarMetadata -> Task :core:data:mapAndroidHostTestSourceSetPaths -> Task :core:data:generateAndroidHostTestResources FROM-CACHE -> Task :core:common:mergeAndroidHostTestResources FROM-CACHE -> Task :core:data:mergeAndroidHostTestResources FROM-CACHE -> Task :core:common:compileTestKotlinIosSimulatorArm64 -> Task :core:common:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:common:iosSimulatorArm64Test SKIPPED -> Task :core:data:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:database:validateLocalSwiftPMDependencies -> Task :core:database:computeLocalPackageDependencyInputFiles -> Task :core:database:fingerprintSyntheticPackage -> Task :core:database:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:database:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:database:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:database:fingerprintXcodebuildIphonesimulator -> Task :core:database:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:database:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:data:mergeAndroidHostTestManifest -> Task :core:database:koverFindJar -> Task :core:database:androidJar UP-TO-DATE -> Task :core:database:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:data:processAndroidHostTestManifest -> Task :core:database:mergeAndroidHostTestAssets -> Task :core:database:packageAndroidHostTestForUnitTest -> Task :core:database:generateAndroidHostTestConfig -> Task :core:database:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:datastore:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:datastore:validateLocalSwiftPMDependencies -> Task :core:datastore:computeLocalPackageDependencyInputFiles -> Task :core:datastore:fingerprintSyntheticPackage -> Task :core:datastore:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:datastore:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:datastore:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:datastore:fingerprintXcodebuildIphonesimulator -> Task :core:datastore:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:datastore:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:datastore:jvmTestProcessResources NO-SOURCE -> Task :core:datastore:processJvmTestResources SKIPPED -> Task :core:datastore:koverFindJar -> Task :core:datastore:androidJar UP-TO-DATE -> Task :core:datastore:preAndroidHostTestBuild UP-TO-DATE -> Task :core:datastore:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:di:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:di:iosSimulatorArm64MainKlibrary -> Task :core:di:compileTestKotlinIosSimulatorArm64 NO-SOURCE -> Task :core:di:validateLocalSwiftPMDependencies -> Task :core:di:computeLocalPackageDependencyInputFiles -> Task :core:di:fingerprintSyntheticPackage -> Task :core:di:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:di:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:di:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:di:fingerprintXcodebuildIphonesimulator -> Task :core:di:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:di:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:di:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:di:iosSimulatorArm64Test SKIPPED -> Task :core:di:compileTestKotlinJvm NO-SOURCE -> Task :core:di:compileJvmTestJava NO-SOURCE -> Task :core:di:jvmTestProcessResources NO-SOURCE -> Task :core:di:processJvmTestResources SKIPPED -> Task :core:di:jvmTestClasses UP-TO-DATE -> Task :core:di:koverFindJar -> Task :core:di:jvmTest NO-SOURCE -> Task :core:di:allTests NO-SOURCE -> Task :core:domain:downloadKotlinNativeDistribution -> Task :core:domain:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:domain:validateLocalSwiftPMDependencies -> Task :core:domain:computeLocalPackageDependencyInputFiles -> Task :core:domain:fingerprintSyntheticPackage -> Task :core:domain:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:domain:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:domain:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:domain:fingerprintXcodebuildIphonesimulator -> Task :core:domain:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:common:processAndroidHostTestResources FROM-CACHE -> Task :core:data:processAndroidHostTestResources FROM-CACHE -> Task :core:common:packageAndroidHostTestForUnitTest -> Task :core:common:generateAndroidHostTestConfig -> Task :core:data:packageAndroidHostTestForUnitTest -> Task :core:data:generateAndroidHostTestConfig -> Task :core:domain:jvmTestProcessResources NO-SOURCE -> Task :core:domain:processJvmTestResources SKIPPED -> Task :core:domain:koverFindJar -> Task :core:domain:androidJar UP-TO-DATE -> Task :core:domain:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:domain:preAndroidHostTestBuild UP-TO-DATE -> Task :core:domain:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:domain:checkAndroidHostTestAarMetadata -> Task :core:domain:mapAndroidHostTestSourceSetPaths -> Task :core:domain:generateAndroidHostTestResources FROM-CACHE -> Task :core:domain:mergeAndroidHostTestAssets -> Task :core:domain:mergeAndroidHostTestManifest -> Task :core:domain:processAndroidHostTestManifest -> Task :core:domain:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:konsist:kmpPartiallyResolvedDependenciesChecker -> Task :core:konsist:checkKotlinGradlePluginConfigurationErrors SKIPPED -> Task :core:konsist:downloadKotlinNativeDistribution -> Task :core:konsist:compileKotlinIosSimulatorArm64 NO-SOURCE -> Task :core:konsist:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:konsist:iosSimulatorArm64MainKlibrary UP-TO-DATE -> Task :core:konsist:compileTestKotlinIosSimulatorArm64 NO-SOURCE -> Task :core:konsist:validateLocalSwiftPMDependencies -> Task :core:konsist:computeLocalPackageDependencyInputFiles -> Task :core:konsist:fingerprintSyntheticPackage -> Task :core:konsist:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:konsist:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:konsist:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:konsist:fingerprintXcodebuildIphonesimulator -> Task :core:konsist:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:konsist:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:konsist:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:konsist:iosSimulatorArm64Test SKIPPED -> Task :core:konsist:compileKotlinJvm NO-SOURCE -> Task :core:konsist:compileJvmMainJava NO-SOURCE -> Task :core:konsist:jvmProcessResources NO-SOURCE -> Task :core:konsist:processJvmMainResources SKIPPED -> Task :core:konsist:jvmMainClasses UP-TO-DATE -> Task :core:konsist:jvmJar UP-TO-DATE -> Task :core:domain:mergeAndroidHostTestResources FROM-CACHE -> Task :core:common:compileTestKotlinJvm -> Task :core:common:compileJvmTestJava NO-SOURCE -> Task :core:common:jvmTestClasses -> Task :core:domain:processAndroidHostTestResources FROM-CACHE -> Task :core:domain:packageAndroidHostTestForUnitTest -> Task :core:domain:generateAndroidHostTestConfig -> Task :core:konsist:jvmTestProcessResources NO-SOURCE -> Task :core:konsist:processJvmTestResources SKIPPED -> Task :core:konsist:koverFindJar -> Task :core:konsist:compileAndroidMain NO-SOURCE -> Task :core:konsist:androidPreBuild UP-TO-DATE -> Task :core:konsist:preAndroidMainBuild UP-TO-DATE -> Task :core:konsist:bundleAndroidMainClassesToRuntimeJar -> Task :core:konsist:androidJar UP-TO-DATE -> Task :core:konsist:bundleAndroidMainClassesToCompileJar -> Task :core:konsist:compileAndroidHostTest NO-SOURCE -> Task :core:konsist:preAndroidHostTestBuild UP-TO-DATE -> Task :core:konsist:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:konsist:processAndroidMainJavaRes NO-SOURCE -> Task :core:konsist:testAndroidHostTest NO-SOURCE -> Task :core:model:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:model:validateLocalSwiftPMDependencies -> Task :core:model:computeLocalPackageDependencyInputFiles -> Task :core:model:fingerprintSyntheticPackage -> Task :core:model:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:model:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:model:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:model:fingerprintXcodebuildIphonesimulator -> Task :core:model:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:model:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:model:jvmTestProcessResources NO-SOURCE -> Task :core:model:processJvmTestResources SKIPPED -> Task :core:model:koverFindJar -> Task :core:model:androidJar UP-TO-DATE -> Task :core:model:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:model:preAndroidHostTestBuild UP-TO-DATE -> Task :core:model:mergeAndroidHostTestAssets -> Task :core:model:checkAndroidHostTestAarMetadata -> Task :core:model:mapAndroidHostTestSourceSetPaths -> Task :core:model:generateAndroidHostTestResources FROM-CACHE -> Task :core:common:jvmTest FROM-CACHE -> Task :core:model:mergeAndroidHostTestManifest -> Task :core:model:processAndroidHostTestManifest -> Task :core:model:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:navigation:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :core:navigation:downloadKotlinNativeDistribution -> Task :core:navigation:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForIosMain NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :core:navigation:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :core:navigation:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :core:navigation:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForIosTest NO-SOURCE -> Task :core:navigation:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :core:model:mergeAndroidHostTestResources FROM-CACHE -> Task :core:resources:assembleIosSimulatorArm64MainResources -> Task :core:konsist:compileTestKotlinJvm -> Task :core:konsist:compileJvmTestJava NO-SOURCE -> Task :core:konsist:jvmTestClasses -> Task :core:resources:iosSimulatorArm64CopyHierarchicalMultiplatformResources -> Task :feature:widget:processDebugUnitTestResources FROM-CACHE -> Task :feature:widget:packageDebugUnitTestForUnitTest -> Task :feature:widget:generateDebugUnitTestConfig -> Task :core:navigation:assembleIosSimulatorArm64MainResources -> Task :core:navigation:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :core:navigation:validateLocalSwiftPMDependencies -> Task :core:navigation:computeLocalPackageDependencyInputFiles -> Task :core:navigation:fingerprintSyntheticPackage -> Task :core:navigation:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:navigation:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:navigation:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:navigation:fingerprintXcodebuildIphonesimulator -> Task :core:navigation:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:navigation:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:navigation:assembleIosSimulatorArm64TestResources -> Task :core:navigation:checkJvmTestComposeLibrariesCompatibility -> Task :core:navigation:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:navigation:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:navigation:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :core:navigation:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :core:navigation:assembleJvmTestResources -> Task :core:navigation:jvmTestProcessResources UP-TO-DATE -> Task :core:navigation:processJvmTestResources SKIPPED -> Task :core:navigation:koverFindJar -> Task :core:network:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:network:validateLocalSwiftPMDependencies -> Task :core:network:computeLocalPackageDependencyInputFiles -> Task :core:network:fingerprintSyntheticPackage -> Task :core:network:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:network:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:network:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:network:fingerprintXcodebuildIphonesimulator -> Task :core:network:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:network:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:network:jvmTestProcessResources NO-SOURCE -> Task :core:network:processJvmTestResources SKIPPED -> Task :core:network:koverFindJar -> Task :core:network:androidJar UP-TO-DATE -> Task :core:network:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:network:preAndroidHostTestBuild UP-TO-DATE -> Task :core:resources:iosSimulatorArm64ZipMultiplatformResourcesForPublication -> Task :core:network:mergeAndroidHostTestAssets -> Task :core:network:checkAndroidHostTestAarMetadata -> Task :core:network:mapAndroidHostTestSourceSetPaths -> Task :core:network:generateAndroidHostTestResources FROM-CACHE -> Task :core:model:processAndroidHostTestResources FROM-CACHE -> Task :core:model:packageAndroidHostTestForUnitTest -> Task :core:model:generateAndroidHostTestConfig -> Task :core:navigation:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :core:network:mergeAndroidHostTestManifest -> Task :core:network:processAndroidHostTestManifest -> Task :core:network:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:nfc:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :core:nfc:downloadKotlinNativeDistribution -> Task :core:nfc:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForIosMain NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :core:nfc:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :core:navigation:iosSimulatorArm64AggregateResources -> Task :core:network:mergeAndroidHostTestResources FROM-CACHE -> Task :core:konsist:jvmTest FROM-CACHE -> Task :core:konsist:allTests -> Task :core:navigation:iosSimulatorArm64ProcessResources -> Task :core:nfc:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :core:nfc:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForIosTest NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :core:nfc:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :core:nfc:assembleIosSimulatorArm64MainResources -> Task :core:nfc:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :core:nfc:iosSimulatorArm64AggregateResources -> Task :core:nfc:iosSimulatorArm64ProcessResources UP-TO-DATE -> Task :core:nfc:validateLocalSwiftPMDependencies -> Task :core:nfc:computeLocalPackageDependencyInputFiles -> Task :core:nfc:fingerprintSyntheticPackage -> Task :core:nfc:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:nfc:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:nfc:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:navigation:copyTestComposeResourcesForIosSimulatorArm64 -> Task :core:nfc:fingerprintXcodebuildIphonesimulator -> Task :core:nfc:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:nfc:assembleIosSimulatorArm64TestResources -> Task :core:nfc:copyTestComposeResourcesForIosSimulatorArm64 UP-TO-DATE -> Task :core:nfc:checkJvmMainComposeLibrariesCompatibility -> Task :core:nfc:convertXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForJvmMain NO-SOURCE -> Task :core:nfc:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:nfc:checkJvmTestComposeLibrariesCompatibility -> Task :core:nfc:prepareComposeResourcesTaskForJvmMain NO-SOURCE -> Task :core:nfc:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:nfc:generateResourceAccessorsForJvmMain NO-SOURCE -> Task :core:nfc:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:nfc:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :core:nfc:generateActualResourceCollectorsForJvmMain -> Task :core:nfc:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :core:nfc:assembleJvmMainResources -> Task :core:nfc:jvmProcessResources UP-TO-DATE -> Task :core:nfc:processJvmMainResources SKIPPED -> Task :core:nfc:assembleJvmTestResources -> Task :core:nfc:jvmTestProcessResources UP-TO-DATE -> Task :core:nfc:processJvmTestResources SKIPPED -> Task :core:nfc:koverFindJar -> Task :core:prefs:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:prefs:validateLocalSwiftPMDependencies -> Task :core:prefs:computeLocalPackageDependencyInputFiles -> Task :core:prefs:fingerprintSyntheticPackage -> Task :core:prefs:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:prefs:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:prefs:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:prefs:fingerprintXcodebuildIphonesimulator -> Task :core:prefs:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:prefs:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:prefs:jvmTestProcessResources NO-SOURCE -> Task :core:prefs:processJvmTestResources SKIPPED -> Task :core:prefs:koverFindJar -> Task :core:prefs:androidJar UP-TO-DATE -> Task :core:prefs:preAndroidHostTestBuild UP-TO-DATE -> Task :core:prefs:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:repository:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:repository:validateLocalSwiftPMDependencies -> Task :core:repository:computeLocalPackageDependencyInputFiles -> Task :core:repository:fingerprintSyntheticPackage -> Task :core:repository:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:repository:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:repository:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:repository:fingerprintXcodebuildIphonesimulator -> Task :core:repository:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:repository:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:repository:jvmTestProcessResources NO-SOURCE -> Task :core:repository:processJvmTestResources SKIPPED -> Task :core:repository:koverFindJar -> Task :core:repository:androidJar UP-TO-DATE -> Task :core:repository:preAndroidHostTestBuild UP-TO-DATE -> Task :core:repository:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:resources:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :core:resources:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :core:resources:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :core:resources:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :core:resources:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :core:resources:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :core:resources:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :core:resources:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :core:resources:generateResourceAccessorsForIosTest NO-SOURCE -> Task :core:resources:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :core:resources:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :core:resources:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :core:resources:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :core:network:processAndroidHostTestResources FROM-CACHE -> Task :core:network:packageAndroidHostTestForUnitTest -> Task :core:network:generateAndroidHostTestConfig -> Task :core:resources:validateLocalSwiftPMDependencies -> Task :core:resources:computeLocalPackageDependencyInputFiles -> Task :core:resources:fingerprintSyntheticPackage -> Task :core:resources:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:resources:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:resources:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:resources:fingerprintXcodebuildIphonesimulator -> Task :core:resources:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:resources:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:resources:assembleIosSimulatorArm64TestResources -> Task :core:resources:checkJvmTestComposeLibrariesCompatibility -> Task :core:resources:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :core:resources:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :core:resources:assembleJvmTestResources -> Task :core:resources:jvmTestProcessResources UP-TO-DATE -> Task :core:resources:processJvmTestResources SKIPPED -> Task :core:resources:koverFindJar -> Task :core:resources:androidJar UP-TO-DATE -> Task :core:resources:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:resources:preAndroidHostTestBuild UP-TO-DATE -> Task :core:nfc:compileKotlinIosSimulatorArm64 -> Task :core:nfc:iosSimulatorArm64MainKlibrary -> Task :core:nfc:compileTestKotlinIosSimulatorArm64 NO-SOURCE -> Task :core:nfc:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:nfc:iosSimulatorArm64Test SKIPPED -> Task :core:resources:checkAndroidHostTestAarMetadata -> Task :core:resources:mapAndroidHostTestSourceSetPaths -> Task :core:resources:generateAndroidHostTestResources FROM-CACHE -> Task :core:resources:iosSimulatorArm64AggregateResources -> Task :core:resources:mergeAndroidHostTestAssets -> Task :core:nfc:compileKotlinJvm -> Task :core:nfc:compileJvmMainJava NO-SOURCE -> Task :core:nfc:jvmMainClasses -> Task :core:nfc:jvmJar UP-TO-DATE -> Task :core:nfc:compileTestKotlinJvm NO-SOURCE -> Task :core:nfc:compileJvmTestJava NO-SOURCE -> Task :core:nfc:jvmTestClasses UP-TO-DATE -> Task :core:nfc:jvmTest NO-SOURCE -> Task :core:nfc:allTests NO-SOURCE -> Task :core:resources:mergeAndroidHostTestManifest -> Task :core:resources:processAndroidHostTestManifest -> Task :core:resources:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :core:resources:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :core:resources:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :core:resources:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :core:resources:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:data:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:navigation:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:service:downloadKotlinNativeDistribution -> Task :core:service:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:service:validateLocalSwiftPMDependencies -> Task :core:service:computeLocalPackageDependencyInputFiles -> Task :core:service:fingerprintSyntheticPackage -> Task :core:service:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:service:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:service:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:service:fingerprintXcodebuildIphonesimulator -> Task :core:service:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:service:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:service:jvmTestProcessResources NO-SOURCE -> Task :core:service:processJvmTestResources SKIPPED -> Task :core:service:koverFindJar -> Task :core:service:androidJar UP-TO-DATE -> Task :core:service:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:service:preAndroidHostTestBuild UP-TO-DATE -> Task :core:resources:copyTestComposeResourcesForIosSimulatorArm64 -> Task :core:service:checkAndroidHostTestAarMetadata -> Task :core:service:mapAndroidHostTestSourceSetPaths -> Task :core:service:generateAndroidHostTestResources FROM-CACHE -> Task :core:service:mergeAndroidHostTestAssets -> Task :core:resources:iosSimulatorArm64ProcessResources -> Task :core:service:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:takserver:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:takserver:validateLocalSwiftPMDependencies -> Task :core:takserver:computeLocalPackageDependencyInputFiles -> Task :core:takserver:fingerprintSyntheticPackage -> Task :core:takserver:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:takserver:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:takserver:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:service:mergeAndroidHostTestManifest -> Task :core:service:processAndroidHostTestManifest -> Task :core:takserver:jvmTestProcessResources NO-SOURCE -> Task :core:takserver:processJvmTestResources SKIPPED -> Task :core:takserver:fingerprintXcodebuildIphonesimulator -> Task :core:takserver:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:takserver:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:takserver:androidJar UP-TO-DATE -> Task :core:takserver:generateAndroidHostTestAssets UP-TO-DATE -> Task :core:takserver:preAndroidHostTestBuild UP-TO-DATE -> Task :core:takserver:koverFindJar -> Task :core:takserver:checkAndroidHostTestAarMetadata -> Task :core:takserver:mapAndroidHostTestSourceSetPaths -> Task :core:takserver:generateAndroidHostTestResources FROM-CACHE -> Task :core:resources:mergeAndroidHostTestResources -> Task :core:takserver:mergeAndroidHostTestAssets -> Task :core:takserver:mergeAndroidHostTestManifest -> Task :core:takserver:processAndroidHostTestManifest -> Task :core:takserver:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:testing:iosSimulatorArm64ProcessResources NO-SOURCE -> Task :core:testing:validateLocalSwiftPMDependencies -> Task :core:testing:computeLocalPackageDependencyInputFiles -> Task :core:testing:fingerprintSyntheticPackage -> Task :core:testing:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:testing:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:testing:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:testing:fingerprintXcodebuildIphonesimulator -> Task :core:testing:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:testing:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:testing:jvmTestProcessResources NO-SOURCE -> Task :core:testing:processJvmTestResources SKIPPED -> Task :core:testing:koverFindJar -> Task :core:testing:androidJar UP-TO-DATE -> Task :core:testing:preAndroidHostTestBuild UP-TO-DATE -> Task :core:testing:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:service:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:ui:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :core:ui:downloadKotlinNativeDistribution -> Task :core:ui:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :core:ui:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :core:ui:generateResourceAccessorsForIosMain NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :core:ui:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :core:ui:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :core:ui:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :core:ui:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :core:ui:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :core:ui:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :core:ui:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :core:ui:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :core:ui:generateResourceAccessorsForIosTest NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :core:ui:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :core:navigation:iosSimulatorArm64CopyHierarchicalMultiplatformResources -> Task :core:navigation:iosSimulatorArm64ZipMultiplatformResourcesForPublication UP-TO-DATE -> Task :core:ui:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :core:ui:assembleIosSimulatorArm64MainResources -> Task :core:ui:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :core:ui:iosSimulatorArm64AggregateResources -> Task :core:resources:compileKotlinJvm -> Task :core:resources:processAndroidHostTestResources -> Task :core:resources:compileJvmMainJava NO-SOURCE -> Task :core:resources:jvmMainClasses -> Task :core:resources:packageAndroidHostTestForUnitTest -> Task :core:ui:iosSimulatorArm64ProcessResources -> Task :core:ui:validateLocalSwiftPMDependencies -> Task :core:resources:generateAndroidHostTestConfig -> Task :core:ui:computeLocalPackageDependencyInputFiles -> Task :core:ui:fingerprintSyntheticPackage -> Task :core:ui:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :core:ui:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :core:ui:fetchSyntheticImportProjectPackages SKIPPED -> Task :core:ui:fingerprintXcodebuildIphonesimulator -> Task :core:ui:assembleIosSimulatorArm64TestResources -> Task :core:ui:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :core:ui:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :core:ui:checkJvmTestComposeLibrariesCompatibility -> Task :core:ui:convertXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForJvmAndroidTest NO-SOURCE -> Task :core:ui:generateResourceAccessorsForJvmAndroidTest NO-SOURCE -> Task :core:ui:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:ui:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :core:ui:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :core:ui:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :core:ui:assembleJvmTestResources -> Task :core:ui:jvmTestProcessResources UP-TO-DATE -> Task :core:ui:processJvmTestResources SKIPPED -> Task :core:ui:koverFindJar -> Task :core:domain:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :core:ui:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :feature:connections:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:connections:downloadKotlinNativeDistribution -> Task :feature:connections:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:connections:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:connections:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:connections:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:connections:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :core:ui:iosSimulatorArm64CopyHierarchicalMultiplatformResources -> Task :core:ui:iosSimulatorArm64ZipMultiplatformResourcesForPublication UP-TO-DATE -> Task :core:service:mergeAndroidHostTestResources FROM-CACHE -> Task :core:ui:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:connections:assembleIosSimulatorArm64MainResources -> Task :feature:connections:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:connections:validateLocalSwiftPMDependencies -> Task :feature:connections:computeLocalPackageDependencyInputFiles -> Task :feature:connections:fingerprintSyntheticPackage -> Task :feature:connections:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:connections:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:connections:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:connections:fingerprintXcodebuildIphonesimulator -> Task :feature:connections:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:connections:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:connections:assembleIosSimulatorArm64TestResources -> Task :feature:connections:checkJvmTestComposeLibrariesCompatibility -> Task :feature:connections:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :core:takserver:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:connections:assembleJvmTestResources -> Task :feature:connections:jvmTestProcessResources UP-TO-DATE -> Task :feature:connections:processJvmTestResources SKIPPED -> Task :feature:connections:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:connections:koverFindJar -> Task :feature:connections:androidJar UP-TO-DATE -> Task :feature:connections:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:connections:preAndroidHostTestBuild UP-TO-DATE -> Task :core:resources:compileAndroidMain -> Task :core:resources:bundleAndroidMainClassesToCompileJar -> Task :core:resources:jvmJar -> Task :feature:connections:mergeAndroidHostTestAssets -> Task :feature:connections:iosSimulatorArm64AggregateResources -> Task :core:resources:processAndroidMainJavaRes -> Task :core:resources:bundleLibRuntimeToDirAndroidMain -> Task :core:common:compileAndroidHostTest -> Task :core:resources:bundleAndroidMainClassesToRuntimeJar -> Task :core:takserver:processAndroidHostTestResources FROM-CACHE -> Task :core:navigation:compileAndroidMain -> Task :core:navigation:bundleAndroidMainClassesToCompileJar -> Task :core:navigation:processAndroidMainJavaRes -> Task :core:navigation:bundleLibRuntimeToDirAndroidMain -> Task :core:service:processAndroidHostTestResources FROM-CACHE -> Task :core:navigation:bundleAndroidMainClassesToRuntimeJar -> Task :core:resources:compileTestKotlinJvm NO-SOURCE -> Task :core:resources:compileJvmTestJava NO-SOURCE -> Task :core:resources:jvmTestClasses UP-TO-DATE -> Task :core:resources:jvmTest NO-SOURCE -> Task :core:resources:compileAndroidHostTest NO-SOURCE -> Task :core:resources:testAndroidHostTest NO-SOURCE -> Task :core:service:packageAndroidHostTestForUnitTest -> Task :core:service:generateAndroidHostTestConfig -> Task :core:takserver:packageAndroidHostTestForUnitTest -> Task :core:takserver:generateAndroidHostTestConfig -> Task :feature:connections:iosSimulatorArm64ProcessResources -> Task :feature:connections:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:connections:checkAndroidHostTestAarMetadata -> Task :feature:connections:mapAndroidHostTestSourceSetPaths -> Task :feature:connections:generateAndroidHostTestResources FROM-CACHE -> Task :feature:connections:mergeAndroidHostTestManifest -> Task :feature:connections:processAndroidHostTestManifest -> Task :feature:connections:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:connections:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:connections:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:connections:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:connections:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:discovery:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:discovery:downloadKotlinNativeDistribution -> Task :feature:discovery:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:discovery:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:discovery:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:discovery:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:discovery:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :core:model:compileAndroidMain -> Task :core:model:bundleAndroidMainClassesToCompileJar -> Task :feature:discovery:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :core:model:compileKotlinJvm -> Task :core:navigation:compileKotlinJvm -> Task :core:model:compileJvmMainJava NO-SOURCE -> Task :core:model:jvmMainClasses -> Task :core:model:jvmJar -> Task :feature:connections:mergeAndroidHostTestResources FROM-CACHE -> Task :core:datastore:compileAndroidMain -> Task :core:datastore:bundleAndroidMainClassesToCompileJar -> Task :core:ble:compileAndroidMain -> Task :core:ble:bundleAndroidMainClassesToCompileJar -> Task :core:ble:processAndroidMainJavaRes -> Task :core:datastore:processAndroidMainJavaRes -> Task :core:model:processAndroidMainJavaRes -> Task :core:ble:bundleLibRuntimeToDirAndroidMain -> Task :core:ble:compileKotlinJvm -> Task :core:ble:compileJvmMainJava NO-SOURCE -> Task :core:ble:jvmMainClasses -> Task :core:ble:jvmJar UP-TO-DATE -> Task :core:datastore:bundleLibRuntimeToDirAndroidMain -> Task :core:model:bundleLibRuntimeToDirAndroidMain -> Task :core:datastore:compileKotlinJvm -> Task :core:datastore:compileJvmMainJava NO-SOURCE -> Task :core:datastore:jvmMainClasses -> Task :core:datastore:jvmJar UP-TO-DATE -> Task :core:ble:bundleAndroidMainClassesToRuntimeJar -> Task :core:datastore:bundleAndroidMainClassesToRuntimeJar -> Task :core:model:bundleAndroidMainClassesToRuntimeJar -> Task :core:navigation:compileJvmMainJava NO-SOURCE -> Task :core:navigation:jvmMainClasses -> Task :core:navigation:jvmJar UP-TO-DATE -> Task :core:datastore:compileAndroidHostTest -> Task :core:datastore:compileTestKotlinJvm -> Task :core:datastore:compileJvmTestJava NO-SOURCE -> Task :core:datastore:jvmTestClasses -> Task :core:common:testAndroidHostTest FROM-CACHE -> Task :core:common:allTests -> Task :feature:connections:processAndroidHostTestResources FROM-CACHE -> Task :feature:connections:packageAndroidHostTestForUnitTest -> Task :feature:connections:generateAndroidHostTestConfig -> Task :feature:discovery:assembleIosSimulatorArm64MainResources -> Task :feature:discovery:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:discovery:iosSimulatorArm64AggregateResources -> Task :feature:discovery:iosSimulatorArm64ProcessResources -> Task :feature:discovery:validateLocalSwiftPMDependencies -> Task :feature:discovery:computeLocalPackageDependencyInputFiles -> Task :feature:discovery:fingerprintSyntheticPackage -> Task :feature:discovery:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:discovery:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:discovery:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:discovery:fingerprintXcodebuildIphonesimulator -> Task :feature:discovery:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:discovery:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:discovery:assembleIosSimulatorArm64TestResources -> Task :feature:discovery:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:discovery:checkJvmTestComposeLibrariesCompatibility -> Task :feature:discovery:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:discovery:assembleJvmTestResources -> Task :feature:discovery:jvmTestProcessResources UP-TO-DATE -> Task :feature:discovery:processJvmTestResources SKIPPED -> Task :feature:discovery:koverFindJar -> Task :feature:discovery:androidJar UP-TO-DATE -> Task :feature:discovery:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:discovery:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:discovery:mergeAndroidHostTestAssets -> Task :feature:discovery:checkAndroidHostTestAarMetadata -> Task :feature:discovery:mapAndroidHostTestSourceSetPaths -> Task :feature:discovery:generateAndroidHostTestResources FROM-CACHE - -> Task :core:datastore:testAndroidHostTest - -RecentAddressesDataSourceTest > legacy JsonObject array is parsed correctly PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:datastore:jvmTest - -RecentAddressesDataSourceTest[jvm] > legacy JsonObject array is parsed correctly()[jvm] PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :feature:discovery:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:discovery:mergeAndroidHostTestManifest -> Task :feature:discovery:processAndroidHostTestManifest - -> Task :core:datastore:testAndroidHostTest - -RecentAddressesDataSourceTest > setRecentAddresses persists and emits the list PASSED - -RecentAddressesDataSourceTest > legacy nested JsonArray entries are skipped PASSED - -RecentAddressesDataSourceTest > add prepends new address to front PASSED - -RecentAddressesDataSourceTest > add re-adding the same address at front keeps capacity PASSED - -RecentAddressesDataSourceTest > legacy JsonObject missing name field is skipped PASSED - -RecentAddressesDataSourceTest > setRecentAddresses overwrites previous value PASSED - -RecentAddressesDataSourceTest > remove deletes the matching address PASSED - -RecentAddressesDataSourceTest > legacy mixed array handles all element types PASSED - -RecentAddressesDataSourceTest > add deduplicates by address moving existing entry to front with updated name PASSED - -RecentAddressesDataSourceTest > recentAddresses emits empty list when no data stored PASSED - -RecentAddressesDataSourceTest > remove last address yields empty list PASSED - -RecentAddressesDataSourceTest > legacy bare string JsonPrimitive array is parsed correctly PASSED - -RecentAddressesDataSourceTest > remove on unknown address is a no-op PASSED - -RecentAddressesDataSourceTest > legacy JsonObject missing address field is skipped PASSED - -RecentAddressesDataSourceTest > add to empty list stores single entry PASSED - -RecentAddressesDataSourceTest > add enforces CACHE_CAPACITY of 3 evicting oldest entry PASSED - -> Task :feature:discovery:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:discovery:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:discovery:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:discovery:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:discovery:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:docs:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:docs:downloadKotlinNativeDistribution -> Task :feature:docs:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:docs:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:docs:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:docs:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:docs:iosSimulatorArm64ResolveResourcesFromDependencies - -> Task :core:datastore:jvmTest - -RecentAddressesDataSourceTest[jvm] > setRecentAddresses persists and emits the list()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > legacy nested JsonArray entries are skipped()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > add prepends new address to front()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > add re-adding the same address at front keeps capacity()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > legacy JsonObject missing name field is skipped()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > setRecentAddresses overwrites previous value()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > remove deletes the matching address()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > legacy mixed array handles all element types()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > add deduplicates by address moving existing entry to front with updated name()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > recentAddresses emits empty list when no data stored()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > remove last address yields empty list()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > legacy bare string JsonPrimitive array is parsed correctly()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > remove on unknown address is a no-op()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > legacy JsonObject missing address field is skipped()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > add to empty list stores single entry()[jvm] PASSED - -RecentAddressesDataSourceTest[jvm] > add enforces CACHE_CAPACITY of 3 evicting oldest entry()[jvm] PASSED - -> Task :feature:docs:validateLocalSwiftPMDependencies -> Task :feature:docs:computeLocalPackageDependencyInputFiles -> Task :feature:docs:fingerprintSyntheticPackage -> Task :feature:docs:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:docs:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:docs:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:docs:fingerprintXcodebuildIphonesimulator -> Task :feature:docs:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:docs:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:docs:assembleIosSimulatorArm64TestResources -> Task :feature:docs:checkJvmTestComposeLibrariesCompatibility -> Task :feature:docs:convertXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForJvmAndroidTest NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForJvmAndroidTest NO-SOURCE -> Task :feature:docs:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:docs:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:docs:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:docs:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:docs:assembleJvmTestResources -> Task :feature:docs:jvmTestProcessResources UP-TO-DATE -> Task :feature:docs:processJvmTestResources SKIPPED -> Task :feature:docs:koverFindJar -> Task :feature:firmware:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:firmware:downloadKotlinNativeDistribution -> Task :feature:firmware:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:firmware:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:firmware:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:firmware:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:firmware:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:firmware:assembleIosSimulatorArm64MainResources -> Task :feature:firmware:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:firmware:iosSimulatorArm64AggregateResources -> Task :feature:discovery:processAndroidHostTestResources FROM-CACHE -> Task :feature:discovery:packageAndroidHostTestForUnitTest -> Task :feature:discovery:generateAndroidHostTestConfig -> Task :feature:firmware:validateLocalSwiftPMDependencies -> Task :feature:firmware:computeLocalPackageDependencyInputFiles -> Task :feature:firmware:fingerprintSyntheticPackage -> Task :feature:firmware:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:firmware:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:firmware:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:firmware:fingerprintXcodebuildIphonesimulator -> Task :feature:firmware:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:firmware:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:firmware:assembleIosSimulatorArm64TestResources -> Task :feature:firmware:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:firmware:checkJvmTestComposeLibrariesCompatibility -> Task :feature:firmware:convertXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForJvmAndroidTest NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForJvmAndroidTest NO-SOURCE -> Task :feature:firmware:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:firmware:assembleJvmTestResources -> Task :feature:firmware:jvmTestProcessResources UP-TO-DATE -> Task :feature:firmware:processJvmTestResources SKIPPED -> Task :feature:firmware:koverFindJar -> Task :feature:firmware:androidJar UP-TO-DATE -> Task :feature:firmware:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:firmware:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:firmware:iosSimulatorArm64ProcessResources -> Task :feature:firmware:checkAndroidHostTestAarMetadata -> Task :feature:firmware:mapAndroidHostTestSourceSetPaths -> Task :feature:firmware:generateAndroidHostTestResources FROM-CACHE -> Task :feature:firmware:mergeAndroidHostTestAssets -> Task :feature:firmware:mergeAndroidHostTestManifest -> Task :feature:firmware:processAndroidHostTestManifest -> Task :feature:docs:assembleIosSimulatorArm64MainResources -> Task :feature:firmware:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:firmware:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:firmware:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:firmware:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:firmware:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:intro:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:intro:downloadKotlinNativeDistribution -> Task :feature:intro:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:intro:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:intro:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:intro:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:intro:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:intro:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:intro:assembleIosSimulatorArm64MainResources -> Task :feature:intro:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:intro:validateLocalSwiftPMDependencies -> Task :feature:intro:computeLocalPackageDependencyInputFiles -> Task :feature:intro:fingerprintSyntheticPackage -> Task :feature:intro:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:intro:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:intro:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:intro:fingerprintXcodebuildIphonesimulator -> Task :feature:intro:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:intro:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:intro:assembleIosSimulatorArm64TestResources -> Task :feature:intro:checkJvmTestComposeLibrariesCompatibility -> Task :feature:intro:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:intro:assembleJvmTestResources -> Task :feature:intro:jvmTestProcessResources UP-TO-DATE -> Task :feature:intro:processJvmTestResources SKIPPED -> Task :feature:intro:koverFindJar -> Task :feature:intro:androidJar UP-TO-DATE -> Task :feature:intro:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:intro:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:intro:iosSimulatorArm64AggregateResources -> Task :feature:intro:mergeAndroidHostTestAssets -> Task :feature:intro:iosSimulatorArm64ProcessResources -> Task :feature:intro:checkAndroidHostTestAarMetadata -> Task :feature:intro:mapAndroidHostTestSourceSetPaths -> Task :feature:intro:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:intro:generateAndroidHostTestResources FROM-CACHE -> Task :feature:intro:mergeAndroidHostTestManifest -> Task :feature:intro:processAndroidHostTestManifest -> Task :feature:intro:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:intro:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:intro:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:intro:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:intro:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:map:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:map:downloadKotlinNativeDistribution -> Task :feature:map:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:map:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:map:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:map:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:docs:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:map:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:map:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:map:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:map:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:map:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:map:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:map:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:map:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:map:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:map:assembleIosSimulatorArm64MainResources -> Task :feature:map:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:firmware:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:map:iosSimulatorArm64AggregateResources -> Task :feature:map:iosSimulatorArm64ProcessResources -> Task :feature:map:validateLocalSwiftPMDependencies -> Task :feature:map:computeLocalPackageDependencyInputFiles -> Task :feature:map:fingerprintSyntheticPackage -> Task :feature:map:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:map:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:map:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:map:fingerprintXcodebuildIphonesimulator -> Task :feature:map:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:map:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:map:assembleIosSimulatorArm64TestResources -> Task :feature:map:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:map:checkJvmTestComposeLibrariesCompatibility -> Task :feature:map:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:map:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :core:resources:compileKotlinIosSimulatorArm64 -> Task :feature:map:assembleJvmTestResources -> Task :feature:map:jvmTestProcessResources UP-TO-DATE -> Task :feature:map:processJvmTestResources SKIPPED -> Task :feature:map:koverFindJar -> Task :feature:map:androidJar UP-TO-DATE -> Task :feature:map:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:map:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:docs:iosSimulatorArm64AggregateResources -> Task :feature:firmware:processAndroidHostTestResources FROM-CACHE -> Task :feature:map:mergeAndroidHostTestAssets -> Task :feature:firmware:packageAndroidHostTestForUnitTest -> Task :feature:firmware:generateAndroidHostTestConfig -> Task :feature:map:checkAndroidHostTestAarMetadata -> Task :feature:map:mapAndroidHostTestSourceSetPaths -> Task :feature:map:generateAndroidHostTestResources FROM-CACHE -> Task :feature:docs:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:docs:iosSimulatorArm64ProcessResources -> Task :feature:map:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:map:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:map:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:map:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:map:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:map:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :feature:map-maplibre:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:map-maplibre:downloadKotlinNativeDistribution -> Task :feature:map-maplibre:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:map-maplibre:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:map-terrain:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:map-terrain:downloadKotlinNativeDistribution -> Task :feature:map-terrain:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:map:mergeAndroidHostTestManifest -> Task :feature:map-terrain:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:map:processAndroidHostTestManifest -> Task :feature:map-terrain:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:map-terrain:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:map-terrain:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:map-terrain:exportCrossCompilationMetadataForIosSimulatorArm64ApiElements -> Task :feature:map-terrain:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:map-maplibre:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:map-terrain:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:map-terrain:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:map-maplibre:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:map-maplibre:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:map:iosSimulatorArm64CopyHierarchicalMultiplatformResources -> Task :feature:map:iosSimulatorArm64ZipMultiplatformResourcesForPublication UP-TO-DATE -> Task :feature:map-terrain:assembleIosSimulatorArm64MainResources -> Task :feature:map-terrain:iosSimulatorArm64CopyHierarchicalMultiplatformResources -> Task :feature:map-terrain:iosSimulatorArm64ZipMultiplatformResourcesForPublication UP-TO-DATE -> Task :feature:map:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:intro:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:map-maplibre:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:map-maplibre:assembleIosSimulatorArm64MainResources -> Task :feature:map-maplibre:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:map-maplibre:iosSimulatorArm64AggregateResources -> Task :feature:intro:processAndroidHostTestResources FROM-CACHE -> Task :core:resources:iosSimulatorArm64MainKlibrary -> Task :core:resources:compileTestKotlinIosSimulatorArm64 NO-SOURCE -> Task :core:resources:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:resources:iosSimulatorArm64Test SKIPPED -> Task :core:resources:allTests NO-SOURCE -> Task :feature:intro:packageAndroidHostTestForUnitTest -> Task :feature:intro:generateAndroidHostTestConfig -> Task :feature:map-maplibre:validateLocalSwiftPMDependencies -> Task :feature:map-maplibre:computeLocalPackageDependencyInputFiles -> Task :feature:map-maplibre:fingerprintSyntheticPackage -> Task :feature:map-maplibre:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:map-maplibre:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:map-maplibre:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:map-maplibre:fingerprintXcodebuildIphonesimulator -> Task :feature:map-maplibre:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:map-maplibre:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:map-maplibre:assembleIosSimulatorArm64TestResources -> Task :feature:map-maplibre:iosSimulatorArm64ProcessResources -> Task :feature:map-maplibre:checkJvmTestComposeLibrariesCompatibility -> Task :feature:map-maplibre:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:map-maplibre:assembleJvmTestResources -> Task :feature:map-maplibre:jvmTestProcessResources UP-TO-DATE -> Task :feature:map-maplibre:processJvmTestResources SKIPPED -> Task :feature:map-maplibre:koverFindJar -> Task :feature:map-maplibre:androidJar UP-TO-DATE -> Task :feature:map-maplibre:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:map-maplibre:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:map-maplibre:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:map-maplibre:mergeAndroidHostTestAssets -> Task :feature:map-maplibre:mapAndroidHostTestSourceSetPaths -> Task :feature:map-maplibre:generateAndroidHostTestResources FROM-CACHE -> Task :feature:map-maplibre:checkAndroidHostTestAarMetadata -> Task :feature:map-maplibre:mergeAndroidHostTestManifest -> Task :feature:map-maplibre:processAndroidHostTestManifest -> Task :feature:map-maplibre:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:map-maplibre:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:map-maplibre:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:map-maplibre:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:map-maplibre:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:map-terrain:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:map-terrain:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:map-terrain:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:map-terrain:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:map-terrain:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:map-terrain:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:map-terrain:compileKotlinIosSimulatorArm64 -> Task :feature:map-terrain:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:map-terrain:validateLocalSwiftPMDependencies -> Task :feature:map-terrain:computeLocalPackageDependencyInputFiles -> Task :feature:map-terrain:fingerprintSyntheticPackage -> Task :feature:map-terrain:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:map-terrain:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:map-terrain:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:map-terrain:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:map-terrain:fingerprintXcodebuildIphonesimulator -> Task :feature:map-terrain:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:map-terrain:iosSimulatorArm64AggregateResources -> Task :feature:map-terrain:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:map-terrain:iosSimulatorArm64ProcessResources UP-TO-DATE -> Task :feature:map-terrain:iosSimulatorArm64MainKlibrary -> Task :feature:map-terrain:checkJvmTestComposeLibrariesCompatibility -> Task :feature:map-terrain:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:map-terrain:assembleIosSimulatorArm64TestResources -> Task :feature:map-terrain:copyTestComposeResourcesForIosSimulatorArm64 UP-TO-DATE -> Task :feature:map-terrain:assembleJvmTestResources -> Task :feature:map-terrain:jvmTestProcessResources UP-TO-DATE -> Task :feature:map-terrain:processJvmTestResources SKIPPED -> Task :feature:map-terrain:koverFindJar -> Task :feature:map-terrain:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:map-terrain:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:map-terrain:androidJar UP-TO-DATE -> Task :feature:map-terrain:checkAndroidHostTestAarMetadata -> Task :feature:map-terrain:mapAndroidHostTestSourceSetPaths -> Task :feature:map-terrain:generateAndroidHostTestResources FROM-CACHE -> Task :feature:map-terrain:mergeAndroidHostTestAssets -> Task :feature:map-terrain:mergeAndroidHostTestManifest -> Task :feature:map-terrain:processAndroidHostTestManifest -> Task :feature:map-terrain:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:map-terrain:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:map-terrain:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:map-terrain:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:map-terrain:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:messaging:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:messaging:downloadKotlinNativeDistribution -> Task :feature:messaging:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:messaging:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:messaging:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:messaging:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:messaging:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:map:processAndroidHostTestResources FROM-CACHE -> Task :feature:map:packageAndroidHostTestForUnitTest -> Task :feature:map:generateAndroidHostTestConfig -> Task :feature:messaging:assembleIosSimulatorArm64MainResources -> Task :feature:messaging:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:messaging:validateLocalSwiftPMDependencies -> Task :feature:messaging:computeLocalPackageDependencyInputFiles -> Task :feature:messaging:fingerprintSyntheticPackage -> Task :feature:messaging:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:messaging:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:messaging:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:messaging:fingerprintXcodebuildIphonesimulator -> Task :feature:messaging:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:messaging:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:messaging:assembleIosSimulatorArm64TestResources -> Task :feature:messaging:checkJvmTestComposeLibrariesCompatibility -> Task :feature:messaging:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:messaging:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:messaging:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:messaging:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:messaging:assembleJvmTestResources -> Task :feature:messaging:jvmTestProcessResources UP-TO-DATE -> Task :feature:messaging:processJvmTestResources SKIPPED -> Task :feature:messaging:koverFindJar -> Task :feature:node:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:node:downloadKotlinNativeDistribution -> Task :feature:node:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:node:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:node:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:node:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:node:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:node:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:node:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:node:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:node:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:node:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:node:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:node:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:node:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:node:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:messaging:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:node:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:node:assembleIosSimulatorArm64MainResources -> Task :feature:node:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:messaging:iosSimulatorArm64AggregateResources -> Task :feature:node:iosSimulatorArm64AggregateResources -> Task :androidApp:mergeExtDexGoogleDebug -> Task :feature:messaging:iosSimulatorArm64ProcessResources -> Task :feature:messaging:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:node:validateLocalSwiftPMDependencies -> Task :feature:node:computeLocalPackageDependencyInputFiles -> Task :feature:node:fingerprintSyntheticPackage -> Task :feature:node:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:node:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:node:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:node:fingerprintXcodebuildIphonesimulator -> Task :feature:node:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:node:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:node:assembleIosSimulatorArm64TestResources -> Task :androidApp:mergeExtDexFdroidDebug -> Task :feature:node:iosSimulatorArm64ProcessResources -> Task :feature:node:checkJvmTestComposeLibrariesCompatibility -> Task :feature:node:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:node:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:node:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:node:koverFindJar -> Task :feature:node:assembleJvmTestResources -> Task :feature:node:androidJar UP-TO-DATE -> Task :feature:node:generateAndroidHostTestAssets UP-TO-DATE -> Task :feature:node:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:node:jvmTestProcessResources UP-TO-DATE -> Task :feature:node:processJvmTestResources SKIPPED -> Task :feature:node:checkAndroidHostTestAarMetadata -> Task :feature:node:mapAndroidHostTestSourceSetPaths -> Task :feature:node:generateAndroidHostTestResources FROM-CACHE -> Task :feature:node:mergeAndroidHostTestAssets -> Task :feature:node:mergeAndroidHostTestManifest -> Task :feature:node:processAndroidHostTestManifest -> Task :feature:node:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:node:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:node:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:node:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:node:processAndroidHostTestJavaRes NO-SOURCE -> Task :feature:settings:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:settings:downloadKotlinNativeDistribution -> Task :feature:settings:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:settings:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:settings:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:settings:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :core:navigation:compileKotlinIosSimulatorArm64 -> Task :core:navigation:iosSimulatorArm64MainKlibrary -> Task :feature:settings:assembleIosSimulatorArm64MainResources -> Task :feature:settings:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:settings:validateLocalSwiftPMDependencies -> Task :feature:settings:computeLocalPackageDependencyInputFiles -> Task :feature:settings:fingerprintSyntheticPackage -> Task :feature:settings:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:settings:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:settings:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:settings:fingerprintXcodebuildIphonesimulator -> Task :feature:settings:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:settings:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:settings:assembleIosSimulatorArm64TestResources -> Task :feature:settings:checkJvmTestComposeLibrariesCompatibility -> Task :feature:settings:convertXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForJvmAndroidTest NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForJvmAndroidTest NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForJvmAndroidTest NO-SOURCE -> Task :feature:settings:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:settings:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:settings:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:settings:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:settings:assembleJvmTestResources -> Task :feature:settings:jvmTestProcessResources UP-TO-DATE -> Task :feature:settings:processJvmTestResources SKIPPED -> Task :feature:settings:koverFindJar -> Task :feature:wifi-provision:checkIosSimulatorArm64MainComposeLibrariesCompatibility -> Task :feature:wifi-provision:downloadKotlinNativeDistribution -> Task :feature:wifi-provision:convertXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForAppleMain NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForAppleMain NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForAppleMain NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:settings:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:wifi-provision:copyNonXmlValueResourcesForIosMain NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForIosMain NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForIosMain NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForIosSimulatorArm64Main NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForIosSimulatorArm64Main NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForIosSimulatorArm64Main NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForNativeMain NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForNativeMain NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForNativeMain NO-SOURCE -> Task :feature:wifi-provision:generateActualResourceCollectorsForIosSimulatorArm64Main -> Task :feature:wifi-provision:checkIosSimulatorArm64TestComposeLibrariesCompatibility -> Task :feature:wifi-provision:convertXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForAppleTest NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForAppleTest NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForAppleTest NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForCommonTest NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForCommonTest NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForCommonTest NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForIosSimulatorArm64Test NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForIosSimulatorArm64Test NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForIosSimulatorArm64Test NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForIosTest NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForIosTest NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForIosTest NO-SOURCE -> Task :feature:wifi-provision:convertXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForNativeTest NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForNativeTest NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForNativeTest NO-SOURCE -> Task :feature:map-terrain:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:map-maplibre:mergeAndroidHostTestResources FROM-CACHE -> Task :feature:settings:iosSimulatorArm64AggregateResources -> Task :feature:wifi-provision:iosSimulatorArm64ResolveResourcesFromDependencies -> Task :feature:settings:copyTestComposeResourcesForIosSimulatorArm64 -> Task :feature:wifi-provision:assembleIosSimulatorArm64MainResources -> Task :feature:wifi-provision:iosSimulatorArm64ResolveSelfResourcesCopyHierarchicalMultiplatformResources -> Task :feature:settings:iosSimulatorArm64ProcessResources -> Task :feature:wifi-provision:validateLocalSwiftPMDependencies -> Task :feature:wifi-provision:computeLocalPackageDependencyInputFiles -> Task :feature:wifi-provision:fingerprintSyntheticPackage -> Task :feature:wifi-provision:generateSyntheticLinkageSwiftPMImportProjectForCinteropsAndLdDump SKIPPED -> Task :feature:wifi-provision:syncPersistedPackageResolvedToSynthetic SKIPPED -> Task :feature:wifi-provision:fetchSyntheticImportProjectPackages SKIPPED -> Task :feature:wifi-provision:fingerprintXcodebuildIphonesimulator -> Task :feature:wifi-provision:dumpXcodebuildArgsIphonesimulator SKIPPED -> Task :feature:wifi-provision:convertSyntheticImportProjectIntoDefFileIphonesimulator -> Task :feature:wifi-provision:assembleIosSimulatorArm64TestResources -> Task :feature:wifi-provision:checkJvmTestComposeLibrariesCompatibility -> Task :feature:wifi-provision:convertXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForJvmTest NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForJvmTest NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForJvmTest NO-SOURCE -> Task :feature:wifi-provision:assembleJvmTestResources -> Task :feature:wifi-provision:jvmTestProcessResources UP-TO-DATE -> Task :feature:wifi-provision:processJvmTestResources SKIPPED -> Task :feature:wifi-provision:koverFindJar -> Task :feature:wifi-provision:androidJar UP-TO-DATE -> Task :feature:wifi-provision:convertXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:wifi-provision:copyNonXmlValueResourcesForAndroidHostTest NO-SOURCE -> Task :feature:wifi-provision:prepareComposeResourcesTaskForAndroidHostTest NO-SOURCE -> Task :feature:wifi-provision:generateResourceAccessorsForAndroidHostTest NO-SOURCE -> Task :feature:wifi-provision:preAndroidHostTestBuild UP-TO-DATE -> Task :feature:wifi-provision:processAndroidHostTestJavaRes NO-SOURCE -> Task :core:model:preAndroidDeviceTestBuild UP-TO-DATE -> Task :core:model:generateAndroidDeviceTestResources FROM-CACHE -> Task :feature:wifi-provision:iosSimulatorArm64AggregateResources -> Task :feature:wifi-provision:iosSimulatorArm64ProcessResources -> Task :core:model:packageAndroidDeviceTestResources FROM-CACHE -> Task :core:model:processAndroidDeviceTestNavigationResources FROM-CACHE -> Task :core:model:parseAndroidDeviceTestLocalResources FROM-CACHE -> Task :feature:wifi-provision:copyTestComposeResourcesForIosSimulatorArm64 -> Task :core:model:generateAndroidDeviceTestRFile FROM-CACHE -> Task :feature:map-maplibre:processAndroidHostTestResources FROM-CACHE -> Task :feature:map-maplibre:packageAndroidHostTestForUnitTest -> Task :feature:map-maplibre:generateAndroidHostTestConfig -> Task :feature:map-terrain:processAndroidHostTestResources FROM-CACHE -> Task :feature:map-terrain:packageAndroidHostTestForUnitTest -> Task :feature:map-terrain:generateAndroidHostTestConfig -> Task :core:model:compileKotlinIosSimulatorArm64 -> Task :core:model:iosSimulatorArm64MainKlibrary -> Task :core:database:kspKotlinIosSimulatorArm64 -> Task :feature:node:mergeAndroidHostTestResources FROM-CACHE -> Task :core:model:compileAndroidDeviceTest -> Task :feature:node:processAndroidHostTestResources FROM-CACHE -> Task :feature:node:packageAndroidHostTestForUnitTest -> Task :feature:node:generateAndroidHostTestConfig -> Task :core:ble:compileKotlinIosSimulatorArm64 -> Task :core:ble:iosSimulatorArm64MainKlibrary -> Task :core:datastore:compileKotlinIosSimulatorArm64 -> Task :core:datastore:iosSimulatorArm64MainKlibrary -> Task :core:datastore:compileTestKotlinIosSimulatorArm64 -> Task :core:datastore:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:datastore:iosSimulatorArm64Test SKIPPED -> Task :core:datastore:allTests - -> Task :core:database:compileKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonMain/kotlin/org/meshtastic/core/database/DatabaseManager.kt:1193:80 This is a delicate API and its use requires care. Make sure you fully read and understand documentation of the declaration that is marked as a delicate API. - -> Task :core:database:iosSimulatorArm64MainKlibrary -> Task :core:database:kspAndroidMain -> Task :core:database:kspKotlinJvm -> Task :core:database:jvmProcessResources NO-SOURCE -> Task :core:database:processJvmMainResources SKIPPED -> Task :core:repository:compileKotlinIosSimulatorArm64 -> Task :core:repository:iosSimulatorArm64MainKlibrary -> Task :core:prefs:compileKotlinIosSimulatorArm64 -> Task :core:prefs:iosSimulatorArm64MainKlibrary -> Task :core:domain:compileKotlinIosSimulatorArm64 -> Task :core:domain:iosSimulatorArm64MainKlibrary -> Task :core:testing:compileKotlinIosSimulatorArm64 -> Task :core:prefs:compileTestKotlinIosSimulatorArm64 -> Task :core:takserver:compileKotlinIosSimulatorArm64 - -> Task :core:network:compileKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/radio/MockRadioTransport.kt:170:27 Unnecessary safe call on a non-null receiver of type 'MeshPacket'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/MQTTRepositoryImpl.kt:610:15 Unnecessary safe call on a non-null receiver of type 'ModuleConfig.MQTTConfig'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/MQTTRepositoryImpl.kt:610:35 Unnecessary safe call on a non-null receiver of type 'ModuleConfig.MQTTConfig'. - -> Task :core:database:kspTestKotlinIosSimulatorArm64 -> Task :core:ble:compileTestKotlinIosSimulatorArm64 -> Task :core:ble:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:ble:iosSimulatorArm64Test SKIPPED -> Task :core:network:iosSimulatorArm64MainKlibrary -> Task :core:navigation:compileTestKotlinIosSimulatorArm64 -> Task :core:navigation:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:navigation:iosSimulatorArm64Test SKIPPED -> Task :core:prefs:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:prefs:iosSimulatorArm64Test SKIPPED - -> Task :core:domain:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:111:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:173:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:201:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:230:17 Expression is unused. - -> Task :core:domain:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:domain:iosSimulatorArm64Test SKIPPED -> Task :core:takserver:iosSimulatorArm64MainKlibrary -> Task :core:model:compileTestKotlinIosSimulatorArm64 -> Task :core:model:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:model:iosSimulatorArm64Test SKIPPED -> Task :core:testing:iosSimulatorArm64MainKlibrary -> Task :core:repository:compileTestKotlinIosSimulatorArm64 -> Task :core:repository:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:repository:iosSimulatorArm64Test SKIPPED - -> Task :core:database:compileAndroidMain -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonMain/kotlin/org/meshtastic/core/database/DatabaseManager.kt:1193:80 This is a delicate API and its use requires care. Make sure you fully read and understand documentation of the declaration that is marked as a delicate API. - -> Task :core:database:bundleAndroidMainClassesToCompileJar -> Task :core:takserver:compileTestKotlinIosSimulatorArm64 - -> Task :core:testing:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/testing/src/commonTest/kotlin/org/meshtastic/core/testing/FakeBleServiceFailureInjectionTest.kt:129:28 Unnecessary non-null assertion (!!) on a non-null receiver of type 'ByteArray'. - -> Task :core:database:processAndroidMainJavaRes - -> Task :core:database:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:155:40 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:210:46 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:265:34 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:302:34 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:450:26 Unnecessary non-null assertion (!!) on a non-null receiver of type 'NodeWithRelations'. - -> Task :core:database:bundleLibRuntimeToDirAndroidMain -> Task :core:database:bundleAndroidMainClassesToRuntimeJar -> Task :core:database:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:database:iosSimulatorArm64Test SKIPPED -> Task :core:takserver:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:takserver:iosSimulatorArm64Test SKIPPED -> Task :core:testing:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:testing:iosSimulatorArm64Test SKIPPED -> Task :feature:map-terrain:compileTestKotlinIosSimulatorArm64 -> Task :feature:map-terrain:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:map-terrain:iosSimulatorArm64Test SKIPPED -> Task :core:repository:compileAndroidMain -> Task :core:repository:processAndroidMainJavaRes -> Task :core:repository:bundleAndroidMainClassesToCompileJar -> Task :core:repository:bundleAndroidMainClassesToRuntimeJar -> Task :core:repository:bundleLibRuntimeToDirAndroidMain - -> Task :core:database:compileKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonMain/kotlin/org/meshtastic/core/database/DatabaseManager.kt:1193:80 This is a delicate API and its use requires care. Make sure you fully read and understand documentation of the declaration that is marked as a delicate API. - -> Task :core:network:compileTestKotlinIosSimulatorArm64 -> Task :core:database:kspAndroidDeviceTest -> Task :core:database:compileJvmMainJava NO-SOURCE -> Task :core:database:jvmMainClasses -> Task :core:database:jvmJar UP-TO-DATE -> Task :core:data:compileKotlinIosSimulatorArm64 - -> Task :core:testing:compileAndroidMain -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/testing/src/androidMain/kotlin/org/meshtastic/core/testing/RobolectricBleBonding.kt:57:34 'static fun getDefaultAdapter(): BluetoothAdapter!' is deprecated. Deprecated in Java. - -> Task :core:prefs:compileAndroidMain -> Task :core:prefs:bundleAndroidMainClassesToCompileJar -> Task :core:prefs:processAndroidMainJavaRes -> Task :feature:widget:compileDebugKotlin -> Task :feature:widget:compileDebugJavaWithJavac NO-SOURCE -> Task :feature:widget:bundleLibCompileToJarDebug -> Task :core:repository:compileKotlinJvm -> Task :feature:widget:processDebugJavaRes -> Task :core:repository:compileJvmMainJava NO-SOURCE -> Task :core:repository:jvmMainClasses -> Task :core:repository:jvmJar UP-TO-DATE -> Task :core:testing:bundleAndroidMainClassesToCompileJar -> Task :feature:widget:bundleLibRuntimeToDirDebug -> Task :core:prefs:bundleLibRuntimeToDirAndroidMain -> Task :core:domain:compileAndroidMain -> Task :core:domain:bundleAndroidMainClassesToCompileJar -> Task :core:domain:processAndroidMainJavaRes -> Task :core:domain:bundleLibRuntimeToDirAndroidMain -> Task :core:takserver:compileAndroidMain -> Task :core:takserver:bundleAndroidMainClassesToCompileJar -> Task :core:takserver:processAndroidMainJavaRes - -> Task :core:network:compileAndroidMain -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/radio/MockRadioTransport.kt:170:27 Unnecessary safe call on a non-null receiver of type 'MeshPacket'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/MQTTRepositoryImpl.kt:610:15 Unnecessary safe call on a non-null receiver of type 'ModuleConfig.MQTTConfig'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/MQTTRepositoryImpl.kt:610:35 Unnecessary safe call on a non-null receiver of type 'ModuleConfig.MQTTConfig'. - -> Task :core:takserver:bundleLibRuntimeToDirAndroidMain -> Task :core:network:bundleAndroidMainClassesToCompileJar -> Task :core:network:processAndroidMainJavaRes -> Task :core:network:bundleLibRuntimeToDirAndroidMain -> Task :core:testing:compileKotlinJvm -> Task :core:testing:compileJvmMainJava NO-SOURCE -> Task :core:testing:jvmMainClasses -> Task :core:testing:jvmJar UP-TO-DATE -> Task :androidApp:mergeExtDexGoogleDebug FROM-CACHE -> Task :feature:widget:mergeDebugGeneratedProguardFiles -> Task :feature:widget:mergeDebugConsumerProguardFiles -> Task :core:domain:bundleAndroidMainClassesToRuntimeJar -> Task :core:network:bundleAndroidMainClassesToRuntimeJar -> Task :core:prefs:bundleAndroidMainClassesToRuntimeJar -> Task :core:takserver:bundleAndroidMainClassesToRuntimeJar -> Task :core:testing:bundleAndroidMainClassesToRuntimeJar -> Task :core:testing:processAndroidMainJavaRes -> Task :feature:widget:bundleLibRuntimeToJarDebug -> Task :feature:widget:mergeDebugJavaResource -> Task :feature:widget:extractDebugAnnotations -> Task :feature:widget:syncDebugLibJars FROM-CACHE -> Task :feature:widget:bundleDebugAar -> Task :feature:widget:assembleDebug -> Task :core:database:kspAndroidHostTest -> Task :core:database:kspTestKotlinJvm -> Task :core:database:copyRoomSchemas NO-SOURCE -> Task :core:data:iosSimulatorArm64MainKlibrary -> Task :core:prefs:compileKotlinJvm -> Task :core:prefs:compileJvmMainJava NO-SOURCE -> Task :core:prefs:jvmMainClasses -> Task :core:prefs:jvmJar UP-TO-DATE -> Task :feature:widget:compileDebugUnitTestKotlin -> Task :feature:widget:compileDebugUnitTestJavaWithJavac NO-SOURCE -> Task :feature:widget:processDebugUnitTestJavaRes -> Task :core:domain:compileKotlinJvm -> Task :core:domain:compileJvmMainJava NO-SOURCE -> Task :core:domain:jvmMainClasses -> Task :core:domain:jvmJar UP-TO-DATE -> Task :core:database:jvmTestProcessResources NO-SOURCE -> Task :core:database:processJvmTestResources SKIPPED -> Task :core:ble:compileTestKotlinJvm -> Task :core:ble:compileJvmTestJava NO-SOURCE -> Task :core:ble:jvmTestClasses -> Task :core:takserver:compileKotlinJvm -> Task :core:takserver:compileJvmMainJava NO-SOURCE -> Task :core:takserver:jvmMainClasses -> Task :core:takserver:jvmJar UP-TO-DATE - -> Task :core:network:compileKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/radio/MockRadioTransport.kt:170:27 Unnecessary safe call on a non-null receiver of type 'MeshPacket'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/MQTTRepositoryImpl.kt:610:15 Unnecessary safe call on a non-null receiver of type 'ModuleConfig.MQTTConfig'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/network/src/commonMain/kotlin/org/meshtastic/core/network/repository/MQTTRepositoryImpl.kt:610:35 Unnecessary safe call on a non-null receiver of type 'ModuleConfig.MQTTConfig'. - -> Task :core:ble:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ble/src/androidHostTest/kotlin/org/meshtastic/core/ble/AndroidBluetoothRepositoryBondTest.kt:149:35 'static fun getDefaultAdapter(): BluetoothAdapter!' is deprecated. Deprecated in Java. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ble/src/androidHostTest/kotlin/org/meshtastic/core/ble/AndroidBluetoothRepositoryBondTest.kt:150:54 'static fun getDefaultAdapter(): BluetoothAdapter!' is deprecated. Deprecated in Java. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ble/src/androidHostTest/kotlin/org/meshtastic/core/ble/AndroidBluetoothRepositoryBondTest.kt:404:45 'static fun getDefaultAdapter(): BluetoothAdapter!' is deprecated. Deprecated in Java. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ble/src/androidHostTest/kotlin/org/meshtastic/core/ble/AndroidBluetoothRepositoryBondTest.kt:405:35 'static fun getDefaultAdapter(): BluetoothAdapter!' is deprecated. Deprecated in Java. - -> Task :core:network:compileJvmMainJava NO-SOURCE -> Task :core:network:jvmMainClasses -> Task :core:network:jvmJar UP-TO-DATE -> Task :core:data:compileAndroidMain - -> Task :core:domain:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:111:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:173:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:201:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:230:17 Expression is unused. - -> Task :core:data:processAndroidMainJavaRes - -> Task :core:ble:jvmTest - -BleScanStartExceptionTest[jvm] > scan-start failures are never reported even when logged at error()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > isSessionFatalBleException returns false for unrelated exceptions()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > RuntimeException returns null()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > unrelated exception returns null()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > isSessionFatalBleException returns true for peer-disconnect and establishment-failure codes()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > isSessionFatalBleException returns true for fatal GATT status codes()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > isSessionFatalBleException returns true for NotConnectedException()[jvm] PASSED - -BleScanStartExceptionTest[jvm] > labels are unique and low cardinality()[jvm] PASSED - -BleScanStartExceptionTest[jvm] > kable unmet-requirement reasons map onto scan-start reasons()[jvm] PASSED - -BleScanStartExceptionTest[jvm] > every kable unmet-requirement reason is mapped()[jvm] PASSED - -BleScanStartExceptionTest[jvm] > every scan-start failure is an expected condition()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > GattStatusException maps to non-permanent with status code()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > isSessionFatalBleException returns false for non-fatal cause chain()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > isSessionFatalBleException returns false for transient GATT status()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > NotConnectedException maps to non-permanent without status code()[jvm] PASSED - -BleExceptionClassifierTest[jvm] > isSessionFatalBleException traverses cause chain for wrapped exceptions()[jvm] PASSED - -DisconnectReasonTest[jvm] > Disconnected default reason is Unknown()[jvm] PASSED - -DisconnectReasonTest[jvm] > data object reasons are singletons()[jvm] PASSED - -DisconnectReasonTest[jvm] > PlatformSpecific toString includes status code()[jvm] PASSED - -DisconnectReasonTest[jvm] > Disconnected preserves explicit reason()[jvm] PASSED - -KableStateMappingTest[jvm] > CentralDisconnected maps to LocalDisconnect()[jvm] PASSED - -KableStateMappingTest[jvm] > ConnectionLimitReached maps to ConnectionFailed()[jvm] PASSED - -KableBleConnectionTest[jvm] > timeout terminates scan()[jvm] PASSED - -KableBleConnectionTest[jvm] > service uuid wins over address when the platform cannot filter by address()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan wraps Android scanner registration failure()[jvm] PASSED - -KableBleConnectionTest[jvm] > service uuid filter is applied()[jvm] PASSED - -BleRetryTest[jvm] > retryBleOperation_retries_on_exception_and_succeeds()[jvm] PASSED - -BleRetryTest[jvm] > retryBleOperation_rechecks_authority_after_backoff_before_retrying()[jvm] PASSED - -BleRetryTest[jvm] > retryBleOperation_does_not_retry_CancellationException()[jvm] PASSED - -BleRetryTest[jvm] > retryBleOperation_stops_after_failure_when_retry_authority_is_revoked()[jvm] PASSED - -KableMeshtasticRadioProfileTest[jvm] > fromRadio emits packets from FROMRADIO reads()[jvm] PASSED - -KableMeshtasticRadioProfileTest[jvm] > sendToRadio writes to TORADIO and triggers drain()[jvm] PASSED - -KableMeshtasticRadioProfileTest[jvm] > requestDrain triggers additional FROMRADIO reads()[jvm] PASSED - -BleRetryTest[jvm] > retryBleOperation_throws_exception_after_max_attempts()[jvm] PASSED - -BleRetryTest[jvm] > retryBleOperation_returns_immediately_on_success()[jvm] PASSED - -KableMeshtasticRadioProfileTest[jvm] > awaitSubscriptionReady completes when using FakeBleService()[jvm] PASSED - -KableMeshtasticRadioProfileTest[jvm] > MeshtasticRadioProfile default awaitSubscriptionReady returns immediately()[jvm] PASSED - -KableStateMappingTest[jvm] > Disconnected after connecting started maps with reason()[jvm] PASSED - -KableStateMappingTest[jvm] > Failed maps to ConnectionFailed()[jvm] PASSED - -KableStateMappingTest[jvm] > L2CapFailure maps to ConnectionFailed()[jvm] PASSED - -KableStateMappingTest[jvm] > Unknown status maps to PlatformSpecific with code()[jvm] PASSED - -KableStateMappingTest[jvm] > null status maps to Unknown()[jvm] PASSED - -KableStateMappingTest[jvm] > Disconnecting maps to BleConnectionState Disconnecting()[jvm] PASSED - -KableMeshtasticRadioProfileExceptionTest[jvm] > fromRadio propagates NotConnectedException to collector()[jvm] PASSED - -KableMeshtasticRadioProfileExceptionTest[jvm] > logRadio propagates fatal GattStatusException from observation()[jvm] PASSED - -KableMeshtasticRadioProfileExceptionTest[jvm] > fromRadio propagates CancellationException()[jvm] PASSED - -KableMeshtasticRadioProfileExceptionTest[jvm] > logRadio propagates NotConnectedException from observation()[jvm] PASSED - -> Task :androidApp:mergeExtDexFdroidDebug FROM-CACHE -> Task :core:data:bundleAndroidMainClassesToRuntimeJar -> Task :core:domain:compileJvmTestJava NO-SOURCE -> Task :core:domain:jvmTestClasses - -> Task :core:database:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:155:40 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:210:46 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:265:34 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:302:34 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:450:26 Unnecessary non-null assertion (!!) on a non-null receiver of type 'NodeWithRelations'. - -> Task :core:data:bundleAndroidMainClassesToCompileJar - -> Task :core:ble:jvmTest - -KableMeshtasticRadioProfileExceptionTest[jvm] > awaitSubscriptionReady throws promptly when FROMNUM observe fails before readiness()[jvm] PASSED - -KableMeshtasticRadioProfileExceptionTest[jvm] > fromRadio suppresses transient GattStatusException and continues()[jvm] PASSED - -KableMeshtasticRadioProfileExceptionTest[jvm] > fromRadio propagates fatal GattStatusException to collector()[jvm] PASSED - -KableStateMappingTest[jvm] > Connected maps to BleConnectionState Connected()[jvm] PASSED - -KableStateMappingTest[jvm] > PeripheralDisconnected maps to RemoteDisconnect()[jvm] PASSED - -KableStateMappingTest[jvm] > Connecting maps to BleConnectionState Connecting()[jvm] PASSED - -KableStateMappingTest[jvm] > Disconnected before connecting started returns null()[jvm] PASSED - -KableStateMappingTest[jvm] > Cancelled maps to Cancelled()[jvm] PASSED - -KableStateMappingTest[jvm] > LinkManagerProtocolTimeout maps to Timeout()[jvm] PASSED - -KableStateMappingTest[jvm] > Timeout maps to Timeout()[jvm] PASSED - -KableStateMappingTest[jvm] > EncryptionTimedOut maps to EncryptionFailed()[jvm] PASSED - -KableStateMappingTest[jvm] > UnknownDevice maps to ConnectionFailed()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan emits ble device for discovered advertisement()[jvm] PASSED - -KableBleConnectionTest[jvm] > address filter is used natively only where the platform supports it()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan reserves one platform start before collecting advertisements()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan without an address emits every advertisement()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan preserves unrelated illegal state failure()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan wraps missing scan permission failure()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan wraps Android scanning too frequently failure()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan narrows to the requested address regardless of the native filter()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan wraps nested scanner registration failure()[jvm] PASSED - -KableBleConnectionTest[jvm] > expired timeout does not reserve a platform start()[jvm] PASSED - -KableBleConnectionTest[jvm] > scan matches the requested address case-insensitively()[jvm] PASSED - -MeshtasticBleDeviceRssiTest[jvm] > advertised zero rssi is reported()[jvm] PASSED - -MeshtasticBleDeviceRssiTest[jvm] > bonded-only device without an advertisement reports no rssi()[jvm] PASSED - -> Task :core:database:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:155:40 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:210:46 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:265:34 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:302:34 Unnecessary safe call on a non-null receiver of type 'NodeEntity'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonNodeInfoDaoTest.kt:450:26 Unnecessary non-null assertion (!!) on a non-null receiver of type 'NodeWithRelations'. - -> Task :core:database:compileJvmTestJava NO-SOURCE -> Task :core:database:jvmTestClasses - -> Task :core:ble:testAndroidHostTest - -AndroidBleScanStartLimiterTest > reservation succeeds after oldest scan leaves quota window PASSED - -AndroidBleScanStartLimiterTest > all scanner consumers share one process quota PASSED - -AndroidBleScanStartLimiterTest > sixth scan inside Android quota window is rejected PASSED - -AndroidBleScanStartLimiterTest > concurrent callers cannot exceed quota PASSED - -DisconnectReasonTest > Disconnected default reason is Unknown PASSED - -DisconnectReasonTest > data object reasons are singletons PASSED - -DisconnectReasonTest > PlatformSpecific toString includes status code PASSED - -DisconnectReasonTest > Disconnected preserves explicit reason PASSED - -> Task :core:data:bundleLibRuntimeToDirAndroidMain - -> Task :core:ble:testAndroidHostTest - -MeshtasticBleDeviceRssiTest > advertised zero rssi is reported PASSED - -MeshtasticBleDeviceRssiTest > bonded-only device without an advertisement reports no rssi PASSED - -> Task :core:data:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:470:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:479:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:486:17 Expression is unused. - -> Task :core:data:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:data:iosSimulatorArm64Test SKIPPED - -> Task :feature:widget:testDebugUnitTest - -RefreshLocalStatsActionTest > local node loss during request is handled as best effort PASSED - -RefreshLocalStatsActionTest > refresh issues no request when the node number is unknown PASSED - -RefreshLocalStatsActionTest > queue rejection during request is handled as best effort PASSED - -RefreshLocalStatsActionTest > unexpected failures are not swallowed PASSED - -RefreshLocalStatsActionTest > successful request runs exactly once PASSED - -RefreshLocalStatsActionTest > refresh attempts both telemetry requests after the first is rejected PASSED - -RefreshLocalStatsActionTest > cancellation is not swallowed PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:ble:testAndroidHostTest - -BleExceptionClassifierTest > isSessionFatalBleException returns false for unrelated exceptions PASSED - -BleExceptionClassifierTest > RuntimeException returns null PASSED - -BleExceptionClassifierTest > unrelated exception returns null PASSED - -BleExceptionClassifierTest > isSessionFatalBleException returns true for peer-disconnect and establishment-failure codes PASSED - -BleExceptionClassifierTest > isSessionFatalBleException returns true for fatal GATT status codes PASSED - -BleExceptionClassifierTest > isSessionFatalBleException returns true for NotConnectedException PASSED - -BleExceptionClassifierTest > GattStatusException maps to non-permanent with status code PASSED - -BleExceptionClassifierTest > isSessionFatalBleException returns false for non-fatal cause chain PASSED - -BleExceptionClassifierTest > isSessionFatalBleException returns false for transient GATT status PASSED - -BleExceptionClassifierTest > NotConnectedException maps to non-permanent without status code PASSED - -BleExceptionClassifierTest > isSessionFatalBleException traverses cause chain for wrapped exceptions PASSED - -BleScanStartExceptionTest > scan-start failures are never reported even when logged at error PASSED - -BleScanStartExceptionTest > labels are unique and low cardinality PASSED - -BleScanStartExceptionTest > kable unmet-requirement reasons map onto scan-start reasons PASSED - -BleScanStartExceptionTest > every kable unmet-requirement reason is mapped PASSED - -BleScanStartExceptionTest > every scan-start failure is an expected condition PASSED - -KableStateMappingTest > CentralDisconnected maps to LocalDisconnect PASSED - -KableStateMappingTest > ConnectionLimitReached maps to ConnectionFailed PASSED - -KableMeshtasticRadioProfileExceptionTest > fromRadio propagates NotConnectedException to collector PASSED - -KableMeshtasticRadioProfileExceptionTest > logRadio propagates fatal GattStatusException from observation PASSED - -KableMeshtasticRadioProfileExceptionTest > fromRadio propagates CancellationException PASSED - -KableMeshtasticRadioProfileExceptionTest > logRadio propagates NotConnectedException from observation PASSED - -KableMeshtasticRadioProfileExceptionTest > awaitSubscriptionReady throws promptly when FROMNUM observe fails before readiness PASSED - -KableMeshtasticRadioProfileExceptionTest > fromRadio suppresses transient GattStatusException and continues PASSED - -KableMeshtasticRadioProfileExceptionTest > fromRadio propagates fatal GattStatusException to collector PASSED - -BleRetryTest > retryBleOperation_retries_on_exception_and_succeeds PASSED - -BleRetryTest > retryBleOperation_rechecks_authority_after_backoff_before_retrying PASSED - -BleRetryTest > retryBleOperation_does_not_retry_CancellationException PASSED - -BleRetryTest > retryBleOperation_stops_after_failure_when_retry_authority_is_revoked PASSED - -BleRetryTest > retryBleOperation_throws_exception_after_max_attempts PASSED - -BleRetryTest > retryBleOperation_returns_immediately_on_success PASSED - -KableMeshtasticRadioProfileTest > fromRadio emits packets from FROMRADIO reads PASSED - -KableMeshtasticRadioProfileTest > sendToRadio writes to TORADIO and triggers drain PASSED - -KableMeshtasticRadioProfileTest > requestDrain triggers additional FROMRADIO reads PASSED - -KableMeshtasticRadioProfileTest > awaitSubscriptionReady completes when using FakeBleService PASSED - -KableMeshtasticRadioProfileTest > MeshtasticRadioProfile default awaitSubscriptionReady returns immediately PASSED - -> Task :core:service:compileAndroidMain -> Task :core:service:bundleAndroidMainClassesToCompileJar -> Task :core:data:compileKotlinJvm -> Task :core:service:processAndroidMainJavaRes -> Task :core:service:bundleLibRuntimeToDirAndroidMain - -> Task :core:ble:testAndroidHostTest - -KableStateMappingTest > Disconnected after connecting started maps with reason PASSED - -KableStateMappingTest > Failed maps to ConnectionFailed PASSED - -KableStateMappingTest > L2CapFailure maps to ConnectionFailed PASSED - -KableStateMappingTest > Unknown status maps to PlatformSpecific with code PASSED - -KableStateMappingTest > null status maps to Unknown PASSED - -KableStateMappingTest > Disconnecting maps to BleConnectionState Disconnecting PASSED - -KableStateMappingTest > Connected maps to BleConnectionState Connected PASSED - -KableStateMappingTest > PeripheralDisconnected maps to RemoteDisconnect PASSED - -KableStateMappingTest > Connecting maps to BleConnectionState Connecting PASSED - -KableStateMappingTest > Disconnected before connecting started returns null PASSED - -KableStateMappingTest > Cancelled maps to Cancelled PASSED - -KableStateMappingTest > LinkManagerProtocolTimeout maps to Timeout PASSED - -KableStateMappingTest > Timeout maps to Timeout PASSED - -KableStateMappingTest > EncryptionTimedOut maps to EncryptionFailed PASSED - -KableStateMappingTest > UnknownDevice maps to ConnectionFailed PASSED - -> Task :core:model:compileTestKotlinJvm - -> Task :core:domain:jvmTest - -AdminActionsUseCaseTest[jvm] > factoryReset local node clears local NodeDB()[jvm] PASSED - -AdminActionsUseCaseTest[jvm] > shutdown calls radioController()[jvm] PASSED - -AdminActionsUseCaseTest[jvm] > nodedbReset local node clears local NodeDB with preserveFavorites()[jvm] PASSED - -AdminActionsUseCaseTest[jvm] > reboot calls radioController()[jvm] PASSED - -ExportProfileUseCaseTest[jvm] > invoke writes encoded profile to output stream()[jvm] PASSED - -SetMeshLogSettingsUseCaseTest[jvm] > setRetentionDays one hour keeps the last hour instead of every log()[jvm] PASSED - -SetMeshLogSettingsUseCaseTest[jvm] > setRetentionDays never keeps every log()[jvm] PASSED - -SetMeshLogSettingsUseCaseTest[jvm] > setLoggingEnabled false deletes all logs()[jvm] PASSED - -SetMeshLogSettingsUseCaseTest[jvm] > setRetentionDays clamps value and deletes old logs()[jvm] PASSED - -SetMeshLogSettingsUseCaseTest[jvm] > setLoggingEnabled true deletes logs older than retention()[jvm] PASSED - -SetMeshLogSettingsUseCaseTest[jvm] > setLoggingEnabled true trims to the one hour sentinel()[jvm] PASSED - -> Task :core:data:compileJvmMainJava NO-SOURCE -> Task :core:data:jvmMainClasses -> Task :core:data:jvmJar UP-TO-DATE - -> Task :core:domain:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:111:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:173:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:201:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/domain/src/commonTest/kotlin/org/meshtastic/core/domain/usecase/session/EnsureRemoteAdminSessionUseCaseTest.kt:230:17 Expression is unused. - -> Task :core:domain:jvmTest - -EnsureRemoteAdminSessionUseCaseTest[jvm] > canceling one caller keeps the shared ensure alive for another caller()[jvm] PASSED - -EnsureRemoteAdminSessionUseCaseTest[jvm] > accepts a valid refresh arriving after the former ten second deadline()[jvm] PASSED - -EnsureRemoteAdminSessionUseCaseTest[jvm] > completed ensure is not reused by a later caller()[jvm] PASSED - -EnsureRemoteAdminSessionUseCaseTest[jvm] > departed ensure is not reused after reconnect()[jvm] PASSED - -EnsureRemoteAdminSessionUseCaseTest[jvm] > dispatches metadata request and returns Refreshed when refresh flow emits()[jvm] PASSED - -EnsureRemoteAdminSessionUseCaseTest[jvm] > returns Disconnected without dispatching when not connected()[jvm] PASSED - -EnsureRemoteAdminSessionUseCaseTest[jvm] > returns AlreadyActive without dispatching when status already Active()[jvm] PASSED - -EnsureRemoteAdminSessionUseCaseTest[jvm] > returns Timeout when no refresh arrives within deadline()[jvm] PASSED - -> Task :core:service:bundleAndroidMainClassesToRuntimeJar - -> Task :core:domain:jvmTest - -CleanNodeDatabaseUseCaseTest[jvm] > getNodesToClean returns nodes older than threshold()[jvm] PASSED - -CleanNodeDatabaseUseCaseTest[jvm] > getNodesToClean filters out favorites and ignored()[jvm] PASSED - -CleanNodeDatabaseUseCaseTest[jvm] > cleanNodes deletes from repo and controller()[jvm] PASSED - -ImportProfileUseCaseTest[jvm] > invoke with valid data returns profile()[jvm] PASSED - -ImportProfileUseCaseTest[jvm] > invoke with invalid data returns failure()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with canned messages response returns canned messages result()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with owner response returns owner result()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > routing response without error reason is not treated as an error()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > routing ack from a node other than the addressed one is reported instead of dropped()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with unexpected sender returns error()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with channel response returns channel result()[jvm] PASSED - -ImportSecurityConfigUseCaseTest[jvm] > invoke decodes a valid backup into a SecurityConfig()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with routing error returns error result()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with metadata response returns metadata result()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > getCannedMessages calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setConfig calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > getConfig calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > getChannel calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setModuleConfig calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setRingtone calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > getModuleConfig calls radioController()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with module config response returns module config result()[jvm] PASSED - -ProcessRadioResponseUseCaseTest[jvm] > invoke with config response returns config result()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setFixedPosition calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > getRingtone calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setRemoteChannel calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > removeFixedPosition calls radioController with zero position()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setCannedMessages calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > getOwner calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setOwner calls radioController()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > setHamMode calls radioController and returns packetId()[jvm] PASSED - -RadioConfigUseCaseTest[jvm] > getConfig invokes onRequestId with the packet id before issuing the send()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > nodes are sorted most recently heard first()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > empty database exports a valid document()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > zero readings are real and survive the export()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > absent readings are omitted rather than exported as sentinels()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > lightning readings export from environment metrics()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > pm status flags export raw and survive at zero()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > soil water metrics export with absent fields omitted()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > node numbers export as unsigned()[jvm] PASSED - -ExportNodeDatabaseUseCaseTest[jvm] > node fields map through user position metrics and key()[jvm] PASSED - -IsOtaCapableUseCaseTest[jvm] > invoke returns false when node is null()[jvm] PASSED - -IsOtaCapableUseCaseTest[jvm] > invoke returns true when requires Dfu and actively supported()[jvm] PASSED - -IsOtaCapableUseCaseTest[jvm] > invoke returns false when hardware model is UNSET()[jvm] PASSED - -IsOtaCapableUseCaseTest[jvm] > invoke returns false when ota not capable()[jvm] PASSED - -IsOtaCapableUseCaseTest[jvm] > invoke returns false when disconnected()[jvm] PASSED - -IsOtaCapableUseCaseTest[jvm] > invoke returns false when address is not ota capable()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:database:jvmTest - -BuildDbNameTest[jvm] > BLE MAC address hashes consistently regardless of punctuation or case()[jvm] PASSED - -BuildDbNameTest[jvm] > no-device sentinels all resolve to DEFAULT_DB_NAME()[jvm] PASSED - -BuildDbNameTest[jvm] > non-default real device address does not equal DEFAULT_DB_NAME()[jvm] PASSED - -DatabaseManagerEvictionTest[jvm] > never evicts active even if oldest()[jvm] PASSED - -DatabaseManagerEvictionTest[jvm] > extracts both sides of every persisted pending route()[jvm] PASSED - -DatabaseManagerEvictionTest[jvm] > evicts two oldest when over limit by two()[jvm] PASSED - -DatabaseManagerEvictionTest[jvm] > pending route endpoints are excluded from eviction candidates()[jvm] PASSED - -DatabaseManagerEvictionTest[jvm] > does not evict when count equals limit()[jvm] PASSED - -DatabaseManagerEvictionTest[jvm] > excludes legacy and default from accounting()[jvm] PASSED - -BusyTimeoutSQLiteDriverTest[jvm] > rejectsNonPositiveTimeouts()[jvm] PASSED - -BusyTimeoutSQLiteDriverTest[jvm] > appliesBusyTimeoutToEveryOpenedConnection()[jvm] PASSED - -BusyTimeoutSQLiteDriverTest[jvm] > waitsOutACompetingWriteLockInsteadOfFailingInstantly()[jvm] PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :feature:widget:testDebugUnitTest - -LocalStatsWidgetContentTest > narrow layout still renders content rather than collapsing PASSED - -LocalStatsWidgetContentTest > connected content renders node identity and footer counts PASSED - -LocalStatsWidgetContentTest > refresh affordance is present and labelled for accessibility PASSED - -LocalStatsWidgetContentTest > disconnected content renders the translated disconnected status PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:domain:jvmTest - -IsOtaCapableUseCaseTest[jvm] > invoke returns true when ota capable()[jvm] PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :feature:widget:test -> Task :core:model:compileJvmTestJava NO-SOURCE -> Task :core:model:jvmTestClasses -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:database:jvmTest - -DatabaseManagerBackfillTest[jvm] > staleScheduledBackfillSkipsWorkAndBalancesAdmission()[jvm] PASSED - -ConvertersTest[jvm] > string list converter round trips and handles null()[jvm] PASSED - -DatabaseManagerBackfillTest[jvm] > activeBackfillDelaysAssociationUntilItFinishes()[jvm] PASSED - -DatabaseManagerBackfillTest[jvm] > cancellationWhileBackfillWaitsAtGateLeavesNoWriterLeak()[jvm] PASSED - -DatabaseManagerRetirementTest[jvm] > sessionRolloverDuringMergeRollsBackAssociationAndKeepsSourceActive()[jvm] PASSED - -DatabaseManagerRetirementTest[jvm] > sourcePoolStaysOpenAfterLogicalRetirement()[jvm] PASSED - -DatabaseManagerRetirementTest[jvm] > shutdownDoesNotDeleteRetiredFileWhenItsPoolFailsToClose()[jvm] PASSED - -DatabaseManagerRetirementTest[jvm] > persistedRetirementIsReclaimedOnceBeforeFirstDeviceDatabaseOpen()[jvm] PASSED - -DatabaseManagerRetirementTest[jvm] > cachedPoolRemainsTrackedWhenCloseFails()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > timeoutRecoveryCannotReopenWhileClosing()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > shutdownRetainsOwnershipWhenAssociationIsBlockedFromStarting()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > closeBoundsNoncancellableManagerJobWithoutClosingOwnedPools()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > installTrustsDeviceReportedKeyChangeForSelf()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > singleUpsertNeverMigratesEvenForCanonicalNum()[jvm] PASSED - -ConvertersTest[jvm] > empty proto messages round trip to empty defaults()[jvm] PASSED - -ConvertersTest[jvm] > user converter round trips()[jvm] PASSED - -ConvertersTest[jvm] > from radio converter round trips()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > renumberMigratesHistoryAndLocalState()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > nonCanonicalKeyConflictKeepsExistingIdentity()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > recurringFlowPoolRecoveryNeverClosesDetachedPoolsBeforeShutdown()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > renumberDropsStaleSelfListedInSameBatch()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > differentHardwareVetoesHistoryMigration()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > sameNumInstallLeavesEverythingInPlace()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > closeUnregistersAcceptedLazyManagerJobCancelledBeforeBodyStarts()[jvm] PASSED - -ConvertersTest[jvm] > data packet string converter round trips()[jvm] PASSED - -ConvertersTest[jvm] > position converter round trips()[jvm] PASSED - -ConvertersTest[jvm] > paxcount converter round trips()[jvm] PASSED - -ConvertersTest[jvm] > byte string converter round trips and handles null()[jvm] PASSED - -ConvertersTest[jvm] > empty byte arrays round trip as empty byte strings()[jvm] PASSED - -ConvertersTest[jvm] > message status converter round trips and defaults unknown()[jvm] PASSED - -ConvertersTest[jvm] > telemetry converter round trips()[jvm] PASSED - -ConvertersTest[jvm] > device metadata converter round trips()[jvm] PASSED - -ConvertersTest[jvm] > empty byte arrays decode to empty proto messages()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > sameHardwareEraseMigratesAcrossKeyChange()[jvm] PASSED - -DatabaseManagerPoolTimeoutClassifierTest[jvm] > rejects plain database locked without acquire timeout()[jvm] PASSED - -DatabaseManagerPoolTimeoutClassifierTest[jvm] > rejects generic connection locked()[jvm] PASSED - -DatabaseManagerPoolTimeoutClassifierTest[jvm] > rejects non-DB timeout()[jvm] PASSED - -DatabaseManagerPoolTimeoutClassifierTest[jvm] > matches when wrapped in a causal chain()[jvm] PASSED - -DatabaseManagerPoolTimeoutClassifierTest[jvm] > matches Room reader connection acquire timeout()[jvm] PASSED - -DatabaseManagerPoolTimeoutClassifierTest[jvm] > matches Room writer connection acquire timeout()[jvm] PASSED - -NodeIdentityMigrationDaoJvmTest[jvm] > canonicalNeighborRenumberMigratesInInstallBatch()[jvm] PASSED - -PowerChannelLabelsDaoTest[jvm] > upsertWithoutLabelsPreservesExisting()[jvm] PASSED - -PowerChannelLabelsDaoTest[jvm] > setterRoundTripsThroughConverter()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > silentlyStalledFlowIsRecoveredWithoutAnyThrownFailure()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > flowPoolTimeoutReopensAndRelatchesWithoutRepeatingTheFailedPool()[jvm] PASSED - -PowerChannelLabelsDaoTest[jvm] > updateMergesFreshFromDbSoChannelsDontClobber()[jvm] PASSED - -PowerChannelLabelsDaoTest[jvm] > updatePadsTrimsAndDropsTrailingBlanks()[jvm] PASSED - -DeviceHardwareEntityMakerTest[jvm] > an entry without the key reads as not maker()[jvm] PASSED - -DeviceHardwareEntityMakerTest[jvm] > isMaker survives the network to entity to model round trip()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > flowPoolRecoveryStopsAfterIntermittentFailuresFillTheRateWindow()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > timeoutRecoveryReopensTheLazyDefaultPool()[jvm] PASSED - -DatabaseManagerPendingRouteRecoveryJvmTest[jvm] > newManagerRepairsCommittedPendingRouteBeforePublishing()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:database:testAndroidHostTest - -BuildDbNameTest > BLE MAC address hashes consistently regardless of punctuation or case PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:database:jvmTest - -DatabaseManagerShutdownTest[jvm] > shutdownRacingMergeFinalizationDeletesRetiredSourceExactlyOnce()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > closeBeforeCurrentDbInitializationDoesNotBuildDefaultPool()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > concurrentCloseCallsCleanEachPoolOnce()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > closingRejectsNewWritersSwitchesAndAssociations()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > quietFlowAfterAFirstEmissionIsNotTreatedAsStalled()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > timeoutRecoveryFailureDoesNotMaskOriginalCallbackFailure()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > shutdownWaitsForPausedAssociationToFinalizeAndRetiresOnce()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > shutdownCannotMissDefaultPoolInitializationBeforePublication()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > closeIsIdempotentAndCleansRetiredSources()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > closeWaitsForAdmittedWriterBeforeClosingPools()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > flowPoolRecoveryStopsAfterConsecutiveReplacementPoolsFail()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > closeBoundsWedgedWriterDrainWithoutClosingReachablePools()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > flowPoolRecoveryResumesAfterTheRateWindowClears()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > detachedReopenedPoolIsClosedDuringOrderlyShutdown()[jvm] PASSED - -DatabaseManagerWedgedWriteTest[jvm] > wedgedWithDbCallbackDoesNotStallLaterCalls()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > flowRecoveryDoesNotSwallowUnrelatedDatabaseFailures()[jvm] PASSED - -DatabaseManagerShutdownTest[jvm] > flowPoolTimeoutRetainsItsOriginalFailureAfterShutdownClearsCurrentPublication()[jvm] PASSED - -DatabaseManagerWedgedWriteTest[jvm] > writesFailFastWhileWedgeRecoveryBudgetIsSpent()[jvm] PASSED - -DatabaseManagerWedgedWriteTest[jvm] > aSuspendedCallbackDoesNotSerializeOtherCallsOnTheSamePool()[jvm] PASSED - -DatabaseManagerWedgedWriteTest[jvm] > abandonedWithDbCallbackIsNeverCancelledOrReplayed()[jvm] PASSED - -DbFlowRecoveryTest[jvm] > stalledFlowIsRestarted()[jvm] PASSED - -DatabaseManagerWedgedWriteTest[jvm] > writesRecoverAfterTheWedgeWindowClears()[jvm] PASSED - -DeviceIdentityTest[jvm] > unclaimedDeviceResolvesNothing()[jvm] PASSED - -DbFlowRecoveryTest[jvm] > closedPoolFailureIsNotRetried()[jvm] PASSED - -DeviceIdentityTest[jvm] > renumberedDeviceStillResolvesItsClaimViaDeviceKey()[jvm] PASSED - -DeviceIdentityTest[jvm] > deviceClaimIsPreferredOverNodeClaim()[jvm] PASSED - -DeviceIdentityTest[jvm] > validDeviceIdRejectsAbsentBlankPlaceholderAndNonHexForms()[jvm] PASSED - -DeviceIdentityTest[jvm] > nodeClaimIsTheFallback()[jvm] PASSED - -DeviceIdentityTest[jvm] > deviceKeyIsDeterministicAndDistinctPerDevice()[jvm] PASSED - -DbFlowRecoveryTest[jvm] > unrelatedFailuresPropagate()[jvm] PASSED - -DbFlowRecoveryTest[jvm] > backoffResetsAfterASuccessfulEmission()[jvm] PASSED - -DbFlowRecoveryTest[jvm] > poolTimeoutRestartsTheUpstreamAndEmitsAfterRecovery()[jvm] PASSED - -NodeInfoDaoDirectFilterTest[jvm] > the filter off keeps every node()[jvm] PASSED - -NodeInfoDaoDirectFilterTest[jvm] > the direct filter keeps a node our radio heard at zero hops()[jvm] PASSED - -NodeInfoDaoDirectFilterTest[jvm] > the direct filter drops relayed nodes and nodes never measured()[jvm] PASSED - -NodeInfoDaoDirectFilterTest[jvm] > the connected radio survives the direct filter()[jvm] PASSED - -NodeInfoDaoDirectFilterTest[jvm] > the direct filter drops an mqtt node reporting zero hops()[jvm] PASSED - -ReactionKeyTest[jvm] > pre-fix raw-channel inbound PKI reaction remains visible()[jvm] PASSED - -ReactionKeyTest[jvm] > wrong non-PKI reaction channel remains excluded()[jvm] PASSED - -ReactionKeyTest[jvm] > distinct users and distinct emoji stay distinct()[jvm] PASSED - -ReactionKeyTest[jvm] > another node's reactions are excluded entirely()[jvm] PASSED - -ReactionKeyTest[jvm] > normalized inbound PKI reaction attaches to its direct-message parent()[jvm] PASSED - -ReactionKeyTest[jvm] > a lone legacy reaction is still shown()[jvm] PASSED - -ReactionKeyTest[jvm] > same reply id reaction attaches only to its conversation()[jvm] PASSED - -ReactionKeyTest[jvm] > a legacy reaction and its current-node twin collapse to one entry()[jvm] PASSED - -ReactionKeyTest[jvm] > the current-node row wins so its delivery status survives()[jvm] PASSED - -NodeInfoDaoAtomicDeleteTest[jvm] > deleteNodeAndMetadataRemovesBothRows()[jvm] PASSED - -NodeInfoDaoAtomicDeleteTest[jvm] > deleteNodesAndMetadataChunksPastBindLimit()[jvm] PASSED - -NodeInfoDaoAtomicDeleteTest[jvm] > deleteNodeAndMetadataRollsBackWhenMetadataDeleteFails()[jvm] PASSED - -DatabaseManagerWriterAdmissionTest[jvm] > closedPoolFailureAfterSwitchDoesNotReplayCallback()[jvm] PASSED - -DatabaseManagerWriterAdmissionTest[jvm] > successfulMergeReleasesBlockedWriterOntoDestination()[jvm] PASSED - -DatabaseManagerWriterAdmissionTest[jvm] > writerCountsAndDrainWaitersRemainBalanced()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:data:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:470:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:479:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:486:17 Expression is unused. - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:database:testAndroidHostTest - -BuildDbNameTest > no-device sentinels all resolve to DEFAULT_DB_NAME PASSED - -BuildDbNameTest > non-default real device address does not equal DEFAULT_DB_NAME PASSED - -DatabaseManagerPoolTimeoutClassifierTest > rejects plain database locked without acquire timeout PASSED - -DatabaseManagerPoolTimeoutClassifierTest > rejects generic connection locked PASSED - -DatabaseManagerPoolTimeoutClassifierTest > rejects non-DB timeout PASSED - -DatabaseManagerPoolTimeoutClassifierTest > matches when wrapped in a causal chain PASSED - -DatabaseManagerPoolTimeoutClassifierTest > matches Room reader connection acquire timeout PASSED - -DatabaseManagerPoolTimeoutClassifierTest > matches Room writer connection acquire timeout PASSED - -ConvertersTest > string list converter round trips and handles null PASSED - -ConvertersTest > empty proto messages round trip to empty defaults PASSED - -ConvertersTest > user converter round trips PASSED - -ConvertersTest > from radio converter round trips PASSED - -ConvertersTest > data packet string converter round trips PASSED - -ConvertersTest > position converter round trips PASSED - -ConvertersTest > paxcount converter round trips PASSED - -ConvertersTest > byte string converter round trips and handles null PASSED - -ConvertersTest > empty byte arrays round trip as empty byte strings PASSED - -ConvertersTest > message status converter round trips and defaults unknown PASSED - -ConvertersTest > telemetry converter round trips PASSED - -ConvertersTest > device metadata converter round trips PASSED - -ConvertersTest > empty byte arrays decode to empty proto messages PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:database:jvmTest - -DatabaseManagerWriterAdmissionTest[jvm] > writerAdmissionGateTimeoutIsBoundedAndBalanced()[jvm] PASSED - -DatabaseManagerWriterAdmissionTest[jvm] > cancellationReleasesAdmissionGateOntoSource()[jvm] PASSED - -DatabaseManagerWriterAdmissionTest[jvm] > preCommitMergeFailureReleasesBlockedWriterOntoSource()[jvm] PASSED - -DatabaseManagerWriterAdmissionTest[jvm] > writerArrivingDuringDrainIsBlockedAndReleasedToDestOnCommit()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusByHashRollsBackPacketWhenReactionUpdateFails()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updatePacketByKeyLeavesRoutingErrorUnchangedWhenMinusOne()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusMatchesNumericUnicastAddresses()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateLastReadMessageCreatesSettingsWhenAbsent()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusMatchesLocalNodeWithIdLocal()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateReactionByKeyIsNoOpWhenNoMatch()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > rssiRoundTripsAbsentAndZeroDistinctly()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusBroadcastDestinationMatchesIdBroadcast()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusByHashDoesNotDowngradeConfirmedToRouting()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > deleteMessagesAtomicDeletesPacketsAndReactions()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateLastReadMessageRollsBackInsertedSettingsWhenUpdateFails()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusByHashLeavesUnrelatedHashUntouched()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusLeavesNonMatchingAddressesUntouched()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusRollsBackPacketWhenReactionUpdateFails()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusUpdatesMatchingPacketAndReactionInOneTransaction()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateLastReadMessageEqualTimestampIsNoOp()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateLastReadMessageAcceptsNewerTimestamp()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateLastReadMessageIsContactScoped()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateLastReadMessageRejectsOlderTimestamp()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updatePacketByKeyUpdatesOnlyMatchingIdentity()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateReactionByKeyUpdatesEveryOwnershipScopedCopy()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateReactionByKeyUpdatesMatchingReaction()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > deleteMessagesAtomicCrossesChunkBoundaryAndDeletesAll()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > deleteMessagesAtomicRollsBackEarlierChunkWhenLaterChunkFails()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateReactionByKeyPreservesExistingMyNodeNum()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusByHashMatchesByHashPrefix()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updatePacketByKeyUpdatesEveryOwnershipScopedCopy()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > applySFPPStatusDoesNotDowngradeConfirmedToRouting()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > concurrentLastReadUpdatesConvergeOnNewestTimestamp()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updatePacketByKeyAppliesRoutingErrorWhenNonNegative()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateLastReadMessagePreservesUnrelatedFields()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > deleteMessagesAtomicEmptyListIsNoOp()[jvm] PASSED - -PacketDaoAtomicTransactionTest[jvm] > updateReactionByKeyLeavesNonMatchingEmojiUntouched()[jvm] PASSED - -SwitchingDiscoveryDaoTest[jvm] > dwellWriteAfterASwitchReportsTheMissingParentInsteadOfViolatingTheForeignKey()[jvm] PASSED - -SwitchingDiscoveryDaoTest[jvm] > dwellWriteSucceedsWhenTheSessionIsInTheActiveDb()[jvm] PASSED - -SwitchingDiscoveryDaoTest[jvm] > dwellWriteAfterASwitchRejectsAnUnrelatedSessionSharingTheId()[jvm] PASSED - -SwitchingDiscoveryDaoTest[jvm] > suspendCallsResolveTheCurrentDbPerCall()[jvm] PASSED - -SwitchingDiscoveryDaoTest[jvm] > statusUpdateReportsUnavailableDatabase()[jvm] PASSED - -SwitchingDiscoveryDaoTest[jvm] > recoverableStatusUpdateReportsUnavailableDatabase()[jvm] PASSED - -SwitchingDiscoveryDaoTest[jvm] > flowsRelatchOntoTheCurrentDb()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > cancellationAfterRecoveredRouteCommitStillProtectsPublishedSource()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > staleAddressIdentityCannotClaimTheActiveDatabase()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > preCommitMergeFailureClearsPendingRouteAndKeepsSource()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:ble:testAndroidHostTest - -AndroidBluetoothRepositoryBondTest > already bonded device returns immediately without initiating a bond PASSED - -AndroidBluetoothRepositoryBondTest > bond fails early when bond state returns none without broadcast PASSED - -AndroidBluetoothRepositoryBondTest > createBond true fails on the BOND_NONE poll after grace is exhausted PASSED - -AndroidBluetoothRepositoryBondTest > bond fails when bonding is rejected (BOND_NONE from BONDING) PASSED - -AndroidBluetoothRepositoryBondTest > isValid accepts a well-formed MAC and rejects garbage PASSED - -AndroidBluetoothRepositoryBondTest > createBond false with no in-flight bond fails to initiate bonding PASSED - -AndroidBluetoothRepositoryBondTest > post receiver registration bond recheck resumes without createBond PASSED - -AndroidBluetoothRepositoryBondTest > isBonded reflects the adapter bonded devices PASSED - -AndroidBluetoothRepositoryBondTest > createBond true fails when polled bonding later returns none PASSED - -AndroidBluetoothRepositoryBondTest > bond times out when no terminal bond broadcast arrives PASSED - -AndroidBluetoothRepositoryBondTest > a BOND_NONE broadcast from a non-BONDING state does not fail the parked bond PASSED - -AndroidBluetoothRepositoryBondTest > spurious none broadcast is ignored but later polled none fails PASSED - -AndroidBluetoothRepositoryBondTest > createBond true then a BONDED broadcast resumes the bond PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:database:testAndroidHostTest - -DatabaseManagerWriterAdmissionTest > closedPoolFailureAfterSwitchDoesNotReplayCallback PASSED - -DatabaseManagerWriterAdmissionTest > successfulMergeReleasesBlockedWriterOntoDestination PASSED - -DatabaseManagerWriterAdmissionTest > writerCountsAndDrainWaitersRemainBalanced PASSED - -DatabaseManagerWriterAdmissionTest > writerAdmissionGateTimeoutIsBoundedAndBalanced PASSED - -DatabaseManagerWriterAdmissionTest > cancellationReleasesAdmissionGateOntoSource PASSED - -DatabaseManagerWriterAdmissionTest > preCommitMergeFailureReleasesBlockedWriterOntoSource PASSED - -DatabaseManagerWriterAdmissionTest > writerArrivingDuringDrainIsBlockedAndReleasedToDestOnCommit PASSED - -DatabaseManagerEvictionTest > never evicts active even if oldest PASSED - -DatabaseManagerReadTest > evictionWaitsForBoundedReadOnSwitchedAwayPool PASSED - -DatabaseManagerReadTest > cancellingBoundedReadReleasesRefcountAndRetriesDeferredEviction PASSED - -DatabaseManagerReadTest > concurrentBoundedReadersKeepPoolUntilFinalReaderReleases PASSED - -DatabaseManagerReadTest > boundedReadUsesCapturedPublishedPoolWithoutWriterAdmissionOrReplay PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:database:jvmTest - -DatabaseManagerAssociationRecoveryTest[jvm] > cancellationAfterMergeCommitKeepsDestination()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > stalePendingRouteWithoutMarkerIsDiscarded()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > errorBeforeMergeCommitReleasesGateAndRestoresSource()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > dataStoreFailureAfterMergeKeepsDestinationAndRepairsOnRetry()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > markerVerificationFailureDoesNotPublishFallback()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > drainTimeoutRestoresSourceAndRetrySucceeds()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > pendingRouteIsPersistedBeforeMergeAndRemovedWithFinalRouting()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > committedPendingRouteRepairsStaleExistingAliasBeforePublishing()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > committedPendingRouteForCurrentAddressSwitchesToRepairedDestination()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > errorAfterMergeCommitReleasesGateAndKeepsDestination()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > postMergeWriteLandsInDestination()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > atomicRoutingMetadataAllPointToCanonical()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > cancellationDuringDrainRestoresSource()[jvm] PASSED - -DatabaseManagerAssociationRecoveryTest[jvm] > recoveredSourceAfterDevicePublicationIsProtectedUntilShutdown()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > evictionWaitsForBoundedReadOnSwitchedAwayPool()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > cancellingBoundedReadReleasesRefcountAndRetriesDeferredEviction()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > concurrentBoundedReadersKeepPoolUntilFinalReaderReleases()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > boundedReadUsesCapturedPublishedPoolWithoutWriterAdmissionOrReplay()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > boundedReadDuringAssociationUsesSourceWithoutWaitingForWriterGate()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > closeWaitsForBoundedReadBeforeClosingItsCapturedPool()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > boundedReadPropagatesFailureWithoutReplay()[jvm] PASSED - -DatabaseManagerReadTest[jvm] > evictionSelectionPreventsVictimFromAcquiringNewReader()[jvm] PASSED - -DatabaseMergerTest[jvm] > mergeIsIdempotentAcrossRetry()[jvm] PASSED - -DatabaseMergerTest[jvm] > alreadyMergedPathRechecksAssociationAuthority()[jvm] PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:ble:testAndroidHostTest - -AndroidBluetoothRepositoryBondTest > createBond true does not fail immediately while bond state is initially none PASSED - -AndroidBluetoothRepositoryBondTest > bond completes early when bond state becomes bonded without broadcast PASSED - -AndroidBluetoothRepositoryBondTest > createBond false while still BONDING keeps waiting and resumes on a later BONDED broadcast PASSED - -AndroidBluetoothRepositoryBondTest > bond succeeds when bond state becomes bonded at timeout boundary PASSED - -KableBleConnectionTest > timeout terminates scan PASSED - -KableBleConnectionTest > service uuid wins over address when the platform cannot filter by address PASSED - -KableBleConnectionTest > scan wraps Android scanner registration failure PASSED - -KableBleConnectionTest > service uuid filter is applied PASSED - -KableBleConnectionTest > scan emits ble device for discovered advertisement PASSED - -KableBleConnectionTest > address filter is used natively only where the platform supports it PASSED - -KableBleConnectionTest > scan reserves one platform start before collecting advertisements PASSED - -KableBleConnectionTest > scan without an address emits every advertisement PASSED - -KableBleConnectionTest > scan preserves unrelated illegal state failure PASSED - -KableBleConnectionTest > scan wraps missing scan permission failure PASSED - -KableBleConnectionTest > scan wraps Android scanning too frequently failure PASSED - -KableBleConnectionTest > scan narrows to the requested address regardless of the native filter PASSED - -KableBleConnectionTest > scan wraps nested scanner registration failure PASSED - -KableBleConnectionTest > expired timeout does not reserve a platform start PASSED - -KableBleConnectionTest > scan matches the requested address case-insensitively PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:database:jvmTest - -DatabaseMergerTest[jvm] > mergeFoldsSecondaryTransportIntoCanonical()[jvm] PASSED - -DatabaseMergerTest[jvm] > staleAssociationAtCommitRollsBackEntireMerge()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > migrateAll()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > heardOnCurrentLoraColumnDefaultsToHeardAndPreservesNodes()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > rssiColumnsGoNullableWithoutLosingRows()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > snrColumnsGoNullableWithoutLosingRows()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > pinnedColumnAddedWithoutDisturbingContactSettings()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > ftsIndexSurvivesPacketTableRecreations()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > draftColumnAddedWithoutDisturbingContactSettings()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > keyMatchColumnsDefaultToMatchedAndPreserveNodes()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > isMakerColumnAddedWithoutDisturbingDeviceHardware()[jvm] PASSED - -MeshtasticDatabaseMigrationTest[jvm] > maintenanceUf2TableAddedWithoutDisturbingTheQuirksCache()[jvm] PASSED - -MeshLogDaoTest[jvm] > testDeleteLogsByUuidAtomicCrossesChunkBoundary()[jvm] PASSED - -MeshLogDaoTest[jvm] > testDeleteLogsByUuidAtomicRemovesAll()[jvm] PASSED - -MeshLogDaoTest[jvm] > testDeleteLogsByUuidAtomicRollsBackEarlierChunkWhenLaterChunkFails()[jvm] PASSED - -MeshLogDaoTest[jvm] > testGetLogsSnapshotPageTraversesEqualTimestampsWithoutDuplicates()[jvm] PASSED - -MeshLogDaoTest[jvm] > testGetLogsSnapshotReturnsMatchingLogs()[jvm] PASSED - -MeshLogDaoTest[jvm] > testDeleteLogsByUuidAtomicEmptyListIsNoOp()[jvm] PASSED - -PacketTranslationDaoTest[jvm] > setShowTranslatedFlipsOnlyTheFlag()[jvm] PASSED - -PacketTranslationDaoTest[jvm] > setTranslationPersistsTextAndShowsIt()[jvm] PASSED - -TracerouteNodePositionDaoTest[jvm] > testReplaceByLogUuidIsAtomic()[jvm] PASSED - -TracerouteNodePositionDaoTest[jvm] > testReplaceByLogUuidRollsBackDeletionWhenInsertFails()[jvm] PASSED - -TracerouteNodePositionDaoTest[jvm] > testReplaceByLogUuidEmptyEntitiesDeletesAll()[jvm] PASSED - -TracerouteNodePositionDaoTest[jvm] > testReplaceByLogUuidRejectsMismatchedSnapshotBeforeMutation()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:database:testAndroidHostTest - -DatabaseManagerEvictionTest > extracts both sides of every persisted pending route PASSED - -DatabaseManagerEvictionTest > evicts two oldest when over limit by two PASSED - -DatabaseManagerEvictionTest > pending route endpoints are excluded from eviction candidates PASSED - -DatabaseManagerEvictionTest > does not evict when count equals limit PASSED - -DatabaseManagerEvictionTest > excludes legacy and default from accounting PASSED - -DatabaseManagerReadTest > boundedReadDuringAssociationUsesSourceWithoutWaitingForWriterGate PASSED - -DatabaseManagerReadTest > closeWaitsForBoundedReadBeforeClosingItsCapturedPool PASSED - -DatabaseManagerReadTest > boundedReadPropagatesFailureWithoutReplay PASSED - -DatabaseManagerReadTest > evictionSelectionPreventsVictimFromAcquiringNewReader PASSED - -DatabaseMergerTest > mergeIsIdempotentAcrossRetry PASSED - -DatabaseMergerTest > alreadyMergedPathRechecksAssociationAuthority PASSED - -DatabaseManagerAssociationRecoveryTest > cancellationAfterRecoveredRouteCommitStillProtectsPublishedSource PASSED - -DatabaseMergerTest > mergeFoldsSecondaryTransportIntoCanonical PASSED - -DatabaseMergerTest > staleAssociationAtCommitRollsBackEntireMerge PASSED - -DatabaseManagerAssociationRecoveryTest > staleAddressIdentityCannotClaimTheActiveDatabase PASSED - -DatabaseManagerAssociationRecoveryTest > preCommitMergeFailureClearsPendingRouteAndKeepsSource PASSED - -DatabaseManagerAssociationRecoveryTest > cancellationAfterMergeCommitKeepsDestination PASSED - -DatabaseManagerAssociationRecoveryTest > stalePendingRouteWithoutMarkerIsDiscarded PASSED - -DatabaseManagerAssociationRecoveryTest > errorBeforeMergeCommitReleasesGateAndRestoresSource PASSED - -DatabaseManagerAssociationRecoveryTest > dataStoreFailureAfterMergeKeepsDestinationAndRepairsOnRetry PASSED - -DatabaseManagerAssociationRecoveryTest > markerVerificationFailureDoesNotPublishFallback PASSED - -DatabaseManagerAssociationRecoveryTest > drainTimeoutRestoresSourceAndRetrySucceeds PASSED - -DatabaseManagerAssociationRecoveryTest > pendingRouteIsPersistedBeforeMergeAndRemovedWithFinalRouting PASSED - -DatabaseManagerAssociationRecoveryTest > committedPendingRouteRepairsStaleExistingAliasBeforePublishing PASSED - -DatabaseManagerAssociationRecoveryTest > committedPendingRouteForCurrentAddressSwitchesToRepairedDestination PASSED - -DatabaseManagerAssociationRecoveryTest > errorAfterMergeCommitReleasesGateAndKeepsDestination PASSED - -DatabaseManagerAssociationRecoveryTest > postMergeWriteLandsInDestination PASSED - -DatabaseManagerAssociationRecoveryTest > atomicRoutingMetadataAllPointToCanonical PASSED - -DatabaseManagerAssociationRecoveryTest > cancellationDuringDrainRestoresSource PASSED - -DatabaseManagerAssociationRecoveryTest > recoveredSourceAfterDevicePublicationIsProtectedUntilShutdown PASSED - -DatabaseManagerRetirementTest > sessionRolloverDuringMergeRollsBackAssociationAndKeepsSourceActive PASSED - -DatabaseManagerRetirementTest > sourcePoolStaysOpenAfterLogicalRetirement PASSED - -DatabaseManagerRetirementTest > shutdownDoesNotDeleteRetiredFileWhenItsPoolFailsToClose PASSED - -DatabaseManagerRetirementTest > persistedRetirementIsReclaimedOnceBeforeFirstDeviceDatabaseOpen PASSED - -DatabaseManagerRetirementTest > cachedPoolRemainsTrackedWhenCloseFails PASSED - -DbFlowRecoveryTest > stalledFlowIsRestarted PASSED - -DbFlowRecoveryTest > closedPoolFailureIsNotRetried PASSED - -DbFlowRecoveryTest > unrelatedFailuresPropagate PASSED - -DatabaseManagerBackfillTest > staleScheduledBackfillSkipsWorkAndBalancesAdmission PASSED - -DbFlowRecoveryTest > backoffResetsAfterASuccessfulEmission PASSED - -DbFlowRecoveryTest > poolTimeoutRestartsTheUpstreamAndEmitsAfterRecovery PASSED - -MeshLogDaoTest > testDeleteLogsByUuidAtomicCrossesChunkBoundary PASSED - -MeshLogDaoTest > testDeleteLogsByUuidAtomicRemovesAll PASSED - -MeshLogDaoTest > testDeleteLogsByUuidAtomicRollsBackEarlierChunkWhenLaterChunkFails PASSED - -MeshLogDaoTest > testGetLogsSnapshotPageTraversesEqualTimestampsWithoutDuplicates PASSED - -MeshLogDaoTest > testGetLogsSnapshotReturnsMatchingLogs PASSED - -MeshLogDaoTest > testDeleteLogsByUuidAtomicEmptyListIsNoOp PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:ble:allTests - -> Task :core:domain:testAndroidHostTest - -EnsureRemoteAdminSessionUseCaseTest > canceling one caller keeps the shared ensure alive for another caller PASSED - -EnsureRemoteAdminSessionUseCaseTest > accepts a valid refresh arriving after the former ten second deadline PASSED - -EnsureRemoteAdminSessionUseCaseTest > completed ensure is not reused by a later caller PASSED - -EnsureRemoteAdminSessionUseCaseTest > departed ensure is not reused after reconnect PASSED - -EnsureRemoteAdminSessionUseCaseTest > dispatches metadata request and returns Refreshed when refresh flow emits PASSED - -EnsureRemoteAdminSessionUseCaseTest > returns Disconnected without dispatching when not connected PASSED - -EnsureRemoteAdminSessionUseCaseTest > returns AlreadyActive without dispatching when status already Active PASSED - -EnsureRemoteAdminSessionUseCaseTest > returns Timeout when no refresh arrives within deadline PASSED - -AdminActionsUseCaseTest > factoryReset local node clears local NodeDB PASSED - -AdminActionsUseCaseTest > shutdown calls radioController PASSED - -AdminActionsUseCaseTest > nodedbReset local node clears local NodeDB with preserveFavorites PASSED - -AdminActionsUseCaseTest > reboot calls radioController PASSED - -ImportProfileUseCaseTest > invoke with valid data returns profile PASSED - -ImportProfileUseCaseTest > invoke with invalid data returns failure PASSED - -RadioConfigUseCaseTest > getCannedMessages calls radioController PASSED - -RadioConfigUseCaseTest > setConfig calls radioController PASSED - -RadioConfigUseCaseTest > getConfig calls radioController PASSED - -RadioConfigUseCaseTest > getChannel calls radioController PASSED - -RadioConfigUseCaseTest > setModuleConfig calls radioController PASSED - -RadioConfigUseCaseTest > setRingtone calls radioController PASSED - -RadioConfigUseCaseTest > getModuleConfig calls radioController PASSED - -RadioConfigUseCaseTest > setFixedPosition calls radioController PASSED - -RadioConfigUseCaseTest > getRingtone calls radioController PASSED - -ExportProfileUseCaseTest > invoke writes encoded profile to output stream PASSED - -RadioConfigUseCaseTest > setRemoteChannel calls radioController PASSED - -RadioConfigUseCaseTest > removeFixedPosition calls radioController with zero position PASSED - -RadioConfigUseCaseTest > setCannedMessages calls radioController PASSED - -RadioConfigUseCaseTest > getOwner calls radioController PASSED - -RadioConfigUseCaseTest > setOwner calls radioController PASSED - -RadioConfigUseCaseTest > setHamMode calls radioController and returns packetId PASSED - -RadioConfigUseCaseTest > getConfig invokes onRequestId with the packet id before issuing the send PASSED - -ProcessRadioResponseUseCaseTest > invoke with canned messages response returns canned messages result PASSED - -ProcessRadioResponseUseCaseTest > invoke with owner response returns owner result PASSED - -ProcessRadioResponseUseCaseTest > routing response without error reason is not treated as an error PASSED - -ProcessRadioResponseUseCaseTest > routing ack from a node other than the addressed one is reported instead of dropped PASSED - -ProcessRadioResponseUseCaseTest > invoke with unexpected sender returns error PASSED - -ProcessRadioResponseUseCaseTest > invoke with channel response returns channel result PASSED - -ProcessRadioResponseUseCaseTest > invoke with routing error returns error result PASSED - -ProcessRadioResponseUseCaseTest > invoke with metadata response returns metadata result PASSED - -ProcessRadioResponseUseCaseTest > invoke with module config response returns module config result PASSED - -ProcessRadioResponseUseCaseTest > invoke with config response returns config result PASSED - -> Task :core:navigation:compileTestKotlinJvm -> Task :core:navigation:compileJvmTestJava NO-SOURCE -> Task :core:navigation:jvmTestClasses - -> Task :core:database:testAndroidHostTest - -PacketDaoAtomicTransactionTest > applySFPPStatusByHashRollsBackPacketWhenReactionUpdateFails PASSED - -PacketDaoAtomicTransactionTest > updatePacketByKeyLeavesRoutingErrorUnchangedWhenMinusOne PASSED - -DatabaseManagerBackfillTest > activeBackfillDelaysAssociationUntilItFinishes PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusMatchesNumericUnicastAddresses PASSED - -PacketDaoAtomicTransactionTest > updateLastReadMessageCreatesSettingsWhenAbsent PASSED - -DatabaseManagerBackfillTest > cancellationWhileBackfillWaitsAtGateLeavesNoWriterLeak PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusMatchesLocalNodeWithIdLocal PASSED - -DatabaseManagerShutdownTest > timeoutRecoveryCannotReopenWhileClosing PASSED - -PacketDaoAtomicTransactionTest > updateReactionByKeyIsNoOpWhenNoMatch PASSED - -DatabaseManagerShutdownTest > shutdownRetainsOwnershipWhenAssociationIsBlockedFromStarting PASSED - -DatabaseManagerShutdownTest > closeBoundsNoncancellableManagerJobWithoutClosingOwnedPools PASSED - -PacketDaoAtomicTransactionTest > rssiRoundTripsAbsentAndZeroDistinctly PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusBroadcastDestinationMatchesIdBroadcast PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusByHashDoesNotDowngradeConfirmedToRouting PASSED - -PacketDaoAtomicTransactionTest > deleteMessagesAtomicDeletesPacketsAndReactions PASSED - -PacketDaoAtomicTransactionTest > updateLastReadMessageRollsBackInsertedSettingsWhenUpdateFails PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusByHashLeavesUnrelatedHashUntouched PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusLeavesNonMatchingAddressesUntouched PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusRollsBackPacketWhenReactionUpdateFails PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusUpdatesMatchingPacketAndReactionInOneTransaction PASSED - -PacketDaoAtomicTransactionTest > updateLastReadMessageEqualTimestampIsNoOp PASSED - -PacketDaoAtomicTransactionTest > updateLastReadMessageAcceptsNewerTimestamp PASSED - -PacketDaoAtomicTransactionTest > updateLastReadMessageIsContactScoped PASSED - -PacketDaoAtomicTransactionTest > updateLastReadMessageRejectsOlderTimestamp PASSED - -PacketDaoAtomicTransactionTest > updatePacketByKeyUpdatesOnlyMatchingIdentity PASSED - -DatabaseManagerShutdownTest > recurringFlowPoolRecoveryNeverClosesDetachedPoolsBeforeShutdown PASSED - -DatabaseManagerShutdownTest > closeUnregistersAcceptedLazyManagerJobCancelledBeforeBodyStarts PASSED - -DatabaseManagerShutdownTest > silentlyStalledFlowIsRecoveredWithoutAnyThrownFailure PASSED - -DatabaseManagerShutdownTest > flowPoolTimeoutReopensAndRelatchesWithoutRepeatingTheFailedPool PASSED - -DatabaseManagerShutdownTest > flowPoolRecoveryStopsAfterIntermittentFailuresFillTheRateWindow PASSED - -DatabaseManagerShutdownTest > timeoutRecoveryReopensTheLazyDefaultPool PASSED - -PacketDaoAtomicTransactionTest > updateReactionByKeyUpdatesEveryOwnershipScopedCopy PASSED - -PacketDaoAtomicTransactionTest > updateReactionByKeyUpdatesMatchingReaction PASSED - -DatabaseManagerShutdownTest > shutdownRacingMergeFinalizationDeletesRetiredSourceExactlyOnce PASSED - -DatabaseManagerShutdownTest > closeBeforeCurrentDbInitializationDoesNotBuildDefaultPool PASSED - -PacketDaoAtomicTransactionTest > deleteMessagesAtomicCrossesChunkBoundaryAndDeletesAll PASSED - -DatabaseManagerShutdownTest > concurrentCloseCallsCleanEachPoolOnce PASSED - -DatabaseManagerShutdownTest > closingRejectsNewWritersSwitchesAndAssociations PASSED - -PacketDaoAtomicTransactionTest > deleteMessagesAtomicRollsBackEarlierChunkWhenLaterChunkFails PASSED - -PacketDaoAtomicTransactionTest > updateReactionByKeyPreservesExistingMyNodeNum PASSED - -DatabaseManagerShutdownTest > quietFlowAfterAFirstEmissionIsNotTreatedAsStalled PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusByHashMatchesByHashPrefix PASSED - -DatabaseManagerShutdownTest > timeoutRecoveryFailureDoesNotMaskOriginalCallbackFailure PASSED - -PacketDaoAtomicTransactionTest > updatePacketByKeyUpdatesEveryOwnershipScopedCopy PASSED - -PacketDaoAtomicTransactionTest > applySFPPStatusDoesNotDowngradeConfirmedToRouting PASSED - -PacketDaoAtomicTransactionTest > concurrentLastReadUpdatesConvergeOnNewestTimestamp PASSED - -PacketDaoAtomicTransactionTest > updatePacketByKeyAppliesRoutingErrorWhenNonNegative PASSED - -DatabaseManagerShutdownTest > shutdownWaitsForPausedAssociationToFinalizeAndRetiresOnce PASSED - -PacketDaoAtomicTransactionTest > updateLastReadMessagePreservesUnrelatedFields PASSED - -DatabaseManagerShutdownTest > shutdownCannotMissDefaultPoolInitializationBeforePublication PASSED - -PacketDaoAtomicTransactionTest > deleteMessagesAtomicEmptyListIsNoOp PASSED - -PacketDaoAtomicTransactionTest > updateReactionByKeyLeavesNonMatchingEmojiUntouched PASSED - -SwitchingDiscoveryDaoTest > dwellWriteAfterASwitchReportsTheMissingParentInsteadOfViolatingTheForeignKey PASSED - -SwitchingDiscoveryDaoTest > dwellWriteSucceedsWhenTheSessionIsInTheActiveDb PASSED - -SwitchingDiscoveryDaoTest > dwellWriteAfterASwitchRejectsAnUnrelatedSessionSharingTheId PASSED - -SwitchingDiscoveryDaoTest > suspendCallsResolveTheCurrentDbPerCall PASSED - -SwitchingDiscoveryDaoTest > statusUpdateReportsUnavailableDatabase PASSED - -SwitchingDiscoveryDaoTest > recoverableStatusUpdateReportsUnavailableDatabase PASSED - -SwitchingDiscoveryDaoTest > flowsRelatchOntoTheCurrentDb PASSED - -DatabaseManagerShutdownTest > closeIsIdempotentAndCleansRetiredSources PASSED - -DatabaseManagerShutdownTest > closeWaitsForAdmittedWriterBeforeClosingPools PASSED - -DatabaseManagerShutdownTest > flowPoolRecoveryStopsAfterConsecutiveReplacementPoolsFail PASSED - -DatabaseManagerShutdownTest > closeBoundsWedgedWriterDrainWithoutClosingReachablePools PASSED - -DatabaseManagerShutdownTest > flowPoolRecoveryResumesAfterTheRateWindowClears PASSED - -DatabaseManagerShutdownTest > detachedReopenedPoolIsClosedDuringOrderlyShutdown PASSED - -DatabaseManagerShutdownTest > flowRecoveryDoesNotSwallowUnrelatedDatabaseFailures PASSED - -DatabaseManagerShutdownTest > flowPoolTimeoutRetainsItsOriginalFailureAfterShutdownClearsCurrentPublication PASSED - -DeviceIdentityTest > unclaimedDeviceResolvesNothing PASSED - -DeviceIdentityTest > renumberedDeviceStillResolvesItsClaimViaDeviceKey PASSED - -DeviceIdentityTest > deviceClaimIsPreferredOverNodeClaim PASSED - -DeviceIdentityTest > validDeviceIdRejectsAbsentBlankPlaceholderAndNonHexForms PASSED - -DeviceIdentityTest > nodeClaimIsTheFallback PASSED - -DeviceIdentityTest > deviceKeyIsDeterministicAndDistinctPerDevice PASSED - -DatabaseManagerWedgedWriteTest > wedgedWithDbCallbackDoesNotStallLaterCalls PASSED - -DatabaseManagerWedgedWriteTest > writesFailFastWhileWedgeRecoveryBudgetIsSpent PASSED - -DatabaseManagerWedgedWriteTest > aSuspendedCallbackDoesNotSerializeOtherCallsOnTheSamePool PASSED - -DatabaseManagerWedgedWriteTest > abandonedWithDbCallbackIsNeverCancelledOrReplayed PASSED - -DatabaseManagerWedgedWriteTest > writesRecoverAfterTheWedgeWindowClears PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:domain:testAndroidHostTest - -CleanNodeDatabaseUseCaseTest > getNodesToClean returns nodes older than threshold PASSED - -CleanNodeDatabaseUseCaseTest > getNodesToClean filters out favorites and ignored PASSED - -CleanNodeDatabaseUseCaseTest > cleanNodes deletes from repo and controller PASSED - -ImportSecurityConfigUseCaseTest > invoke decodes a valid backup into a SecurityConfig PASSED - -SetMeshLogSettingsUseCaseTest > setRetentionDays one hour keeps the last hour instead of every log PASSED - -SetMeshLogSettingsUseCaseTest > setRetentionDays never keeps every log PASSED - -SetMeshLogSettingsUseCaseTest > setLoggingEnabled false deletes all logs PASSED - -SetMeshLogSettingsUseCaseTest > setRetentionDays clamps value and deletes old logs PASSED - -SetMeshLogSettingsUseCaseTest > setLoggingEnabled true deletes logs older than retention PASSED - -SetMeshLogSettingsUseCaseTest > setLoggingEnabled true trims to the one hour sentinel PASSED - -ExportDataUseCaseTest > invoke leaves relay node blank when unset PASSED - -ExportDataUseCaseTest > invoke writes header to sink PASSED - -ExportDataUseCaseTest > invoke writes hop start and relay node columns PASSED - -ExportDataUseCaseTest > invoke writes packet data to sink PASSED - -InstallProfileUseCaseTest > invoke treats blank channel URL as absent and installs profile LoRa once PASSED - -InstallProfileUseCaseTest > invoke replaces local channels and preserves cached LoRa when no LoRa write is needed PASSED - -InstallProfileUseCaseTest > fixed position queue rejection aborts profile installation after closing the edit transaction PASSED - -InstallProfileUseCaseTest > invoke calls begin and commit edit settings PASSED - -InstallProfileUseCaseTest > invoke does not replace local cache for a remote profile install PASSED - -InstallProfileUseCaseTest > invoke installs is_unmessagable but never auto-installs is_licensed PASSED - -InstallProfileUseCaseTest > invoke rejects a malformed channel URL before opening the transaction PASSED - -InstallProfileUseCaseTest > invoke leaves local cache unchanged when a channel write fails PASSED - -InstallProfileUseCaseTest > invoke normalizes channels refreshes local cache and writes URL LoRa once PASSED - -InstallProfileUseCaseTest > invoke skips redundant LoRa write when desired config is already active PASSED - -InstallProfileUseCaseTest > invoke installs all sections of a full profile PASSED - -InstallProfileUseCaseTest > invoke rejects an empty channel set before opening the transaction PASSED - -> Task :core:ui:compileAndroidMain -> Task :core:service:compileKotlinJvm -> Task :core:data:compileTestKotlinJvm - -> Task :core:domain:testAndroidHostTest - -ExportNodeDatabaseUseCaseTest > nodes are sorted most recently heard first PASSED - -ExportNodeDatabaseUseCaseTest > empty database exports a valid document PASSED - -ExportNodeDatabaseUseCaseTest > zero readings are real and survive the export PASSED - -ExportNodeDatabaseUseCaseTest > absent readings are omitted rather than exported as sentinels PASSED - -ExportNodeDatabaseUseCaseTest > lightning readings export from environment metrics PASSED - -ExportNodeDatabaseUseCaseTest > pm status flags export raw and survive at zero PASSED - -ExportNodeDatabaseUseCaseTest > soil water metrics export with absent fields omitted PASSED - -ExportNodeDatabaseUseCaseTest > node numbers export as unsigned PASSED - -ExportNodeDatabaseUseCaseTest > node fields map through user position metrics and key PASSED - -IsOtaCapableUseCaseTest > invoke returns false when node is null PASSED - -IsOtaCapableUseCaseTest > invoke returns true when requires Dfu and actively supported PASSED - -IsOtaCapableUseCaseTest > invoke returns false when hardware model is UNSET PASSED - -IsOtaCapableUseCaseTest > invoke returns false when ota not capable PASSED - -IsOtaCapableUseCaseTest > invoke returns false when disconnected PASSED - -IsOtaCapableUseCaseTest > invoke returns false when address is not ota capable PASSED - -IsOtaCapableUseCaseTest > invoke returns true when ota capable PASSED - -> Task :core:network:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:network:iosSimulatorArm64Test SKIPPED - -> Task :core:database:testAndroidHostTest - -DiscoveryDaoTest > getInterruptedSession_returnsNullForDifferentDevice PASSED - -DiscoveryDaoTest > getPresetResults_returnsResultsForSession PASSED - -DiscoveryDaoTest > recoverableSetMatchesSqlList PASSED - -DiscoveryDaoTest > deleteSession_removesRow PASSED - -DiscoveryDaoTest > deleteSession_doesNotAffectOtherSessions PASSED - -DiscoveryDaoTest > getSession_returnsNullForMissing PASSED - -DiscoveryDaoTest > getMaxDistance_returnsNullWhenAllDistancesNull PASSED - -DiscoveryDaoTest > updateSessionAggregates_preservesCompletionStatus PASSED - -DiscoveryDaoTest > getAllSessions_orderedByTimestampDescending PASSED - -DiscoveryDaoTest > updateSessionCompletionStatus_updatesOnlyTheStatus PASSED - -DiscoveryDaoTest > updateRecoverableSessionCompletionStatus_returnsZeroForMissingSession PASSED - -DiscoveryDaoTest > getInterruptedSession_returnsInProgressSessionForDevice PASSED - -DiscoveryDaoTest > getPresetResults_doesNotReturnOtherSessionResults PASSED - -DiscoveryDaoTest > insertSession_returnsAutoGeneratedId PASSED - -DiscoveryDaoTest > getInterruptedSession_returnsPendingHomeRestoreSessions PASSED - -DiscoveryDaoTest > insertDiscoveredNodes_batchInsert PASSED - -DiscoveryDaoTest > updateDiscoveredNode_modifiesExistingRow PASSED - -DiscoveryDaoTest > updateSession_modifiesExistingRow PASSED - -DiscoveryDaoTest > getDiscoveredNodes_returnsNodesForPresetResult PASSED - -DiscoveryDaoTest > getSessionFlow_emitsUpdatesOnChange PASSED - -DiscoveryDaoTest > getUniqueNodeCount_countsAcrossPresets PASSED - -DiscoveryDaoTest > getInterruptedSession_returnsInterruptedSessionToo PASSED - -DiscoveryDaoTest > getInterruptedSession_returnsNullForCompletedSession PASSED - -DiscoveryDaoTest > getMaxDistance_returnsLargestDistance PASSED - -DiscoveryDaoTest > getMaxDistance_returnsNullWhenNoNodes PASSED - -DiscoveryDaoTest > deleteSession_cascadesDiscoveredNodes PASSED - -DiscoveryDaoTest > updateRecoverableSessionCompletionStatus_updatesRecoverableSession PASSED - -DiscoveryDaoTest > getPresetResultsFlow_emitsOnInsert PASSED - -DiscoveryDaoTest > getUniqueNodeNums_returnsDistinctNodeNums PASSED - -DiscoveryDaoTest > getSession_returnsInsertedSession PASSED - -DiscoveryDaoTest > updateRecoverableSessionCompletionStatus_ignoresTerminalSession PASSED - -DiscoveryDaoTest > getInterruptedSession_returnsMostRecentWhenMultipleMatch PASSED - -DiscoveryDaoTest > deleteSession_cascadesPresetResults PASSED - -NodeInfoDaoDirectFilterTest > the filter off keeps every node PASSED - -NodeInfoDaoDirectFilterTest > the direct filter keeps a node our radio heard at zero hops PASSED - -NodeInfoDaoDirectFilterTest > the direct filter drops relayed nodes and nodes never measured PASSED - -NodeInfoDaoDirectFilterTest > the connected radio survives the direct filter PASSED - -NodeInfoDaoDirectFilterTest > the direct filter drops an mqtt node reporting zero hops PASSED - -PacketTranslationDaoTest > setShowTranslatedFlipsOnlyTheFlag PASSED - -PacketTranslationDaoTest > setTranslationPersistsTextAndShowsIt PASSED - -ReactionKeyTest > pre-fix raw-channel inbound PKI reaction remains visible PASSED - -ReactionKeyTest > wrong non-PKI reaction channel remains excluded PASSED - -ReactionKeyTest > distinct users and distinct emoji stay distinct PASSED - -ReactionKeyTest > another node's reactions are excluded entirely PASSED - -ReactionKeyTest > normalized inbound PKI reaction attaches to its direct-message parent PASSED - -ReactionKeyTest > a lone legacy reaction is still shown PASSED - -ReactionKeyTest > same reply id reaction attaches only to its conversation PASSED - -ReactionKeyTest > a legacy reaction and its current-node twin collapse to one entry PASSED - -ReactionKeyTest > the current-node row wins so its delivery status survives PASSED - -DiscoveryMigrationTest > discoveredNodeTable_insertAndRetrieve PASSED - -DiscoveryMigrationTest > uniqueNodeCount_deduplicatesAcrossPresets PASSED - -DiscoveryMigrationTest > discoveryPresetResultTable_insertAndRetrieve PASSED - -DiscoveryMigrationTest > presetResultEntity_defaultValues PASSED - -DiscoveryMigrationTest > discoverySessionTable_insertAndRetrieve PASSED - -DiscoveryMigrationTest > sessionEntity_defaultValues PASSED - -DiscoveryMigrationTest > getAllSessions_sortedNewestFirst PASSED - -DiscoveryMigrationTest > discoveredNodeEntity_defaultValues PASSED - -DiscoveryMigrationTest > deleteSession_cascadesPresetResultsAndNodes PASSED - -NodeInfoDaoTest > the connected radio re-keying clears the refused key along with the mismatch PASSED - -NodeInfoDaoTest > testClearNodeInfo PASSED - -NodeInfoDaoTest > testUpsertNode PASSED - -NodeInfoDaoTest > a remote node changing its key keeps the stored key and records the refusal PASSED - -NodeInfoDaoTest > testGetMyNodeInfo PASSED - -NodeInfoDaoTest > a mesh packet claiming the local node number cannot replace the stored key PASSED - -NodeInfoDaoTest > the legacy mismatch sentinel arriving as a key is neither refused nor stored PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:data:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:470:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:479:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/MeshConnectionManagerImplTest.kt:486:17 Expression is unused. - -> Task :core:data:compileJvmTestJava NO-SOURCE -> Task :core:data:jvmTestClasses - -> Task :core:data:testAndroidHostTest - -FuzzyNameResolverTest > longestCommonSubstring_partial_match PASSED - -FuzzyNameResolverTest > longestCommonSubstring_exact_match PASSED - -FuzzyNameResolverTest > resolveNodeName_not_found_when_no_match PASSED - -FuzzyNameResolverTest > resolveNodeName_not_found_when_no_nodes PASSED - -FuzzyNameResolverTest > longestCommonSubstring_case_sensitive PASSED - -FuzzyNameResolverTest > resolveNodeName_ambiguous_returns_candidates PASSED - -FuzzyNameResolverTest > nodeNameResult_found_carries_data PASSED - -FuzzyNameResolverTest > resolveNodeName_exact_match_case_insensitive PASSED - -FuzzyNameResolverTest > longestCommonSubstring_empty_string PASSED - -RateLimiterTest > rejects_calls_over_limit PASSED - -RateLimiterTest > retry_after_is_accurate PASSED - -RateLimiterTest > permits_after_window_expires PASSED - -RateLimiterTest > permits_calls_under_limit PASSED - -RateLimiterTest > sliding_window_evicts_oldest_entry PASSED - -FuzzyNameResolverTest > resolveChannelName_not_found_when_empty PASSED - -FuzzyNameResolverTest > nodeNameResult_ambiguous_carries_candidates PASSED - -FuzzyNameResolverTest > longestCommonSubstring_no_match PASSED - -FuzzyNameResolverTest > resolveChannelName_exact_match PASSED - -FuzzyNameResolverTest > channelNameResult_found_carries_data PASSED - -FuzzyNameResolverTest > resolveNodeName_fuzzy_match_single_candidate PASSED - -FuzzyNameResolverTest > resolveChannelName_excludes_admin_channel PASSED - -FuzzyNameResolverTest > longestCommonSubstring_longer_second PASSED - -AdminPacketHandlerImplTest > packet with empty payload bytes is ignored PASSED - -CommandSenderImplTest > requestNeighborInfo_localNode_generatesDummyWhenNoCached PASSED - -AdminPacketHandlerImplTest > get_module_config_response from remote without status message does not crash PASSED - -AdminPacketHandlerImplTest > packet with null decoded payload is ignored PASSED - -AdminPacketHandlerImplTest > session passkey is updated when present PASSED - -AdminPacketHandlerImplTest > device metadata from own node delegates to configFlowManager PASSED - -CommandSenderImplTest > sendAdminForConnectionForwardsLifecycleOwnershipToAdmission PASSED - -CommandSenderImplTest > requestNeighborInfo_remoteNode_sendsRequest PASSED - -CommandSenderImplTest > resolveNodeNum_local_returnsMyNodeNum PASSED - -CommandSenderImplTest > sendData_setsStatusQueued PASSED - -CommandSenderImplTest > generatePacketId_returnsNonZero PASSED - -CommandSenderImplTest > sendData_setsIdWhenZero PASSED - -CommandSenderImplTest > sendAdminSurfacesQueueRejection PASSED - -CommandSenderImplTest > requestTraceroute_recordsStartTime PASSED - -AdminPacketHandlerImplTest > combined admin message with passkey and config response PASSED - -AdminPacketHandlerImplTest > get_module_config_response from remote node updates node status PASSED - -AdminPacketHandlerImplTest > get_config_response from remote node is ignored PASSED - -AdminPacketHandlerImplTest > get_channel_response from own node delegates to configHandler PASSED - -AdminPacketHandlerImplTest > get_module_config_response from own node delegates to configHandler PASSED - -AdminPacketHandlerImplTest > get_channel_response from remote node is ignored PASSED - -AdminPacketHandlerImplTest > device metadata from remote node delegates to nodeManager PASSED - -AdminPacketHandlerImplTest > empty session passkey does not record refresh PASSED - -AdminPacketHandlerImplTest > get_config_response from own node delegates to configHandler PASSED - -CommandSenderImplTest > requestTelemetryForConnectionForwardsLifecycleOwnershipToAdmission PASSED - -CommandSenderImplTest > resolveNodeNum_byId_looksUpAndReturns PASSED - -CommandSenderImplTest > sendAdminAwaitResult_preservesNonAcceptedStatus PASSED - -CommandSenderImplTest > requestNeighborInfo_localNode_usesCachedNeighborInfo PASSED - -CommandSenderImplTest > generatePacketId_staysNonZeroOverManyIterations PASSED - -CommandSenderImplTest > requestTraceroute_generatesNonZeroIdWhenCallerSuppliesZero PASSED - -GeofenceMonitorTest > ownPositionIsNeverEvaluated PASSED - -GeofenceMonitorTest > favoritesOnlySuppressesNonFavoriteCrossing PASSED - -GeofenceMonitorTest > remoteCreatedGeofenceDoesNotNotify PASSED - -CommandSenderImplTest > sendAdminImmediate_dispatchesDirectToRadioWithPasskeyAndNoResponse PASSED - -CommandSenderImplTest > sendLockdownPassphrase_returnsFalseWhenLocalNodeIdentityIsUnavailable PASSED - -CommandSenderImplTest > sendAdminAwaitResult_generatesNonZeroIdWhenCallerSuppliesZero PASSED - -CommandSenderImplTest > requestNeighborInfo_localNode_doesNotStartTimerWhenQueueRejectsPacket PASSED - -GeofenceMonitorTest > firstSightingInsideDoesNotNotify PASSED - -CommandSenderImplTest > requestNeighborInfo_generatesNonZeroIdWhenCallerSuppliesZero PASSED - -CommandSenderImplTest > resolveNodeNum_local_returnsZeroWhenMyNodeNumNull PASSED - -GeofenceMonitorTest > enterOnlyWaypointDoesNotNotifyOnExit PASSED - -CommandSenderImplTest > sendPosition_doesNotUpdateLocalPositionWhenQueueRejectsPacket PASSED - -CommandSenderImplTest > requestUserInfo_rejectsWhenLocalNodeRecordIsUnavailable PASSED - -CommandSenderImplTest > requestTelemetry_surfacesQueueRejection PASSED - -CommandSenderImplTest > sendData_rejectsOversizedPayload PASSED - -CommandSenderImplTest > setFixedPosition_doesNotProjectZeroPositionWhenRemovingIt PASSED - -CommandSenderImplTest > generatePacketId_isIncrementing PASSED - -CommandSenderImplTest > sendPosition_rejectsWhenLocalNodeIdentityIsUnavailable PASSED - -CommandSenderImplTest > sendPosition_updatesLocalPositionWhenNotFixed PASSED - -CommandSenderImplTest > resolveNodeNum_broadcast_returnsNodeNumBroadcast PASSED - -CommandSenderImplTest > requestNeighborInfo_remoteNode_doesNotStartTimerWhenQueueRejectsPacket PASSED - -CommandSenderImplTest > sendLockdownPassphrase_returnsDirectTransportAdmission PASSED - -CommandSenderImplTest > sendData_requiresNonZeroDataType PASSED - -CommandSenderImplTest > sendData_marksPacketErrorAndThrowsWhenQueueRejectsIt PASSED - -CommandSenderImplTest > resolveNodeNum_byId_throwsForUnknown PASSED - -CommandSenderImplTest > resolveNodeNum_byNum_returnsPassthrough PASSED - -CommandSenderImplTest > setFixedPosition_doesNotUpdateLocalPositionWhenQueueRejectsPacket PASSED - -CommandSenderImplTest > sendAdmin_generatesNonZeroIdWhenCallerSuppliesZero PASSED - -CommandSenderImplTest > sendAdmin_injectsSessionPasskey PASSED - -CommandSenderImplTest > sendPosition_skipsLocalUpdateWhenFixedPosition PASSED - -CommandSenderImplTest > setFixedPosition_rejectsBeforeDeviceMutationWhenLocalNodeIdentityIsUnavailable PASSED - -CommandSenderImplTest > sendLockNow_returnsDirectTransportAdmission PASSED - -CommandSenderImplTest > requestTraceroute_doesNotStartTimerWhenQueueRejectsPacket PASSED - -HistoryManagerImplTest > buildStoreForwardHistoryRequest clamps non-positive parameters PASSED - -HistoryManagerImplTest > buildStoreForwardHistoryRequest copies positive parameters PASSED - -HistoryManagerImplTest > requestHistoryReplay rejects a missing device before queue admission PASSED - -HistoryManagerImplTest > resolveHistoryRequestParameters falls back to defaults when non-positive PASSED - -HistoryManagerImplTest > requestHistoryReplay surfaces owned queue rejection PASSED - -HistoryManagerImplTest > resolveHistoryRequestParameters uses config values when positive PASSED - -HistoryManagerImplTest > requestHistoryReplay binds queue admission to the expected connection PASSED - -HistoryManagerImplTest > requestHistoryReplay rejects a missing local node before queue admission PASSED - -MeshDataHandlerTest > routing ack completes dispatched response as accepted PASSED - -MeshDataHandlerTest > same reaction packet id from a different sender is persisted PASSED - -MeshDataHandlerTest > message from ignored node is filtered PASSED - -MeshDataHandlerTest > handleReceivedData does not broadcast for position from local node PASSED - -MeshDataHandlerTest > non-owner unlock replay of a locked waypoint is dropped PASSED - -MeshConnectionManagerImplTest > Disconnected state stops services PASSED - -MeshConnectionManagerImplTest > TCP Stage 1 meaningful progress resets watchdog without false restart PASSED - -MeshDataHandlerTest > neighborinfo packet delegates to neighborInfoHandler and broadcasts PASSED - -MeshDataHandlerTest > our own mesh beacon is ignored PASSED - -MeshDataHandlerTest > position packet delegates to nodeManager PASSED - -MeshDataHandlerTest > message for another conversation while foregrounded notifies silently PASSED - -MeshDataHandlerTest > text message is persisted via rememberDataPacket PASSED - -MeshDataHandlerTest > text with reply_id and emoji is treated as reaction PASSED - -MeshDataHandlerTest > mesh beacon without a join offer is ignored PASSED - -MeshDataHandlerTest > range test packet is remembered as text message type PASSED - -MeshDataHandlerTest > owner unlock of their own locked waypoint is accepted PASSED - -MeshDataHandlerTest > same packet id from a different sender is persisted PASSED - -MeshDataHandlerTest > handleReceivedData tracks analytics PASSED - -MeshDataHandlerTest > telemetry from local node delegates to telemetryHandler PASSED - -MeshDataHandlerTest > nodeinfo packet from local node is ignored PASSED - -MeshDataHandlerTest > nodeinfo packet from remote delegates to handleReceivedUser PASSED - -MeshConnectionManagerImplTest > Recovery exhaustion after three consecutive failures surfaces sticky error and stops recovery PASSED - -MeshConnectionManagerImplTest > post-handshake admission retries stop at the attempt cap PASSED - -MeshConnectionManagerImplTest > Stage 1 config stall triggers transport restart and ends Disconnected PASSED - -MeshConnectionManagerImplTest > Disconnected state clears the stale noise floor PASSED - -MeshConnectionManagerImplTest > TCP Stage 2 stall fires restartTransport at 12s PASSED - -MeshConnectionManagerImplTest > TCP fast recovery preserves Disconnected-before-restartTransport ordering PASSED - -MeshConnectionManagerImplTest > TCP Stage 1 stall report names TCP PASSED - -MeshConnectionManagerImplTest > rapid state transitions are serialized by connectionMutex PASSED - -MeshConnectionManagerImplTest > TCP fast watchdog report names TCP PASSED - -MeshConnectionManagerImplTest > TCP Stage 2 NodeInfo progress resets watchdog PASSED - -MeshConnectionManagerImplTest > BLE Stage 2 progress re-arms the 60s stall guard as an inactivity window PASSED - -MeshConnectionManagerImplTest > onNodeDbReady starts MQTT and requests history PASSED - -MeshDataHandlerTest > mesh beacon with a join offer is recorded as an invitation PASSED - -MeshDataHandlerTest > waypoint locked to someone other than the sender is dropped PASSED - -MeshDataHandlerTest > PKI reaction persists normalized channel and finds its notification parent PASSED - -MeshDataHandlerTest > duplicate text message is not inserted again PASSED - -MeshDataHandlerTest > mention from a muted node does not notify PASSED - -MeshDataHandlerTest > traceroute packet delegates to tracerouteHandler and suppresses broadcast PASSED - -MeshDataHandlerTest > message while backgrounded notifies normally even for the last viewed conversation PASSED - -MeshDataHandlerTest > mention from an unmuted node in a muted channel still notifies PASSED - -MeshDataHandlerTest > message for the conversation on screen does not notify PASSED - -MeshDataHandlerTest > admin message delegates to adminPacketHandler PASSED - -MeshConnectionManagerImplTest > TCP Stage 1 stall fires restartTransport at 12s without retry PASSED - -MeshConnectionManagerImplTest > TCP Stage 1 watchdog fires after progress stops PASSED - -MeshConnectionManagerImplTest > onNodeDbReady retains owned requests until queue admission opens PASSED - -MeshConnectionManagerImplTest > Stage 2 node-info stall triggers transport restart PASSED - -MeshConnectionManagerImplTest > Connected state triggers broadcast and config start PASSED - -MeshConnectionManagerImplTest > BLE Stage 1 stall report names BLE PASSED - -MeshConnectionManagerImplTest > onRadioConfigLoaded enqueues queued packets and sets time PASSED - -MeshDataHandlerTest > mesh beacon offering an already-configured channel is stored but does not notify PASSED - -MeshDataHandlerTest > text persistence from a retired session is rejected before database access PASSED - -MeshDataHandlerTest > telemetry packet delegates to telemetryHandler PASSED - -MeshDataHandlerTest > paxcounter packet delegates to nodeManager PASSED - -MeshConnectionManagerImplTest > Disconnect during pre-handshake settle cancels config start PASSED - -MeshDataHandlerTest > non-owner update to an unlocked waypoint is accepted PASSED - -MeshConnectionManagerImplTest > USB serial transport engages fast path like TCP PASSED - -MeshDataHandlerTest > new waypoint from a non-owner is accepted when none is stored PASSED - -MeshDataHandlerTest > owner edit of their own locked waypoint is accepted PASSED - -MeshConnectionManagerImplTest > onNodeDbReady skips history when its lifecycle departs while config loads PASSED - -MeshDataHandlerTest > filtered message is inserted with filtered flag PASSED - -MeshDataHandlerTest > store forward packet delegates to storeForwardHandler PASSED - -MeshDataHandlerTest > testInitialization PASSED - -MeshDataHandlerTest > routing nak completes dispatched response as rejected PASSED - -MeshDataHandlerTest > non-owner takeover of a locked waypoint is dropped PASSED - -MeshDataHandlerTest > handleReceivedData returns early when dataMapper returns null PASSED - -MeshConnectionManagerImplTest > BLE total cap fires the stall guard despite continuous trickle progress PASSED - -MeshDataHandlerTest > routing packet always broadcasts PASSED - -MeshDataHandlerTest > handleReceivedData broadcasts for remote packets PASSED - -MeshConnectionManagerImplTest > onHandshakeProgress is a no-op when state is not Connecting PASSED - -MeshConnectionManagerImplTest > DeviceSleep behavior when power saving is on stays in DeviceSleep PASSED - -MeshDataHandlerTest > routing ack from a retired generation cannot update the replacement database PASSED - -NodeManagerConnectionIdentityTest > publish then clear sets and nulls connectionIdentity PASSED - -NodeManagerConnectionIdentityTest > publish with null deviceId keeps address and nodeNum set PASSED - -NodeManagerConnectionIdentityTest > generation-aware clear preserves fresh identity and removes stale identity PASSED - -NodeManagerConnectionIdentityTest > loadCachedNodeDB does not populate connectionIdentity PASSED - -NodeManagerConnectionIdentityTest > clearing a session removes its address-bound identity PASSED - -NodeManagerConnectionIdentityTest > connectionIdentity StateFlow emits only distinct values PASSED - -NodeManagerConnectionIdentityTest > clear resets connectionIdentity alongside other state PASSED - -NodeManagerConnectionIdentityTest > connectionIdentity diagnostic text redacts persistent identifiers PASSED - -NodeDeletionDatabaseSwitchTest > deleteNodeUsesOneDatabaseCaptureForNodeAndMetadata PASSED - -MeshConnectionManagerImplTest > DeviceSleep timeout is capped at MAX_SLEEP_TIMEOUT_SECONDS for high ls_secs PASSED - -MeshConnectionManagerImplTest > post-handshake admission retries stop when the connected lifecycle changes PASSED - -MeshConnectionManagerImplTest > Successful handshake resets the consecutive recovery failure counter PASSED - -MeshConnectionManagerImplTest > concurrent sleep-timeout and radio state change are serialized PASSED - -MeshConnectionManagerImplTest > BLE Stage 1 progress re-arms the stall guard as an inactivity window PASSED - -MeshConnectionManagerImplTest > Second recovery attempt applies exponential backoff delay before restart PASSED - -MeshConnectionManagerImplTest > USB Stage 1 stall report names USB PASSED - -MeshConnectionManagerImplTest > Handshake completing before stall timeout does not trigger transport restart PASSED - -MeshConnectionManagerImplTest > DeviceSleep behavior when power saving is off maps to Disconnected PASSED - -MeshConnectionManagerImplTest > Handshake stall recovery orders app disconnect before transport restart emissions PASSED - -MeshConnectionManagerImplTest > onHandshakeComplete cancels armed Stage 2 fast watchdog PASSED - -MeshConnectionManagerImplTest > Connected state sends pre-handshake heartbeat before config request PASSED - -MeshConnectionManagerImplTest > post-handshake failure recovery disconnects before restarting transport PASSED - -NeighborInfoHandlerImplTest > handleNeighborInfo sets response on serviceRepository PASSED - -SessionWorkTest > trusted work without a session executes PASSED - -SessionWorkTest > active session executes leased work PASSED - -SessionWorkTest > retired session invokes rejection without executing work PASSED - -DataLayerHeartbeatSenderTest > nonces are strictly increasing and never 1 the firmware NodeInfo-ping trigger PASSED - -NeighborInfoHandlerImplTest > recordStartTime and handleNeighborInfo includes duration PASSED - -NeighborInfoHandlerImplTest > handleNeighborInfo ignores packet with null decoded PASSED - -NeighborInfoHandlerImplTest > handleNeighborInfo does not store lastNeighborInfo when from remote node PASSED - -NeighborInfoHandlerImplTest > handleNeighborInfo stores lastNeighborInfo when from own node PASSED - -SessionManagerImplTest > observeSessionStatus emits NoSession initially when no key recorded PASSED - -SessionManagerImplTest > clearAll wipes per-node entries PASSED - -LockdownCoordinatorImplTest > UNLOCKED after auto-replay does not overwrite stored passphrase PASSED - -SessionManagerImplTest > observeSessionStatus reports Active for a fresh recording PASSED - -SessionManagerImplTest > recordSession stores per-node passkeys without overwriting siblings PASSED - -SessionManagerImplTest > observeSessionStatus reports Stale once age exceeds threshold PASSED - -SessionManagerImplTest > sessionRefreshFlow emits srcNodeNum on each non-empty recording PASSED - -SessionManagerImplTest > recordSession with empty passkey is a no-op PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:database:testAndroidHostTest - -NodeInfoDaoTest > the refused key is kept so the mismatch can name it PASSED - -NodeInfoDaoTest > the stored key surviving a substitution still reads as a mismatch to the UI PASSED - -NodeInfoDaoTest > the connected radio re-keying replaces its stored key rather than flagging a mismatch PASSED - -NodeInfoDaoTest > testNodeDBbyNum PASSED - -NodeInfoDaoTest > testDeleteNode PASSED - -QuickChatActionDaoTest > testInsertActionAndRetrieveIt PASSED - -QuickChatActionDaoTest > testUpdateAction PASSED - -QuickChatActionDaoTest > testDeleteAction PASSED - -QuickChatActionDaoTest > testDeleteAll PASSED - -QuickChatActionDaoTest > testPositionOrdering PASSED - -QuickChatActionDaoTest > testReactiveFlowEmitsUpdatesOnInsertAndDelete PASSED - -NodeIdentityMigrationDaoTest > installTrustsDeviceReportedKeyChangeForSelf PASSED - -NodeIdentityMigrationDaoTest > singleUpsertNeverMigratesEvenForCanonicalNum PASSED - -NodeIdentityMigrationDaoTest > renumberMigratesHistoryAndLocalState PASSED - -NodeIdentityMigrationDaoTest > nonCanonicalKeyConflictKeepsExistingIdentity PASSED - -NodeIdentityMigrationDaoTest > renumberDropsStaleSelfListedInSameBatch PASSED - -NodeIdentityMigrationDaoTest > differentHardwareVetoesHistoryMigration PASSED - -NodeIdentityMigrationDaoTest > sameNumInstallLeavesEverythingInPlace PASSED - -NodeIdentityMigrationDaoTest > sameHardwareEraseMigratesAcrossKeyChange PASSED - -NodeIdentityMigrationDaoTest > canonicalNeighborRenumberMigratesInInstallBatch PASSED - -PacketDaoTest > timeOutEnrouteReactionFailsOnlyStillEnrouteReactions PASSED - -PacketDaoTest > testGetContactKeys PASSED - -PacketDaoTest > testClearAllUnreadCounts PASSED - -PacketDaoTest > applyOutgoingReactionQueueStatusIgnoresAmbiguousMeshIds PASSED - -PacketDaoTest > testMarkContactUnreadOnAnEmptyConversationIsANoOp PASSED - -> Task :core:service:compileJvmMainJava NO-SOURCE -> Task :core:service:jvmMainClasses -> Task :core:service:jvmJar UP-TO-DATE - -> Task :core:model:jvmTest - -DeviceTypeTest[jvm] > fromAddress_returns_null_for_non_presented_prefixes()[jvm] PASSED - -DeviceTypeTest[jvm] > fromAddress_preserves_transport_analytics_names()[jvm] PASSED - -HardwareSupportTierTest[jvm] > actively supported decides the rung for everything that is not maker()[jvm] PASSED - -HardwareSupportTierTest[jvm] > a maker board reads maker even once the registry marks it actively supported()[jvm] PASSED - -HardwareSupportTierTest[jvm] > isMaker defaults to false so an absent key reads as not maker()[jvm] PASSED - -HardwareSupportTierTest[jvm] > a legacy or untiered maker board falls through to the lifecycle flag()[jvm] PASSED - -MessageDisplayedTextTest[jvm] > displaysTranslationWhenToggledOn()[jvm] PASSED - -MessageDisplayedTextTest[jvm] > displaysOriginalWhenNoTranslation()[jvm] PASSED - -MessageDisplayedTextTest[jvm] > displaysOriginalWhenTranslationToggledOff()[jvm] PASSED - -MessageDisplayedTextTest[jvm] > displaysOriginalWhileSearchingEvenWhenTranslationShown()[jvm] PASSED - -NodeTelemetryStringsTest[jvm] > zero_voltage_and_current_are_reported()[jvm] PASSED - -NodeTelemetryStringsTest[jvm] > zero_humidity_stays_filtered()[jvm] PASSED - -NodeTelemetryStringsTest[jvm] > out_of_range_soil_moisture_is_still_rejected()[jvm] PASSED - -NodeTelemetryStringsTest[jvm] > zero_temperature_is_reported()[jvm] PASSED - -NodeTelemetryStringsTest[jvm] > soil_moisture_no_longer_requires_a_soil_temperature()[jvm] PASSED - -NodeTelemetryStringsTest[jvm] > absent_environment_metrics_render_nothing()[jvm] PASSED - -NodeTelemetryStringsTest[jvm] > zero_soil_readings_are_reported()[jvm] PASSED - -WaypointLockTest[jvm] > placeholderLockShutsOutTheCreatorButRealOwnerLockDoesNot()[jvm] PASSED - -WaypointLockTest[jvm] > unlockedWaypointIsModifiableByAnyone()[jvm] PASSED - -WaypointLockTest[jvm] > unlockedWaypointIsNotLocked()[jvm] PASSED - -WaypointLockTest[jvm] > lockedWaypointIsLocked()[jvm] PASSED - -WaypointLockTest[jvm] > lockedWaypointIsModifiableOnlyByOwner()[jvm] PASSED - -LockdownStateTest[jvm] > absence of lockdown status allows config writes()[jvm] PASSED - -LockdownStateTest[jvm] > unlocked devices allow config writes()[jvm] PASSED - -LockdownStateTest[jvm] > lockdown capable but disabled devices allow config writes()[jvm] PASSED - -LockdownStateTest[jvm] > pending locked and not-yet-authorized states withhold config writes()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > default 1-byte psk shorthand matches its expanded full-length equivalent()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > null lora config forces SWITCH()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > different preset forces SWITCH()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > unnamed primary matches a beacon that names the preset explicitly yielding ADD()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > empty-name primary channel matches an offer naming the preset display name()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > toJoinChannelSet omits lora for ADD and includes it for SWITCH()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > decode returns null for a malformed record()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > join strips position sharing from the offered channel()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > offer matching a configured channel by name and psk is already joined()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > no offer channel yields NONE()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > different region forces SWITCH()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > SWITCH without an offered preset keeps the current preset and region and resets channel_num()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > matching preset region and slot yields ADD()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > encode then decode round-trips an absent rssi without collapsing it to zero()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > blank-name no-psk secondary placeholder slot is not mistaken for an already-joined channel()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > isAlreadyJoined returns false when no channels are configured()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > isAlreadyJoined returns false when lora config is unknown so a real invitation is never hidden()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > offer for a channel not configured on the radio is not already joined()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > same name but different psk is a different mesh and is not already joined()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > SWITCH ships a fresh lora config so stale RF pins never survive the retune()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > encode then decode round-trips a beacon offer()[jvm] PASSED - -MeshBeaconOfferTest[jvm] > isAlreadyJoined returns false for a beacon with no offer channel()[jvm] PASSED - -SfppHasherTest[jvm] > outputIsAlways16Bytes()[jvm] PASSED - -SfppHasherTest[jvm] > littleEndianByteOrder()[jvm] PASSED - -SfppHasherTest[jvm] > maxIntValues()[jvm] PASSED - -SfppHasherTest[jvm] > emptyPayloadProduces16Bytes()[jvm] PASSED - -SfppHasherTest[jvm] > differentPayloadsProduceDifferentHashes()[jvm] PASSED - -SfppHasherTest[jvm] > differentIdsProduceDifferentHashes()[jvm] PASSED - -SfppHasherTest[jvm] > differentFromProduceDifferentHashes()[jvm] PASSED - -SfppHasherTest[jvm] > deterministicOutput()[jvm] PASSED - -UnitConversionsTest[jvm] > metersPerSecondToMph()[jvm] PASSED - -UnitConversionsTest[jvm] > celsiusToFahrenheit()[jvm] PASSED - -> Task :core:database:testAndroidHostTest - -PacketDaoTest > applyOutgoingQueueStatusLeavesAnAlreadyResolvedPacketAlone PASSED - -PacketDaoTest > getReactionsByStatusReturnsOnlyOwnedRowsWithThatStatus PASSED - -PacketDaoTest > timeOutEnrouteReactionTargetsOnlyOnePersistedRowWhenMeshIdsCollide PASSED - -ChannelReconciliationTest > reconciling again once a swap has settled finds nothing to do PASSED - -PacketDaoTest > timeOutEnrouteReactionLeavesAnAlreadyResolvedReactionAlone PASSED - -ChannelReconciliationTest > swapping slots carries each conversation's settings PASSED - -ChannelReconciliationTest > a queued message in an archived conversation is not claimable for sending PASSED - -ChannelReconciliationTest > retiring stores the old channel name and carries its settings PASSED - -ChannelReconciliationTest > changing region alone leaves conversations alone PASSED - -ChannelReconciliationTest > a replaced primary channel takes its history with it PASSED - -ChannelReconciliationTest > an unknown lora config never retires anything PASSED - -ChannelReconciliationTest > re-adding a channel restores its history to the live slot PASSED - -ChannelReconciliationTest > switching modem preset retires the old channel PASSED - -ChannelReconciliationTest > direct messages are never retired PASSED - -ChannelReconciliationTest > reclaiming lifts only its own reactions off a shared index PASSED - -ChannelReconciliationTest > deleting the first channel leaves the survivor intact on slot 0 PASSED - -ChannelReconciliationTest > swapping two channel slots moves both conversations PASSED - -NodeInfoDaoAtomicDeleteTest > deleteNodeAndMetadataRemovesBothRows PASSED - -NodeInfoDaoAtomicDeleteTest > deleteNodesAndMetadataChunksPastBindLimit PASSED - -NodeInfoDaoAtomicDeleteTest > deleteNodeAndMetadataRollsBackWhenMetadataDeleteFails PASSED - -PacketDaoTest > testGetPacketsByPacketIdsChunked PASSED - -PacketFtsSearchTest > searchMessagesInConversation_scopesToContact PASSED - -PacketDaoTest > testClearUnreadCount PASSED - -PacketDaoTest > testGetQueuedPackets PASSED - -PacketDaoTest > testSetPinnedCreatesTheRowAndPreservesMute PASSED - -PacketFtsSearchTest > backfillMessageTexts_makesHistoricalMessagesSearchable PASSED - -PacketFtsSearchTest > searchMessages_matchesIndexedText_ignoresNonMatches PASSED - -PacketDaoTest > testGetMessageCount PASSED - -DeviceHardwareEntityMakerTest > an entry without the key reads as not maker PASSED - -DeviceHardwareEntityMakerTest > isMaker survives the network to entity to model round trip PASSED - -PacketDaoTest > testGetMessagesFrom PASSED - -PacketDaoTest > testMarkContactUnreadRestoresTheBadge PASSED - -PacketDaoTest > testGetMessagesFromWithIncludeFiltered PASSED - -PacketDaoTest > timeOutEnroutePacketTargetsOnlyOnePersistedRowWhenMeshIdsCollide PASSED - -PacketDaoTest > testDeleteMessages PASSED - -PacketDaoTest > timeOutEnroutePacketFailsOnlyStillEnroutePackets PASSED - -PacketDaoTest > applyOutgoingReactionQueueStatusLeavesAnAlreadyResolvedReactionAlone PASSED - -PacketDaoTest > testUpdateMessageStatus PASSED - -PacketDaoTest > testUpsertReaction PASSED - -PacketDaoTest > testGetWaypoints PASSED - -PacketDaoTest > testGetUnreadCount PASSED - -PacketDaoTest > timeOutEnroutePacketLeavesAnAlreadyResolvedPacketAlone PASSED - -PacketDaoTest > queueStatusGuardRejectsStatusesOwnedByOtherTransitions PASSED - -PacketDaoTest > testMarkContactUnreadCanBeClearedAgainByReadingIt PASSED - -TracerouteNodePositionDaoTest > testReplaceByLogUuidIsAtomic PASSED - -TracerouteNodePositionDaoTest > testReplaceByLogUuidRollsBackDeletionWhenInsertFails PASSED - -TracerouteNodePositionDaoTest > testReplaceByLogUuidEmptyEntitiesDeletesAll PASSED - -TracerouteNodePositionDaoTest > testReplaceByLogUuidRejectsMismatchedSnapshotBeforeMutation PASSED - -> Task :core:data:testAndroidHostTest - -RadioConfigRepositoryImplTest > addFileInfo caps the manifest instead of growing without bound PASSED - -RadioConfigRepositoryImplTest > clearFileManifest empties the manifest so a new handshake can accumulate again PASSED - -RadioConfigRepositoryImplTest > concurrent addFileInfo does not lose updates PASSED - -PoisonedPoolNodeFlowRecoveryTest > nodeDbFlowRecoversAfterMoreFailuresThanTheRecoveryBudgetAllows PASSED - -LockdownCoordinatorImplTest > LOCKED with stored passphrase stays retryable when dispatch is rejected PASSED - -LockdownCoordinatorImplTest > UNLOCK_FAILED with backoff sets UnlockBackoff state PASSED - -LockdownCoordinatorImplTest > LOCKED with no stored passphrase sets Locked state PASSED - -LockdownCoordinatorImplTest > NEEDS_PROVISION after lockNow does not trigger LockNowAcknowledged PASSED - -LockdownCoordinatorImplTest > UNLOCK_FAILED with no backoff sets UnlockFailed state PASSED - -LockdownCoordinatorImplTest > UNLOCKED with no deviceAddress skips save but still authorizes PASSED - -LockdownCoordinatorImplTest > onDisconnect resets all lockdown state PASSED - -LockdownCoordinatorImplTest > lockNow followed by LOCKED triggers LockNowAcknowledged PASSED - -LockdownCoordinatorImplTest > submitPassphrase enters AwaitingResponse only after dispatch admission and clears lockNow flag PASSED - -LockdownCoordinatorImplTest > auto-unlock UNLOCK_FAILED with no backoff clears stored passphrase PASSED - -LockdownCoordinatorImplTest > rejected lockNow does not arm the acknowledgement transition PASSED - -LockdownCoordinatorImplTest > submitPassphrase without disable does not set disable flag PASSED - -LockdownCoordinatorImplTest > lockNow flag resets after onConnect PASSED - -LockdownCoordinatorImplTest > onConnect clears session authorization PASSED - -LockdownCoordinatorImplTest > NEEDS_PROVISION sets NeedsProvision state PASSED - -LockdownCoordinatorImplTest > submit after unlock failure saves the replacement passphrase on subsequent success PASSED - -LockdownCoordinatorImplTest > rejected submitPassphrase preserves retryable state and does not stage credentials PASSED - -LockdownCoordinatorImplTest > DISABLED sets Disabled state and clears authorization token and stored passphrase PASSED - -LockdownCoordinatorImplTest > rejected disable preserves stored passphrase and unlocked state PASSED - -LockdownCoordinatorImplTest > UNLOCKED with savePassphrase throwing still authorizes session PASSED - -LockdownCoordinatorImplTest > LOCKED with getPassphrase throwing falls back to Locked state PASSED - -LockdownCoordinatorImplTest > UNLOCKED after submitPassphrase saves passphrase and sets authorized PASSED - -LockdownCoordinatorImplTest > auto-unlock UNLOCK_FAILED with clearPassphrase throwing still sets Locked state PASSED - -LockdownCoordinatorImplTest > LOCKED with stored passphrase enters AwaitingResponse only after dispatch admission PASSED - -LockdownCoordinatorImplTest > STATE_UNSPECIFIED leaves current state unchanged PASSED - -LockdownCoordinatorImplTest > UNLOCKED converts uint32 epoch correctly PASSED - -LockdownCoordinatorImplTest > LOCKED with no device address sets Locked state PASSED - -LockdownCoordinatorImplTest > submitPassphrase with disable clears stored passphrase only after dispatch admission PASSED - -LockdownCoordinatorImplTest > auto-unlock UNLOCK_FAILED with backoff sets UnlockBackoff state PASSED - -PoisonedPoolNodeFlowRecoveryTest > myNodeInfoFlowRecoversAfterAPoisonedPool PASSED - -MeshMessageProcessorImplTest > handleFromRadio with completely invalid bytes does not crash PASSED - -PoisonedPoolNodeFlowRecoveryTest > eagerlySharedNodeStateFlowStillPublishesAfterAPoisonedPool PASSED - -MeshMessageProcessorImplTest > packet audit work is rejected when session lease admission closes PASSED - -MeshMessageProcessorImplTest > session revoked after decode cannot reach packet handlers PASSED - -MeshMessageProcessorImplTest > packets received before myNodeNum is known are buffered until it resolves PASSED - -MeshMessageProcessorImplTest > packets with non-zero rx_time keep their time PASSED - -MeshMessageProcessorImplTest > FromRadio log_record variant is logged as MeshLog PASSED - -MeshMessageProcessorImplTest > packets with rx_time 0 get current time PASSED - -MeshMessageProcessorImplTest > packets with absent rx_time get current time PASSED - -MeshMessageProcessorImplTest > clearEarlyPackets empties the buffer PASSED - -MeshMessageProcessorImplTest > buffer replay pauses without losing order when node DB readiness regresses PASSED - -MeshMessageProcessorImplTest > local sender packet persists one combined node update PASSED - -MeshMessageProcessorImplTest > packet processing awaits node persistence before releasing session authority PASSED - -MeshMessageProcessorImplTest > replacement generation refreshes the local node without waiting for the prior throttle PASSED - -MeshMessageProcessorImplTest > early buffer overflow drops oldest packet PASSED - -MeshMessageProcessorImplTest > processReceivedMeshPacket updates sender node PASSED - -MeshMessageProcessorImplTest > processReceivedMeshPacket updates myNode lastHeard PASSED - -MeshMessageProcessorImplTest > packet with null decoded is skipped PASSED - -MeshMessageProcessorImplTest > buffer survives a reconnect toggle and flushes only once myNodeNum resolves PASSED - -MeshMessageProcessorImplTest > stale session frame is dropped before dispatch or persistence PASSED - -MeshMessageProcessorImplTest > handleFromRadio falls back to LogRecord parsing when FromRadio fails PASSED - -MeshMessageProcessorImplTest > handleFromRadio dispatches non-packet variants to fromRadioDispatcher PASSED - -MeshMessageProcessorImplTest > packets are buffered when node DB is not ready PASSED - -MeshMessageProcessorImplTest > buffered packets are flushed when node DB becomes ready PASSED - -MeshMessageProcessorImplTest > a throwing handler does not propagate out of handleFromRadio PASSED - -MeshMessageProcessorImplTest > buffered packet from retired session is not replayed into replacement session PASSED - -MeshMessageProcessorImplTest > a throwing dataHandler for one buffered packet does not stop the flush or crash PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes CHANNEL to configHandler PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes METADATA to configFlowManager PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes MY_INFO to configFlowManager PASSED - -FromRadioPacketHandlerImplTest > non OTA client notifications are not identified as OTA status PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes MQTT_CLIENT_PROXY_MESSAGE to mqttManager PASSED - -FromRadioPacketHandlerImplTest > revoked session skips direct packet-dispatch branches PASSED - -NodeManagerImplTest > handleReceivedUser sets publicKey from user public_key PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes REGION_PRESETS to configHandler PASSED - -NodeManagerImplTest > loadCachedNodeDB preserves retirement and suppresses reloaded stale replay PASSED - -NodeManagerImplTest > local-node identity learned during the load window survives snapshot commit PASSED - -NodeManagerImplTest > user packet before node-db ready installs without persistence or notification PASSED - -FromRadioPacketHandlerImplTest > default platform policy preserves modal and system delivery for exact advisory PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes CONFIG to configHandler PASSED - -FromRadioPacketHandlerImplTest > stale CONFIG_COMPLETE does not notify lockdown coordinator PASSED - -FromRadioPacketHandlerImplTest > revoked session skips node progress after handler returns PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes QUEUESTATUS to packetHandler PASSED - -FromRadioPacketHandlerImplTest > stale client notification is discarded before publication PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes NODE_INFO to configFlowManager and updates status PASSED - -FromRadioPacketHandlerImplTest > stale NODE_INFO does not update connection progress PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes LOCKDOWN_STATUS to lockdownCoordinator PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes CLIENTNOTIFICATION to serviceRepository PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes CONFIG_COMPLETE_ID to configFlowManager PASSED - -FromRadioPacketHandlerImplTest > OTA status client notifications are identified PASSED - -FromRadioPacketHandlerImplTest > platform-suppressed client notification skips modal state but preserves system delivery PASSED - -FromRadioPacketHandlerImplTest > client alert is skipped when the session retires after publication PASSED - -FromRadioPacketHandlerImplTest > handleFromRadio routes MODULE_CONFIG to configHandler PASSED - -MeshConfigFlowManagerImplTest > Duplicate Stage 1 config_complete does not re-trigger PASSED - -MeshConfigFlowManagerImplTest > Stage 2 complete keeps connected when post NodeDB side effects fail PASSED - -MeshConfigFlowManagerImplTest > Unknown config_complete_id is ignored PASSED - -MeshConfigFlowManagerImplTest > handleLocalMetadata skips empty metadata PASSED - -MeshConfigFlowManagerImplTest > triggerWantConfig delegates to connectionManager startConfigOnly PASSED - -MeshConfigFlowManagerImplTest > handleNodeInfo accumulates nodes during Stage 2 PASSED - -MeshConfigFlowManagerImplTest > config reset holds the session lane until every clear completes PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo applies the event node-event default for event firmware PASSED - -MeshConfigFlowManagerImplTest > handleLocalMetadata outside ReceivingConfig does not call onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > handleNodeInfo during Stage 1 calls onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > active session completes metadata node info and both handshake stages PASSED - -MeshConfigFlowManagerImplTest > Stage 2 complete processes nodes and sets Connected state PASSED - -MeshConfigFlowManagerImplTest > handleFileInfo calls onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > full handshake fires onHandshakeProgress exactly for meaningful events only PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo treats DIY_EDITION as event firmware PASSED - -MeshConfigFlowManagerImplTest > handleLocalMetadata ignored outside ReceivingConfig state PASSED - -MeshConfigFlowManagerImplTest > Stage 1 complete with old firmware logs warning but continues handshake PASSED - -MeshConfigFlowManagerImplTest > handleNodeInfo outside active handshake does not call onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo resets stale handshake state PASSED - -MeshConfigFlowManagerImplTest > Stage 2 complete id ignored when not in ReceivingNodeInfo state PASSED - -MeshConfigFlowManagerImplTest > Stage 2 complete with no nodes still transitions to Connected PASSED - -MeshConfigFlowManagerImplTest > Stage 1 complete calls onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > stale session cannot mutate handshake identity or metadata PASSED - -MeshConfigFlowManagerImplTest > handleNodeInfo during Stage 2 calls onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > Stage 2 complete disconnects when NodeDB install fails PASSED - -MeshConfigFlowManagerImplTest > handleLocalMetadata persists metadata when in ReceivingConfig state PASSED - -MeshConfigFlowManagerImplTest > Full handshake from Idle to Complete PASSED - -MeshConfigFlowManagerImplTest > session revocation during Stage 2 stops remaining persistence and publication PASSED - -MeshConfigFlowManagerImplTest > handleLocalMetadata in ReceivingConfig calls onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > queued MyNodeInfo from an old generation is discarded PASSED - -MeshConfigFlowManagerImplTest > handleNodeInfo buffers nodes received during Stage 1 PASSED - -MeshConfigFlowManagerImplTest > Stage 2 complete cancels watchdog synchronously before async DB install work PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo admits config clearing before returning to the frame consumer PASSED - -MeshConfigFlowManagerImplTest > Stage 2 complete fires onHandshakeComplete exactly once PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo clears persisted radio config PASSED - -MeshConfigFlowManagerImplTest > new active session cannot advance handshake state owned by prior session PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo hex-encodes raw device_id bytes losslessly PASSED - -MeshConfigFlowManagerImplTest > handleFileInfo delegates to radioConfigRepository PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo without a selected address does not publish session identity PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo transitions to ReceivingConfig and sets myNodeNum PASSED - -MeshConfigFlowManagerImplTest > Stage 1 complete sends heartbeat with non-zero nonce between stages PASSED - -MeshConfigFlowManagerImplTest > Stage 1 complete id ignored when not in ReceivingConfig state PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo calls onHandshakeProgress PASSED - -MeshConfigFlowManagerImplTest > Stage 1 complete builds MyNodeInfo and transitions to ReceivingNodeInfo PASSED - -MeshConfigFlowManagerImplTest > handleNodeInfo ignored outside Stage 2 PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo reports an absent device_id as null PASSED - -MeshConfigFlowManagerImplTest > Stage 2 applies trusted migrations before readiness and replay PASSED - -MeshConfigFlowManagerImplTest > newNodeCount returns 0 when not in ReceivingNodeInfo state PASSED - -MeshConfigFlowManagerImplTest > handleMyInfo applies the vanilla node-event default for vanilla firmware PASSED - -MeshConfigFlowManagerImplTest > Stage 1 complete updates progress for node list loading PASSED - -MeshConfigFlowManagerImplTest > Stage 1 complete without metadata still succeeds with null firmware version PASSED - -MessageFilterImplTest > shouldFilter returns false when filter words is empty PASSED - -MessageFilterImplTest > shouldFilter supports regex patterns PASSED - -MessageFilterImplTest > shouldFilter is case insensitive PASSED - -MessageFilterImplTest > shouldFilter returns false when filter is disabled PASSED - -MessageFilterImplTest > shouldFilter returns true for exact word match PASSED - -MessageFilterImplTest > shouldFilter handles invalid regex gracefully PASSED - -MessageFilterImplTest > shouldFilter filters when contact has filtering enabled PASSED - -MessageFilterImplTest > shouldFilter matches whole words only PASSED - -MessageFilterImplTest > shouldFilter returns false when contact has filtering disabled PASSED - -PacketHandlerImplTest > rearm times out a stale persisted ENROUTE reaction after the reconnect grace PASSED - -PacketHandlerImplTest > trySendToRadio reports direct transport admission PASSED - -PacketHandlerImplTest > disconnected fire and forget admission is rejected PASSED - -PacketHandlerImplTest > reconnect while an owned packet waits in the queue prevents stale dispatch PASSED - -PacketHandlerImplTest > queue status without a packet id does not satisfy strict routing waiters PASSED - -PacketHandlerImplTest > rearm gives a fresh ENROUTE packet its full ack window PASSED - -PacketHandlerImplTest > cancelled queue handoff releases its reservation before restarting queued work PASSED - -PacketHandlerImplTest > strict await completes ERRNO_SHOULD_RELEASE even when queue is full PASSED - -PacketHandlerImplTest > queue stop skips persistence lookup for a non-persisted packet PASSED - -PacketHandlerImplTest > duplicate awaited packet id is rejected without replacing the original waiter PASSED - -PacketHandlerImplTest > routing rejection after dispatch completes awaited response as radio rejected PASSED - -PacketHandlerImplTest > response received before dispatch is ignored and retains the queued id PASSED - -PacketHandlerImplTest > strict await treats ERRNO_SHOULD_RELEASE as immediate delivery success PASSED - -PacketHandlerImplTest > missing queue status does not fail a dispatched persisted packet PASSED - -PacketHandlerImplTest > stopping the queue completes an awaiting packet still behind the backlog PASSED - -PacketHandlerImplTest > rearming supersedes the pending timer instead of stacking a second one PASSED - -PacketHandlerImplTest > cancelled strict await releases its packet id after service owned routing expiry PASSED - -PacketHandlerImplTest > packet-specific accepted full queue status completes the matching queue stage PASSED - -PacketHandlerImplTest > strict await does not complete on ordinary queue acceptance PASSED - -PacketHandlerImplTest > rearm times out a stale persisted ENROUTE packet after the reconnect grace PASSED - -PacketHandlerImplTest > queue resumes after a stop and a later send PASSED - -PacketHandlerImplTest > queue stop waits briefly for a persisted reaction row PASSED - -PacketHandlerImplTest > plain send rejects when service scope is already stopped PASSED - -PacketHandlerImplTest > transport refusing dispatch completes awaiting caller with failure PASSED - -PacketHandlerImplTest > handleQueueStatus property test PASSED - -PacketHandlerImplTest > zero id synchronous loopback completes only the active queue entry PASSED - -PacketHandlerImplTest > queue stop does not overwrite a terminal routing result PASSED - -PacketHandlerImplTest > completed packet id can be reused by a later retry PASSED - -PacketHandlerImplTest > awaited send is released when service scope stops before worker starts PASSED - -PacketHandlerImplTest > stopping the queue reports an awaited packet that was already dispatched PASSED - -PacketHandlerImplTest > queue stop after queue acceptance reports missing routing completion PASSED - -PacketHandlerImplTest > strict await fails on routing nak PASSED - -PacketHandlerImplTest > the timeout never fires before its deadline PASSED - -PacketHandlerImplTest > rearm keeps independent timers for persisted rows sharing one mesh packet id PASSED - -PacketHandlerImplTest > fire and forget rejects invalid packet ids without throwing or replacing queued work PASSED - -PacketHandlerImplTest > strict routing wait outlives the local queue response window PASSED - -PacketHandlerImplTest > unacked ENROUTE send times out to a retryable ERROR TIMEOUT PASSED - -PacketHandlerImplTest > await response timeout starts after earlier queued packets PASSED - -PacketHandlerImplTest > cancelling an awaiting caller does not release its queued packet id PASSED - -PacketHandlerImplTest > sendToRadio updates status using the full outgoing packet identity PASSED - -PacketHandlerImplTest > disconnect drains queued responses without restarting the processor PASSED - -PacketHandlerImplTest > sendToRadio with MeshPacket queues and sends when connected PASSED - -PacketHandlerImplTest > testInitialization PASSED - -PacketHandlerImplTest > awaited send rejects when service scope is already stopped PASSED - -PacketHandlerImplTest > disconnected queue admission reports transport stopped PASSED - -PacketHandlerImplTest > strict await treats queue rejection as failure PASSED - -PacketHandlerImplTest > awaited packet without an id is rejected before dispatch PASSED - -PacketHandlerImplTest > strict await succeeds on routing ack PASSED - -PacketHandlerImplTest > sendToRadio with ToRadio sends immediately PASSED - -PacketHandlerImplTest > late queue status cannot replace an already completed response PASSED - -PacketHandlerImplTest > text emoji without reply id remains a persisted app packet PASSED - -PacketHandlerImplTest > service owned routing expiry times out an active strict waiter PASSED - -PacketHandlerImplTest > strict await fails immediately when transport send throws PASSED - -PacketHandlerImplTest > queue send failure completes awaiting caller with failure PASSED - -PacketHandlerImplTest > rearm keeps independent reaction timers when mesh packet ids collide PASSED - -PacketHandlerImplTest > late queue rejection still terminates a strict waiter after confirmation timeout PASSED - -PacketHandlerImplTest > outgoing packets are logged with NODE_NUM_LOCAL PASSED - -PacketHandlerImplTest > missing queue status does not terminate an admitted routing waiter PASSED - -PacketHandlerImplTest > handleQueueStatus completes deferred PASSED - -PacketHandlerImplTest > strict await fails immediately while disconnected PASSED - -PacketHandlerImplTest > reconnect between ownership capture and admission rejects the stale packet PASSED - -PacketHandlerImplTest > dispatch status does not overwrite a terminal routing result PASSED - -PacketHandlerImplTest > unacked ENROUTE reaction times out to a retryable ERROR TIMEOUT PASSED - -XModemManagerImplTest > removes CTRLZ padding from end of file PASSED - -XModemManagerImplTest > successful transfer emits file and ACKs blocks PASSED - -XModemManagerImplTest > handles CAN and resets state PASSED - -XModemManagerImplTest > ignores bad CRC and replies NAK PASSED - -NodeManagerImplTest > eviction never drops the local node PASSED - -NodeManagerImplTest > UNSET hardware with different valid key is preserved as conflict PASSED - -NodeManagerImplTest > handleReceivedTelemetry updates device metrics PASSED - -NodeManagerImplTest > notification has exact title message ID category and deep link PASSED - -NodeManagerImplTest > reverse ID and public-key indexes stay consistent across put replacement and remove PASSED - -NodeManagerImplTest > byId index points to canonical survivor after stale removal shares user id PASSED - -NodeManagerImplTest > genuine new node fires exactly one upsert and exactly one notification PASSED - -NodeManagerImplTest > incoming canonical absent from index creates from packet removes noncanonical no notify PASSED - -NodeManagerImplTest > pre-ready user packet stays notification-suppressed across a CAS retry PASSED - -NodeManagerImplTest > handleReceivedPosition updates node position PASSED - -NodeManagerImplTest > custom incomplete identity is preserved over default incoming PASSED - -NodeManagerImplTest > toNodeID returns default hex ID for unknown node PASSED - -NodeManagerImplTest > applyTrustedIdentityMigrations cancels notifications for each retired number PASSED - -NodeManagerImplTest > handleReceivedTelemetry with null metrics does not crash PASSED - -NodeManagerImplTest > handleReceivedTelemetry updates lastHeard PASSED - -> Task :core:database:allTests - -> Task :core:navigation:jvmTest - -NavBackStackExtTest[jvm] > replaceLast on empty list adds the element()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceAll replaces entire stack with new routes()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceLast on single-element list replaces that element()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceLast with same element does not mutate()[jvm] PASSED - -NavBackStackExtTest[jvm] > rapid double popUnlessRoot stops at the root()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceAll with shorter list trims excess elements()[jvm] PASSED - -NavBackStackExtTest[jvm] > popUnlessRoot pops the top entry above the root()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceAll on empty stack with new routes populates it()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceAll with partial overlap only changes differing elements()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceAll with identical routes does not mutate entries()[jvm] PASSED - -NavBackStackExtTest[jvm] > popUnlessRoot on an empty stack is a no-op()[jvm] PASSED - -NavBackStackExtTest[jvm] > popUnlessRoot refuses to pop the root entry()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceLast on non-empty list replaces the last element()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceAll with empty list clears the stack()[jvm] PASSED - -NavBackStackExtTest[jvm] > replaceAll with longer list appends new elements()[jvm] PASSED - -MultiBackstackTest[jvm] > navigateTopLevel to different tab preserves previous tab stack and activates new tab stack()[jvm] PASSED - -MultiBackstackTest[jvm] > goBack at root of start tab keeps the root entry()[jvm] PASSED - -MultiBackstackTest[jvm] > handleDeepLink to unknown nested route on missing tab is a no-op and never throws()[jvm] PASSED - -MultiBackstackTest[jvm] > goBack pops current stack if size is greater than 1()[jvm] PASSED - -MultiBackstackTest[jvm] > navigateTopLevel to a tab with an empty stack self-heals to that tab root()[jvm] PASSED - -MultiBackstackTest[jvm] > handleDeepLink to a nested non-tab route pushes onto current tab without crashing()[jvm] PASSED - -MultiBackstackTest[jvm] > navigateTopLevel to same tab resets stack to root()[jvm] PASSED - -MultiBackstackTest[jvm] > rapid double goBack from depth two never empties the stack()[jvm] PASSED - -MultiBackstackTest[jvm] > goBack on root of non-start tab returns to start tab()[jvm] PASSED - -MultiBackstackTest[jvm] > handleDeepLink from different tab switches tab and sets stack()[jvm] PASSED - -MultiBackstackTest[jvm] > handleDeepLink sets target tab and populates stack()[jvm] PASSED - -MultiBackstackTest[jvm] > activeBackStack self-heals a stack drained by a stale back handler()[jvm] PASSED - -MultiBackstackTest[jvm] > activeBackStack self-heals a stack restored empty from saved state()[jvm] PASSED - -> Task :core:model:compileAndroidHostTest - -> Task :core:data:testAndroidHostTest - -NodeManagerImplTest > a flood of novel node numbers cannot grow the in-memory index without bound PASSED - -NodeManagerImplTest > retired number rejects delayed field sequence without persistence PASSED - -NodeManagerImplTest > session-bound node persistence from a retired generation is rejected PASSED - -NodeManagerImplTest > toNodeID returns broadcast ID for broadcast nodeNum PASSED - -NodeManagerImplTest > genuine remote first sighting emits exactly one notification PASSED - -NodeManagerImplTest > retired number with same key suppressed even without canonical key candidate PASSED - -NodeManagerImplTest > same number same key updates normally without stale classification PASSED - -NodeManagerImplTest > repeated trusted migration preserves original hint and still permits distinct-key reuse PASSED - -NodeManagerImplTest > keyless retired number rejects an unrepresented valid key for the session PASSED - -NodeManagerImplTest > eviction never drops user-marked nodes PASSED - -NodeManagerImplTest > ambiguous noncanonical renumber installs identity into empty slot in memory PASSED - -NodeManagerImplTest > handleReceivedUser preserves existing user if incoming is default PASSED - -NodeManagerImplTest > handleReceivedPosition keeps precise position when a coarse report lands in the same box PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:model:jvmTest - -CapabilitiesTest[jvm] > supportsEsp32Ota_requires_V2_7_18()[jvm] PASSED - -CapabilitiesTest[jvm] > offers_hides_a_deprecated_field_at_deprecated_since_unless_set()[jvm] PASSED - -CapabilitiesTest[jvm] > supportsQrCodeSharing_requires_V2_6_8()[jvm] PASSED - -CapabilitiesTest[jvm] > offers_hides_a_field_below_since_firmware()[jvm] PASSED - -CapabilitiesTest[jvm] > offers_an_unannotated_field_everywhere()[jvm] PASSED - -CapabilitiesTest[jvm] > supportsRegion_gates_2_8_regions_but_not_established_ones()[jvm] PASSED - -CapabilitiesTest[jvm] > offers_everything_when_forceEnableAll()[jvm] PASSED - -CapabilitiesTest[jvm] > nullFirmware_returns_all_false()[jvm] PASSED - -CapabilitiesTest[jvm] > canToggleUnmessageable_requires_V2_6_9()[jvm] PASSED - -CapabilitiesTest[jvm] > supportsLockdown_requires_V2_8_0()[jvm] PASSED - -CapabilitiesTest[jvm] > canMuteNode_requires_V2_7_18()[jvm] PASSED - -CapabilitiesTest[jvm] > supportsPreset_gates_2_8_presets_but_not_established_ones()[jvm] PASSED - -CapabilitiesTest[jvm] > supportsTakConfig_requires_V2_8_0()[jvm] PASSED - -CapabilitiesTest[jvm] > offers_rejects_an_unparseable_schema_version()[jvm] PASSED - -CapabilitiesTest[jvm] > forceEnableAll_returns_true_regardless_of_version()[jvm] PASSED - -CapabilitiesTest[jvm] > canSendVerifiedContacts_requires_V2_7_12()[jvm] PASSED - -CapabilitiesTest[jvm] > canRequestNeighborInfo_is_currently_disabled()[jvm] PASSED - -CapabilitiesTest[jvm] > supportsSecondaryChannelLocation_requires_V2_6_10()[jvm] PASSED - -CapabilitiesTest[jvm] > supportsStatusMessage_requires_V2_7_20()[jvm] PASSED - -DeviceVersionTest[jvm] > comparisonIsCorrect()[jvm] PASSED - -DeviceVersionTest[jvm] > invalidVersionReturns_zero()[jvm] PASSED - -DeviceVersionTest[jvm] > canParse()[jvm] PASSED - -DeviceVersionTest[jvm] > checkStatus_classifiesKnownVersions()[jvm] PASSED - -DeviceVersionTest[jvm] > twoPartVersionAppends_zero()[jvm] PASSED - -DeviceVersionTest[jvm] > checkStatus_unparseableIsUnknownNotTooOld()[jvm] PASSED - -ChannelHashTest[jvm] > aeadFoldsMarkerIntoHash()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > an UNSET map entry marks even a LongFast pin as deliberate at fresh setup()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > region default preset is LongTurbo for US and absent for other regions()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > constraint resolves the region's preset group()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > fresh setup placeholder adopts the region's advertised default()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > repair keeps a preset that is legal in the region()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > region change keeps a legal placeholder when not fresh setup()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > fresh setup never adopts a malformed map's illegal advertised default()[jvm] PASSED - -ChannelHashTest[jvm] > aeadDoesNotChangeIdentity()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > region absent from region_groups is unconstrained()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > a pin stated via UNSET entry is still repaired when illegal in the region()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > repair swaps an illegal preset to the region default()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > licensed_only group is gated only for an unlicensed operator()[jvm] PASSED - -ChannelHashTest[jvm] > defaultChannelHashMatchesFirmware()[jvm] PASSED - -ExcludedModuleTest[jvm] > no bits set excludes nothing()[jvm] PASSED - -ExcludedModuleTest[jvm] > metadata not read yet excludes nothing()[jvm] PASSED - -ExcludedModuleTest[jvm] > a set bit excludes only its own module()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > a group with no presets is treated as unconstrained()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > fresh setup pin that is illegal in the region is still repaired()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > repair falls back to the first legal preset when the default is not in the group()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > fresh US setup adopts LongTurbo over the advertised LongFast default()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > region change keeps a legal preset when not fresh setup()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > out of range group_index is treated as unconstrained()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > first-setup default is offered when the map lists it as legal()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > no first-setup default when the map omits it from the region()[jvm] PASSED - -LocalStatsTest[jvm] > a real reading passes through unchanged()[jvm] PASSED - -LocalStatsTest[jvm] > the never-reported sentinel maps to null()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > unlicensed group is never gated()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > fresh setup keeps a deliberately pinned legal preset()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > fresh setup keeps LongFast when firmware advertises no map()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > a later US change on the advertised map keeps the running preset()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > null map imposes no constraint()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > fresh setup falls back to the advertised default when the built-in is illegal there()[jvm] PASSED - -LoRaRegionPresetsTest[jvm] > no first-setup default is offered without a map()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > non_string_primitive_payload_is_coerced_to_text()[jvm] PASSED - -MessageTest[jvm] > getStatusStringRes_returnsMessageSpecificRoutingResources()[jvm] PASSED - -MessageTest[jvm] > getStringResFrom_keepsSharedRoutingResourcesForGenericContexts()[jvm] PASSED - -MessageTest[jvm] > messageConstruction_preservesProperties()[jvm] PASSED - -MessageTest[jvm] > getStatusStringRes_returnsErrorResourcesForRoutingFailures()[jvm] PASSED - -MessageTest[jvm] > isMessageStatusRetryable_allowsRetryForRetryableMessageStatusesOnly()[jvm] PASSED - -MessageTest[jvm] > getStatusStringRes_returnsDeliveryResources()[jvm] PASSED - -MessageTest[jvm] > getMessageStatusDetailRes_returnsActionableRoutingFailureDetails()[jvm] PASSED - -MessageTest[jvm] > getStatusStringRes_returnsUnknownForMissingStatus()[jvm] PASSED - -MessageTest[jvm] > getStatusStringRes_returnsDirectImplicitAckResourceForDirectMessages()[jvm] PASSED - -MessageTest[jvm] > getStatusStringRes_returnsSendingResourceForPendingMessages()[jvm] PASSED - -MessageTest[jvm] > getStatusStringRes_returnsRecipientDeliveryResource()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > string_payload_round_trips_as_string()[jvm] PASSED - -MessageTest[jvm] > getStringResFrom_mapsUnknownValuesToUnrecognized()[jvm] PASSED - -NodeTest[jvm] > isUnknownUser_falseWhenHardwareModelIsKnown()[jvm] PASSED - -NodeTest[jvm] > matchesSearch_isCaseInsensitiveForNonAsciiLetters()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > null_payload_decodes_to_null()[jvm] PASSED - -NodeTest[jvm] > matchesSearch_toleratesAnAbsentStatusMessage()[jvm] PASSED - -NodeTest[jvm] > createFallback_createsUnknownUserWithDerivedNames()[jvm] PASSED - -NodeTest[jvm] > validPosition_returnsPositionOnlyForValidCoordinates()[jvm] PASSED - -NodeTest[jvm] > matchesSearch_matchesTheStatusMessage()[jvm] PASSED - -NodeTest[jvm] > isUnheardOnCurrentLora is true for a node not heard on the config in force now()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > garbage_input_still_fails()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > array_payload_decodes_to_compact_json_text()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > object_payload_decodes_to_compact_json_text()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > absent_payload_decodes_to_null()[jvm] PASSED - -MqttJsonPayloadTest[jvm] > string_payload_decodes_unchanged()[jvm] PASSED - -RegionInfoTest[jvm] > eu_866_lite_gives_four_600kHz_slots()[jvm] PASSED - -RegionInfoTest[jvm] > explicit_channel_num_wins_over_override_slot()[jvm] PASSED - -NodeTest[jvm] > isOnline_usesStrictThresholdBoundary()[jvm] PASSED - -NodeTest[jvm] > hasPKC_usesUserPublicKeyWhenNodeKeyIsMissing()[jvm] PASSED - -NodeTest[jvm] > bearing_returnsCardinalDirections()[jvm] PASSED - -NodeTest[jvm] > getRelayNode_filtersCandidatesAndChoosesFewestHops()[jvm] PASSED - -NodeTest[jvm] > colors_returnsForegroundAndBackgroundValues()[jvm] PASSED - -NodeTest[jvm] > matchesSearch_matchesHexAndDecimalNodeId()[jvm] PASSED - -RegionInfoTest[jvm] > ham_2m_regions_use_20kHz_slots()[jvm] PASSED - -RegionInfoTest[jvm] > ensure_firmware_regions_are_mapped_in_RegionInfo()[jvm] PASSED - -NodeTest[jvm] > distance_returnsMetersForKnownCoordinates()[jvm] PASSED - -NodeTest[jvm] > isUnheardOnCurrentLora excludes MQTT nodes the radio never heard over RF()[jvm] PASSED - -NodeTest[jvm] > mismatchKey_trueForErrorByteString()[jvm] PASSED - -NodeTest[jvm] > matchesSearch_blankFilterMatchesEveryNode()[jvm] PASSED - -RegionInfoTest[jvm] > ham_70cm_and_125cm_regions_use_100kHz_slots()[jvm] PASSED - -RegionInfoTest[jvm] > standard_regions_keep_legacy_slot_math()[jvm] PASSED - -RegionInfoTest[jvm] > eu_n_868_narrow_defaults_to_first_slot()[jvm] PASSED - -GeofenceRadiusPresetsTest[jvm] > nearestSnapsToClosestPreset()[jvm] PASSED - -GeofenceRadiusPresetsTest[jvm] > bothListsStartWithOff()[jvm] PASSED - -GeofenceRadiusPresetsTest[jvm] > forUnitsSelectsBySystem()[jvm] PASSED - -CodePointUtilsTest[jvm] > zero renders as a control character without the waypoint helper()[jvm] PASSED - -CodePointUtilsTest[jvm] > firstCodePointOrNull combines a surrogate pair()[jvm] PASSED - -CodePointUtilsTest[jvm] > waypointIconOrDefault leaves a chosen icon alone()[jvm] PASSED - -CodePointUtilsTest[jvm] > toCodePointString honours an explicit fallback()[jvm] PASSED - -CodePointUtilsTest[jvm] > isValidCodePoint accepts scalar values()[jvm] PASSED - -CodePointUtilsTest[jvm] > toCodePointString encodes bmp and supplementary planes()[jvm] PASSED - -CodePointUtilsTest[jvm] > isValidCodePoint rejects out of range and surrogates()[jvm] PASSED - -CodePointUtilsTest[jvm] > toCodePointString falls back instead of throwing on out-of-range input()[jvm] PASSED - -CodePointUtilsTest[jvm] > firstCodePointOrNull returns null for an empty string rather than throwing()[jvm] PASSED - -ChannelOptionTest[jvm] > ensure_every_ModemPreset_is_mapped_in_ChannelOption()[jvm] PASSED - -CodePointUtilsTest[jvm] > waypointIconOrDefault maps the unset icon to the pushpin()[jvm] PASSED - -CodePointUtilsTest[jvm] > firstCodePointOrNull reads a basic-plane character as itself()[jvm] PASSED - -MeshDataMapperTest[jvm] > toDataPacket_preservesAbsentRssiRatherThanCoercingToZero()[jvm] PASSED - -MeshDataMapperTest[jvm] > meshUser_defaultsEmptyFieldsFromEmptyProto()[jvm] PASSED - -MeshDataMapperTest[jvm] > environmentMetrics_filtersSentinelAndInvalidValues()[jvm] PASSED - -MeshDataMapperTest[jvm] > environmentMetrics_mapsTelemetryFields()[jvm] PASSED - -MeshDataMapperTest[jvm] > toDataPacket_keepsAReportedZeroRssiDistinctFromAbsent()[jvm] PASSED - -MeshDataMapperTest[jvm] > toDataPacket_mapsMeshPacketFields()[jvm] PASSED - -MeshDataMapperTest[jvm] > toDataPacket_usesPkcChannelWhenPacketIsPkiEncrypted()[jvm] PASSED - -MeshDataMapperTest[jvm] > deviceMetrics_mapsProtoFields()[jvm] PASSED - -MeshDataMapperTest[jvm] > deviceMetrics_defaultsUnsetFieldsToZero()[jvm] PASSED - -ChannelOptionTest[jvm] > ensure_no_extra_mappings_exist_in_ChannelOption()[jvm] PASSED - -ActiveWaypointsTest[jvm] > geofencesToMonitorKeepsOwnDropsForeign()[jvm] PASSED - -ActiveWaypointsTest[jvm] > geofencesToMonitorIncludesOptedInForeign()[jvm] PASSED - -ActiveWaypointsTest[jvm] > latestTransmissionWinsPerWaypointId()[jvm] PASSED - -ActiveWaypointsTest[jvm] > expiredWaypointsAreDropped()[jvm] PASSED - -ActiveWaypointsTest[jvm] > geofencesToMonitorDropsWaypointsWithNoCrossingNotifications()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_ignores_readings_older_than_the_twelve_hour_window()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_returns_null_when_second_valid_hour_is_outside_recent_three()[jvm] PASSED - -AirQualityIndexTest[jvm] > nowCastAqiSeries_drops_history_older_than_the_twelve_hour_window()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_averages_stable_readings_with_weight_factor_one()[jvm] PASSED - -AirQualityIndexTest[jvm] > nowCastAqiSeries_is_empty_for_no_readings()[jvm] PASSED - -AirQualityIndexTest[jvm] > pm25ToAqi_clamps_negative_and_above_scale_concentrations()[jvm] PASSED - -AirQualityIndexTest[jvm] > pm25ToAqi_uses_2024_breakpoints_for_low_concentrations()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_averages_multiple_readings_within_the_same_hour()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_weights_recent_hours_more_heavily_when_declining()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_returns_null_with_fewer_than_two_valid_hours()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_applies_minimum_weight_factor_floor()[jvm] PASSED - -AirQualityIndexTest[jvm] > pm25ToAqi_matches_epa_breakpoint_table()[jvm] PASSED - -AirQualityIndexTest[jvm] > computeNowCastPm25_returns_null_when_most_recent_hour_missing()[jvm] PASSED - -AirQualityIndexTest[jvm] > nowCastAqiSeries_returns_an_entry_per_reading_in_input_order()[jvm] PASSED - -AirQualityIndexTest[jvm] > nowCastAqiSeries_scopes_each_point_to_its_own_timestamp_not_the_newest()[jvm] PASSED - -AirQualityIndexTest[jvm] > nowCastAqiSeries_yields_null_where_a_gap_breaks_the_epa_minimum_data_rule()[jvm] PASSED - -AirQualityIndexTest[jvm] > nowCastAqiSeries_leaves_the_first_reading_null_because_one_hour_is_below_the_epa_minimum()[jvm] PASSED - -AirQualityIndexTest[jvm] > nowCastAqiSeries_matches_computeNowCastPm25_at_the_final_point()[jvm] PASSED - -MeshDataMapperTest[jvm] > position_usesDefaultTimeAndZeroValuesForUnsetProtoFields()[jvm] PASSED - -MeshDataMapperTest[jvm] > meshUser_mapsProtoFields()[jvm] PASSED - -FirmwareUpdateNoticePolicyTest[jvm] > dedupe key scopes notifications to node hardware target and stable version()[jvm] PASSED - -FirmwareUpdateNoticePolicyTest[jvm] > dedupe only suppresses a previously scheduled notification()[jvm] PASSED - -MeshDataMapperTest[jvm] > position_mapsScaledCoordinatesAndProvidedTime()[jvm] PASSED - -MeshDataMapperTest[jvm] > toDataPacket_returnsNullWhenPacketHasNoDecodedData()[jvm] PASSED - -TelemetryChannelsTest[jvm] > absentLegacyListLeavesMetricsUnchanged()[jvm] PASSED - -TelemetryChannelsTest[jvm] > legacyListIsLiftedOntoPerChannelFields()[jvm] PASSED - -TelemetryChannelsTest[jvm] > perChannelValuesWinOverLegacyList()[jvm] PASSED - -TelemetryChannelsTest[jvm] > outOfRangeChannelIsNullRatherThanAnError()[jvm] PASSED - -TelemetryChannelsTest[jvm] > oneWireAccessorReadsEveryChannelInOrder()[jvm] PASSED - -TelemetryChannelsTest[jvm] > adcAccessorReadsEveryChannelInOrder()[jvm] PASSED - -TelemetryChannelsTest[jvm] > measuredZeroIsDistinctFromAbsentChannel()[jvm] PASSED - -TelemetryChannelsTest[jvm] > withAccessorsIgnoreOutOfRangeChannels()[jvm] PASSED - -TelemetryChannelsTest[jvm] > legacyListLongerThanTheChannelRangeIsTruncated()[jvm] PASSED - -TelemetryChannelsTest[jvm] > withAccessorsSetOnlyTheTargetChannel()[jvm] PASSED - -FirmwareUpdateNoticePolicyTest[jvm] > selects Meshtastic Flasher when Android cannot update the hardware over the active connection()[jvm] PASSED - -WireExtensionsTest[jvm] > null bytes short-circuit without touching the logger()[jvm] PASSED - -FirmwareUpdateNoticePolicyTest[jvm] > creates an informational OTA update notice for an older connected ESP32 node()[jvm] PASSED - -FirmwareUpdateNoticePolicyTest[jvm] > does not create a notice when the stable manifest omits the hardware target()[jvm] PASSED - -FirmwareUpdateNoticePolicyTest[jvm] > does not create a notice for missing malformed current equal or newer versions()[jvm] PASSED - -WireExtensionsTest[jvm] > no logger means no log line only null()[jvm] PASSED - -WireExtensionsTest[jvm] > a decode failure logs at WARN not ERROR()[jvm] PASSED - -WireExtensionsTest[jvm] > the ByteArray overload delegates the same WARN behavior()[jvm] PASSED - -ChannelSetUrlTest[jvm] > all supported channel counts preserve settings for replace and add()[jvm] PASSED - -ChannelSetUrlTest[jvm] > legacy fragment add parameter remains add mode alongside other parameters()[jvm] PASSED - -SnrExtensionsTest[jvm] > snrOrNull reports a negative reading()[jvm] PASSED - -SnrExtensionsTest[jvm] > snrOrNull does not conflate a zero reading with an unknown one()[jvm] PASSED - -SnrExtensionsTest[jvm] > snrOrNull reports a positive reading()[jvm] PASSED - -SnrExtensionsTest[jvm] > snrOrNull treats a true zero as a measurement rather than as absent()[jvm] PASSED - -MentionTest[jvm] > textMentionsNode matches case-insensitively()[jvm] PASSED - -MentionTest[jvm] > textMentionsNode empty or unknown local id never matches()[jvm] PASSED - -MentionTest[jvm] > textMentionsNode matches an exact mention token()[jvm] PASSED - -MentionTest[jvm] > MENTION_TOKEN_REGEX captures the hex id and rejects trailing hex()[jvm] PASSED - -MentionTest[jvm] > textMentionsNode does not match a different node()[jvm] PASSED - -MentionTest[jvm] > textMentionsNode does not match plain text without the token()[jvm] PASSED - -MentionTest[jvm] > textMentionsNode does not match when trailing hex extends the id()[jvm] PASSED - -MentionTest[jvm] > textMentionsNode matches a mention at the end of text()[jvm] PASSED - -NodeAddressTest[jvm] > toContactKey_nonZeroChannel()[jvm] PASSED - -NodeAddressTest[jvm] > idToNum_overflow_returnsNull()[jvm] PASSED - -NodeAddressTest[jvm] > numToDefaultId_zero_padsToEightChars()[jvm] PASSED - -NodeAddressTest[jvm] > idToNum_null_returnsNull()[jvm] PASSED - -NodeAddressTest[jvm] > contactKey_channelOrNull_returnsDigitForPrefixedKey()[jvm] PASSED - -NodeAddressTest[jvm] > numToDefaultId_maxInt_formatsCorrectly()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_isBroadcast_trueForBroadcastDestination()[jvm] PASSED - -NodeAddressTest[jvm] > contactKey_broadcast_factory()[jvm] PASSED - -NodeAddressTest[jvm] > toIdString_byId()[jvm] PASSED - -NodeAddressTest[jvm] > contactKey_emptyKey_isSafe()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_source_parsesLocal()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:navigation:jvmTest - -NavigationConfigTest[jvm] > all sealed route interfaces are represented in the route instances list()[jvm] PASSED - -NavigationConfigTest[jvm] > route instances with default parameters serialize correctly()[jvm] PASSED - -NavigationConfigTest[jvm] > all route instances round-trip through SavedState serialization()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:data:jvmTest - -FuzzyNameResolverTest[jvm] > longestCommonSubstring_partial_match()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > longestCommonSubstring_exact_match()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes CHANNEL to configHandler()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes METADATA to configFlowManager()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes MY_INFO to configFlowManager()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > non OTA client notifications are not identified as OTA status()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes MQTT_CLIENT_PROXY_MESSAGE to mqttManager()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > revoked session skips direct packet-dispatch branches()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes REGION_PRESETS to configHandler()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > default platform policy preserves modal and system delivery for exact advisory()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes CONFIG to configHandler()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > stale CONFIG_COMPLETE does not notify lockdown coordinator()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > revoked session skips node progress after handler returns()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes QUEUESTATUS to packetHandler()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > stale client notification is discarded before publication()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes NODE_INFO to configFlowManager and updates status()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > stale NODE_INFO does not update connection progress()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes LOCKDOWN_STATUS to lockdownCoordinator()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes CLIENTNOTIFICATION to serviceRepository()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes CONFIG_COMPLETE_ID to configFlowManager()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > OTA status client notifications are identified()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > platform-suppressed client notification skips modal state but preserves system delivery()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > client alert is skipped when the session retires after publication()[jvm] PASSED - -FromRadioPacketHandlerImplTest[jvm] > handleFromRadio routes MODULE_CONFIG to configHandler()[jvm] PASSED - -HistoryManagerImplTest[jvm] > buildStoreForwardHistoryRequest clamps non-positive parameters()[jvm] PASSED - -HistoryManagerImplTest[jvm] > buildStoreForwardHistoryRequest copies positive parameters()[jvm] PASSED - -HistoryManagerImplTest[jvm] > requestHistoryReplay rejects a missing device before queue admission()[jvm] PASSED - -HistoryManagerImplTest[jvm] > resolveHistoryRequestParameters falls back to defaults when non-positive()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveNodeName_not_found_when_no_match()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveNodeName_not_found_when_no_nodes()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > longestCommonSubstring_case_sensitive()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveNodeName_ambiguous_returns_candidates()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > nodeNameResult_found_carries_data()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveNodeName_exact_match_case_insensitive()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > longestCommonSubstring_empty_string()[jvm] PASSED - -HistoryManagerImplTest[jvm] > requestHistoryReplay surfaces owned queue rejection()[jvm] PASSED - -HistoryManagerImplTest[jvm] > resolveHistoryRequestParameters uses config values when positive()[jvm] PASSED - -HistoryManagerImplTest[jvm] > requestHistoryReplay binds queue admission to the expected connection()[jvm] PASSED - -HistoryManagerImplTest[jvm] > requestHistoryReplay rejects a missing local node before queue admission()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > UNLOCKED after auto-replay does not overwrite stored passphrase()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveChannelName_not_found_when_empty()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > nodeNameResult_ambiguous_carries_candidates()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > longestCommonSubstring_no_match()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveChannelName_exact_match()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > channelNameResult_found_carries_data()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveNodeName_fuzzy_match_single_candidate()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > resolveChannelName_excludes_admin_channel()[jvm] PASSED - -FuzzyNameResolverTest[jvm] > longestCommonSubstring_longer_second()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > publish then clear sets and nulls connectionIdentity()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > publish with null deviceId keeps address and nodeNum set()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > generation-aware clear preserves fresh identity and removes stale identity()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > loadCachedNodeDB does not populate connectionIdentity()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > clearing a session removes its address-bound identity()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > connectionIdentity StateFlow emits only distinct values()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > clear resets connectionIdentity alongside other state()[jvm] PASSED - -NodeManagerConnectionIdentityTest[jvm] > connectionIdentity diagnostic text redacts persistent identifiers()[jvm] PASSED - -PacketHandlerImplTest[jvm] > rearm times out a stale persisted ENROUTE reaction after the reconnect grace()[jvm] PASSED - -RateLimiterTest[jvm] > rejects_calls_over_limit()[jvm] PASSED - -RateLimiterTest[jvm] > retry_after_is_accurate()[jvm] PASSED - -RateLimiterTest[jvm] > permits_after_window_expires()[jvm] PASSED - -PacketHandlerImplTest[jvm] > trySendToRadio reports direct transport admission()[jvm] PASSED - -PacketHandlerImplTest[jvm] > disconnected fire and forget admission is rejected()[jvm] PASSED - -RateLimiterTest[jvm] > permits_calls_under_limit()[jvm] PASSED - -RateLimiterTest[jvm] > sliding_window_evicts_oldest_entry()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > LOCKED with stored passphrase stays retryable when dispatch is rejected()[jvm] PASSED - -PacketHandlerImplTest[jvm] > reconnect while an owned packet waits in the queue prevents stale dispatch()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > UNLOCK_FAILED with backoff sets UnlockBackoff state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > LOCKED with no stored passphrase sets Locked state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > NEEDS_PROVISION after lockNow does not trigger LockNowAcknowledged()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > UNLOCK_FAILED with no backoff sets UnlockFailed state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > UNLOCKED with no deviceAddress skips save but still authorizes()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > onDisconnect resets all lockdown state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > lockNow followed by LOCKED triggers LockNowAcknowledged()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > submitPassphrase enters AwaitingResponse only after dispatch admission and clears lockNow flag()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > auto-unlock UNLOCK_FAILED with no backoff clears stored passphrase()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > rejected lockNow does not arm the acknowledgement transition()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > submitPassphrase without disable does not set disable flag()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > lockNow flag resets after onConnect()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > onConnect clears session authorization()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > NEEDS_PROVISION sets NeedsProvision state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > submit after unlock failure saves the replacement passphrase on subsequent success()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > rejected submitPassphrase preserves retryable state and does not stage credentials()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > DISABLED sets Disabled state and clears authorization token and stored passphrase()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > rejected disable preserves stored passphrase and unlocked state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > UNLOCKED with savePassphrase throwing still authorizes session()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > LOCKED with getPassphrase throwing falls back to Locked state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > UNLOCKED after submitPassphrase saves passphrase and sets authorized()[jvm] PASSED - -PacketHandlerImplTest[jvm] > queue status without a packet id does not satisfy strict routing waiters()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > auto-unlock UNLOCK_FAILED with clearPassphrase throwing still sets Locked state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > LOCKED with stored passphrase enters AwaitingResponse only after dispatch admission()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > STATE_UNSPECIFIED leaves current state unchanged()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > UNLOCKED converts uint32 epoch correctly()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > LOCKED with no device address sets Locked state()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > submitPassphrase with disable clears stored passphrase only after dispatch admission()[jvm] PASSED - -LockdownCoordinatorImplTest[jvm] > auto-unlock UNLOCK_FAILED with backoff sets UnlockBackoff state()[jvm] PASSED - -PacketHandlerImplTest[jvm] > rearm gives a fresh ENROUTE packet its full ack window()[jvm] PASSED - -PacketHandlerImplTest[jvm] > cancelled queue handoff releases its reservation before restarting queued work()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await completes ERRNO_SHOULD_RELEASE even when queue is full()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleChannel calls onHandshakeProgress()[jvm] PASSED - -PacketHandlerImplTest[jvm] > queue stop skips persistence lookup for a non-persisted packet()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > start wires localConfig flow from repository()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleRegionPresets persists map()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleModuleConfig with statusmessage updates node status()[jvm] PASSED - -PacketHandlerImplTest[jvm] > duplicate awaited packet id is rejected without replacing the original waiter()[jvm] PASSED - -PacketHandlerImplTest[jvm] > routing rejection after dispatch completes awaited response as radio rejected()[jvm] PASSED - -PacketHandlerImplTest[jvm] > response received before dispatch is ignored and retains the queued id()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleChannel persists channel settings()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await treats ERRNO_SHOULD_RELEASE as immediate delivery success()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > stale session cannot persist config or advance handshake()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > active session persists device config and advances handshake()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleChannel shows progress without max channels when myNodeInfo unavailable()[jvm] PASSED - -PacketHandlerImplTest[jvm] > missing queue status does not fail a dispatched persisted packet()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleChannel shows progress with max channels when myNodeInfo available()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > module config remains persisted when node status persistence fails()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleDeviceConfig persists config and updates progress()[jvm] PASSED - -PacketHandlerImplTest[jvm] > stopping the queue completes an awaiting packet still behind the backlog()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > start wires moduleConfig flow from repository()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleModuleConfig with statusmessage skipped when myNodeNum is null()[jvm] PASSED - -PacketHandlerImplTest[jvm] > rearming supersedes the pending timer instead of stacking a second one()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleModuleConfig persists config and updates progress()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > revoked session cannot complete queued config persistence()[jvm] PASSED - -PacketHandlerImplTest[jvm] > cancelled strict await releases its packet id after service owned routing expiry()[jvm] PASSED - -PacketHandlerImplTest[jvm] > packet-specific accepted full queue status completes the matching queue stage()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await does not complete on ordinary queue acceptance()[jvm] PASSED - -PacketHandlerImplTest[jvm] > rearm times out a stale persisted ENROUTE packet after the reconnect grace()[jvm] PASSED - -PacketHandlerImplTest[jvm] > queue resumes after a stop and a later send()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleDeviceConfig handles all config variants()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleModuleConfig calls onHandshakeProgress()[jvm] PASSED - -PacketHandlerImplTest[jvm] > queue stop waits briefly for a persisted reaction row()[jvm] PASSED - -PacketHandlerImplTest[jvm] > plain send rejects when service scope is already stopped()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleDeviceConfig calls onHandshakeProgress()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleDeviceUIConfig calls onHandshakeProgress()[jvm] PASSED - -PacketHandlerImplTest[jvm] > transport refusing dispatch completes awaiting caller with failure()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > module config cancellation cancels node status persistence job()[jvm] PASSED - -MeshConfigHandlerImplTest[jvm] > handleDeviceUIConfig persists config()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > handleFromRadio with completely invalid bytes does not crash()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packet audit work is rejected when session lease admission closes()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > session revoked after decode cannot reach packet handlers()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packets received before myNodeNum is known are buffered until it resolves()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packets with non-zero rx_time keep their time()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > FromRadio log_record variant is logged as MeshLog()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packets with rx_time 0 get current time()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packets with absent rx_time get current time()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > clearEarlyPackets empties the buffer()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > buffer replay pauses without losing order when node DB readiness regresses()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > local sender packet persists one combined node update()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packet processing awaits node persistence before releasing session authority()[jvm] PASSED - -PacketHandlerImplTest[jvm] > handleQueueStatus property test()[jvm] PASSED - -PacketHandlerImplTest[jvm] > zero id synchronous loopback completes only the active queue entry()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > replacement generation refreshes the local node without waiting for the prior throttle()[jvm] PASSED - -PoisonedPoolNodeFlowRecoveryTest[jvm] > nodeDbFlowRecoversAfterMoreFailuresThanTheRecoveryBudgetAllows()[jvm] PASSED - -PacketHandlerImplTest[jvm] > queue stop does not overwrite a terminal routing result()[jvm] PASSED - -PacketHandlerImplTest[jvm] > completed packet id can be reused by a later retry()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > early buffer overflow drops oldest packet()[jvm] PASSED - -PoisonedPoolNodeFlowRecoveryTest[jvm] > myNodeInfoFlowRecoversAfterAPoisonedPool()[jvm] PASSED - -PacketHandlerImplTest[jvm] > awaited send is released when service scope stops before worker starts()[jvm] PASSED - -PacketHandlerImplTest[jvm] > stopping the queue reports an awaited packet that was already dispatched()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > processReceivedMeshPacket updates sender node()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > processReceivedMeshPacket updates myNode lastHeard()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packet with null decoded is skipped()[jvm] PASSED - -PacketHandlerImplTest[jvm] > queue stop after queue acceptance reports missing routing completion()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await fails on routing nak()[jvm] PASSED - -PacketHandlerImplTest[jvm] > the timeout never fires before its deadline()[jvm] PASSED - -PacketHandlerImplTest[jvm] > rearm keeps independent timers for persisted rows sharing one mesh packet id()[jvm] PASSED - -PacketHandlerImplTest[jvm] > fire and forget rejects invalid packet ids without throwing or replacing queued work()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict routing wait outlives the local queue response window()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > buffer survives a reconnect toggle and flushes only once myNodeNum resolves()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > stale session frame is dropped before dispatch or persistence()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > handleFromRadio falls back to LogRecord parsing when FromRadio fails()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > handleFromRadio dispatches non-packet variants to fromRadioDispatcher()[jvm] PASSED - -PacketHandlerImplTest[jvm] > unacked ENROUTE send times out to a retryable ERROR TIMEOUT()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > packets are buffered when node DB is not ready()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > buffered packets are flushed when node DB becomes ready()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > a throwing handler does not propagate out of handleFromRadio()[jvm] PASSED - -PacketHandlerImplTest[jvm] > await response timeout starts after earlier queued packets()[jvm] PASSED - -PacketHandlerImplTest[jvm] > cancelling an awaiting caller does not release its queued packet id()[jvm] PASSED - -PacketHandlerImplTest[jvm] > sendToRadio updates status using the full outgoing packet identity()[jvm] PASSED - -PacketHandlerImplTest[jvm] > disconnect drains queued responses without restarting the processor()[jvm] PASSED - -PacketHandlerImplTest[jvm] > sendToRadio with MeshPacket queues and sends when connected()[jvm] PASSED - -PacketHandlerImplTest[jvm] > testInitialization()[jvm] PASSED - -PacketHandlerImplTest[jvm] > awaited send rejects when service scope is already stopped()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > buffered packet from retired session is not replayed into replacement session()[jvm] PASSED - -MeshMessageProcessorImplTest[jvm] > a throwing dataHandler for one buffered packet does not stop the flush or crash()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter returns false when filter words is empty()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter supports regex patterns()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter is case insensitive()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter returns false when filter is disabled()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter returns true for exact word match()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter handles invalid regex gracefully()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter filters when contact has filtering enabled()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter matches whole words only()[jvm] PASSED - -MessageFilterImplTest[jvm] > shouldFilter returns false when contact has filtering disabled()[jvm] PASSED - -DeviceHardwareRefreshGateTest[jvm] > successfulCatalogIsAuthoritativeForTtl()[jvm] PASSED - -DeviceHardwareRefreshGateTest[jvm] > freshCacheNeedsNoRefresh()[jvm] PASSED - -DeviceHardwareRefreshGateTest[jvm] > failedAttemptIsThrottledUntilRetryInterval()[jvm] PASSED - -DeviceHardwareRefreshGateTest[jvm] > forceRefreshAlwaysBypassesGate()[jvm] PASSED - -PacketHandlerImplTest[jvm] > disconnected queue admission reports transport stopped()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await treats queue rejection as failure()[jvm] PASSED - -PoisonedPoolNodeFlowRecoveryTest[jvm] > eagerlySharedNodeStateFlowStillPublishesAfterAPoisonedPool()[jvm] PASSED - -PacketHandlerImplTest[jvm] > awaited packet without an id is rejected before dispatch()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await succeeds on routing ack()[jvm] PASSED - -PacketHandlerImplTest[jvm] > sendToRadio with ToRadio sends immediately()[jvm] PASSED - -PacketHandlerImplTest[jvm] > late queue status cannot replace an already completed response()[jvm] PASSED - -PacketHandlerImplTest[jvm] > text emoji without reply id remains a persisted app packet()[jvm] PASSED - -PacketHandlerImplTest[jvm] > service owned routing expiry times out an active strict waiter()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await fails immediately when transport send throws()[jvm] PASSED - -PacketHandlerImplTest[jvm] > queue send failure completes awaiting caller with failure()[jvm] PASSED - -PacketHandlerImplTest[jvm] > rearm keeps independent reaction timers when mesh packet ids collide()[jvm] PASSED - -PacketHandlerImplTest[jvm] > late queue rejection still terminates a strict waiter after confirmation timeout()[jvm] PASSED - -PacketHandlerImplTest[jvm] > outgoing packets are logged with NODE_NUM_LOCAL()[jvm] PASSED - -PacketHandlerImplTest[jvm] > missing queue status does not terminate an admitted routing waiter()[jvm] PASSED - -PacketHandlerImplTest[jvm] > handleQueueStatus completes deferred()[jvm] PASSED - -PacketHandlerImplTest[jvm] > strict await fails immediately while disconnected()[jvm] PASSED - -PacketHandlerImplTest[jvm] > reconnect between ownership capture and admission rejects the stale packet()[jvm] PASSED - -PacketHandlerImplTest[jvm] > dispatch status does not overwrite a terminal routing result()[jvm] PASSED - -PacketHandlerImplTest[jvm] > unacked ENROUTE reaction times out to a retryable ERROR TIMEOUT()[jvm] PASSED - -RequestTimerTest[jvm] > appendDuration_afterStart_appendsDurationLine()[jvm] PASSED - -RequestTimerTest[jvm] > appendDuration_withoutStart_returnsTextUnchanged()[jvm] PASSED - -RequestTimerTest[jvm] > start_tracksRequestsIndependently()[jvm] PASSED - -RequestTimerTest[jvm] > appendDuration_consumesStartTime_soSecondCallIsUnchanged()[jvm] PASSED - -SessionWorkTest[jvm] > trusted work without a session executes()[jvm] PASSED - -SessionWorkTest[jvm] > active session executes leased work()[jvm] PASSED - -SessionWorkTest[jvm] > retired session invokes rejection without executing work()[jvm] PASSED - -DataLayerHeartbeatSenderTest[jvm] > nonces are strictly increasing and never 1 the firmware NodeInfo-ping trigger()[jvm] PASSED - -GeofenceCrossingStoreTest[jvm] > retainOnlyForgetsInactiveWaypoints()[jvm] PASSED - -GeofenceCrossingStoreTest[jvm] > firstSightingIsBaselineThenTransitionsOnlyOnChange()[jvm] PASSED - -GeofenceCrossingStoreTest[jvm] > stateIsIndependentPerWaypointAndNode()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Duplicate Stage 1 config_complete does not re-trigger()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 complete keeps connected when post NodeDB side effects fail()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Unknown config_complete_id is ignored()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleLocalMetadata skips empty metadata()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > triggerWantConfig delegates to connectionManager startConfigOnly()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleNodeInfo accumulates nodes during Stage 2()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > config reset holds the session lane until every clear completes()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo applies the event node-event default for event firmware()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleLocalMetadata outside ReceivingConfig does not call onHandshakeProgress()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleNodeInfo during Stage 1 calls onHandshakeProgress()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > reconciliationFailureDoesNotTriggerAnotherCatalogRefresh()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceResolvesWithoutAReportedTargetWhenTheModelIsUnambiguous()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceIsNullWithoutAReportedTargetWhenTheModelHasMultipleVariants()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceIsNullWhenTheAssetIsAbsent()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceIsNullWhenTheReportedTargetIsNotInTheRow()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > emptyForcedRefreshPreservesPreviouslyCachedRemoteCatalog()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > forceRefreshBypassesRecentSuccessfulCatalogRefresh()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceTreatsABlankReportedTargetAsAbsent()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > active session completes metadata node info and both handshake stages()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 complete processes nodes and sets Connected state()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleFileInfo calls onHandshakeProgress()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > full handshake fires onHandshakeProgress exactly for meaningful events only()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > repeatedMissingModelUsesOneSuccessfulCatalogRefresh()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo treats DIY_EDITION as event firmware()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleLocalMetadata ignored outside ReceivingConfig state()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 1 complete with old firmware logs warning but continues handshake()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceResolvesWhenModelAndTargetMatch()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceIsNullWhenTheModelIsUnmapped()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleNodeInfo outside active handshake does not call onHandshakeProgress()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceIsNullWhenTheAssetIsMalformed()[jvm] PASSED - -DeviceHardwareRepositoryImplTest[jvm] > softDeviceIsNullWhenTheValueIsUnrecognised()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo resets stale handshake state()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 complete id ignored when not in ReceivingNodeInfo state()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 complete with no nodes still transitions to Connected()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 1 complete calls onHandshakeProgress()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > reSeedsWhenActiveDatabaseSwitches()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > stale session cannot mutate handshake identity or metadata()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > unpublishedNightlyClearsStaleRow()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleNodeInfo during Stage 2 calls onHandshakeProgress()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > unreachableNightlyIndexLeavesCacheUntouched()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > concurrentCollectorsShareOneNetworkRefresh()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 complete disconnects when NodeDB install fails()[jvm] PASSED - -AirQualityChartReproTest[jvm] > checkpoint 2 - local AQ stored under NODE_NUM_LOCAL is charted()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleLocalMetadata persists metadata when in ReceivingConfig state()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > partialBundleLeavesTypesItDoesNotShipUntouched()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > refreshPrunesRemovedAndReclassifiedReleases()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > olderBundledSnapshotNeverRegressesCache()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Full handshake from Idle to Complete()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > newerBundledSnapshotReplacesOlderCache()[jvm] PASSED - -AirQualityChartReproTest[jvm] > checkpoint 3 - query keys local node on NODE_NUM_LOCAL not the raw from_num()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > alphaChannelNeverOffersVersionBelowStable()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > emptyCacheSeedsFromBundledSnapshot()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > refreshLeavesLocalRowsUntouched()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > failedBundledDecodeIsNotRetried()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > manifest board targets are fetched once and cached by release URL()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > session revocation during Stage 2 stops remaining persistence and publication()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > nightlyIsExemptFromBelowStableGuard()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleLocalMetadata in ReceivingConfig calls onHandshakeProgress()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > queued MyNodeInfo from an old generation is discarded()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > nightlyFlowMapsPublishedIndex()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleNodeInfo buffers nodes received during Stage 1()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > cachedEmissionIsNotBlockedByAnotherFlowsInFlightRefresh()[jvm] PASSED - -AirQualityChartReproTest[jvm] > checkpoint 4 - local AQ received before myNodeNum resolves is buffered then charted()[jvm] PASSED - -AirQualityChartReproTest[jvm] > checkpoint 1 - air quality payload survives the telemetry round-trip()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 complete cancels watchdog synchronously before async DB install work()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > parseTelemetryLog preserves zero per-channel readings()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo admits config clearing before returning to the frame consumer()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 complete fires onHandshakeComplete exactly once()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > parseTelemetryLog preserves zero temperature()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > deleteLogsOlderThan keep forever sentinel deletes nothing()[jvm] PASSED - -FirmwareReleaseRepositoryImplTest[jvm] > emptyResponseLeavesCacheUntouched()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo clears persisted radio config()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > new active session cannot advance handshake state owned by prior session()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo hex-encodes raw device_id bytes losslessly()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > deleteLocalStatsLogs deletes only local stats telemetry()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleFileInfo delegates to radioConfigRepository()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo without a selected address does not publish session identity()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo transitions to ReceivingConfig and sets myNodeNum()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 1 complete sends heartbeat with non-zero nonce between stages()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 1 complete id ignored when not in ReceivingConfig state()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > deleteLogs redirects local node number to NODE_NUM_LOCAL()[jvm] PASSED - -PacketTranslationRepositoryTest[jvm] > setShowTranslatedTogglesDisplayState()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > parseTelemetryLog normalizes absent per-channel readings to NaN()[jvm] PASSED - -PacketTranslationRepositoryTest[jvm] > setMessageTranslationPersistsAndShowsTranslation()[jvm] PASSED - -SingleFlightRefresherTest[jvm] > failureIsContainedAndTheNextRefreshStartsANewFlight()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > parseTelemetryLog lifts legacy one-wire list onto per-channel fields()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo calls onHandshakeProgress()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > deleteLogsOlderThan one hour sentinel keeps the last hour instead of wiping the table()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 1 complete builds MyNodeInfo and transitions to ReceivingNodeInfo()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleNodeInfo ignored outside Stage 2()[jvm] PASSED - -MeshLogRepositoryTest[jvm] > deleteLogsOlderThan trims to the configured day count()[jvm] PASSED - -SingleFlightRefresherTest[jvm] > timedOutCallerFallsBackWhileRefreshRunsToCompletion()[jvm] PASSED - -SingleFlightRefresherTest[jvm] > callerCancellationDoesNotAbortTheSharedRefresh()[jvm] PASSED - -SingleFlightRefresherTest[jvm] > concurrentCallersShareOneFlight()[jvm] PASSED - -RadioConfigRepositoryImplTest[jvm] > addFileInfo caps the manifest instead of growing without bound()[jvm] PASSED - -RadioConfigRepositoryImplTest[jvm] > clearFileManifest empties the manifest so a new handshake can accumulate again()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo reports an absent device_id as null()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 2 applies trusted migrations before readiness and replay()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > newNodeCount returns 0 when not in ReceivingNodeInfo state()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > handleMyInfo applies the vanilla node-event default for vanilla firmware()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 1 complete updates progress for node list loading()[jvm] PASSED - -RadioConfigRepositoryImplTest[jvm] > concurrent addFileInfo does not lose updates()[jvm] PASSED - -MeshConfigFlowManagerImplTest[jvm] > Stage 1 complete without metadata still succeeds with null firmware version()[jvm] PASSED - -NeighborInfoHandlerImplTest[jvm] > handleNeighborInfo sets response on serviceRepository()[jvm] PASSED - -NeighborInfoHandlerImplTest[jvm] > recordStartTime and handleNeighborInfo includes duration()[jvm] PASSED - -NeighborInfoHandlerImplTest[jvm] > handleNeighborInfo ignores packet with null decoded()[jvm] PASSED - -NeighborInfoHandlerImplTest[jvm] > handleNeighborInfo does not store lastNeighborInfo when from remote node()[jvm] PASSED - -NeighborInfoHandlerImplTest[jvm] > handleNeighborInfo stores lastNeighborInfo when from own node()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedUser sets publicKey from user public_key()[jvm] PASSED - -NodeManagerImplTest[jvm] > loadCachedNodeDB preserves retirement and suppresses reloaded stale replay()[jvm] PASSED - -NodeManagerImplTest[jvm] > local-node identity learned during the load window survives snapshot commit()[jvm] PASSED - -NodeManagerImplTest[jvm] > user packet before node-db ready installs without persistence or notification()[jvm] PASSED - -> Task :core:ui:compileAndroidMain -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/ContactSharing.kt:50:32 Unnecessary safe call on a non-null receiver of type 'User'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/QrDialog.kt:196:60 'fun rememberPlainTooltipPositionProvider(spacingBetweenTooltipAndAnchor: Dp = ...): PopupPositionProvider' is deprecated. Deprecated in favor of rememberTooltipPositionProvider API. - -> Task :core:model:jvmTest - -NodeAddressTest[jvm] > fromString_emptyString_returnsById()[jvm] PASSED - -NodeAddressTest[jvm] > toIdString_byNum()[jvm] PASSED - -NodeAddressTest[jvm] > toIdString_local()[jvm] PASSED - -NodeAddressTest[jvm] > toContactKey_formatsChannelPlusId()[jvm] PASSED - -NodeAddressTest[jvm] > fromString_shortHexId_returnsByNum()[jvm] PASSED - -NodeAddressTest[jvm] > contactKey_addressString_extractsAfterFirstChar()[jvm] PASSED - -NodeAddressTest[jvm] > numToDefaultId_negativeOne_formatsAsFffffffff()[jvm] PASSED - -NodeAddressTest[jvm] > fromString_validHexId_returnsByNum()[jvm] PASSED - -NodeAddressTest[jvm] > fromString_null_returnsBroadcast()[jvm] PASSED - -NodeAddressTest[jvm] > numToDefaultId_idToNum_roundtrip()[jvm] PASSED - -NodeAddressTest[jvm] > idToNum_nonHex_returnsNull()[jvm] PASSED - -NodeAddressTest[jvm] > idToNum_validHex_returnsInt()[jvm] PASSED - -NodeAddressTest[jvm] > fromString_localString_returnsLocal()[jvm] PASSED - -NodeAddressTest[jvm] > numToDefaultId_typicalValue_formatsCorrectly()[jvm] PASSED - -NodeAddressTest[jvm] > contactKey_channel_extractsFirstDigit()[jvm] PASSED - -NodeAddressTest[jvm] > idToNum_withBangPrefix_stripsAndParses()[jvm] PASSED - -NodeAddressTest[jvm] > fromString_invalidHexAfterBang_returnsByIdFallback()[jvm] PASSED - -NodeAddressTest[jvm] > contactKey_unprefixedKey_signalsNoChannelAndKeepsWholeAddress()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_isFromLocal_falseWithoutNodeNum()[jvm] PASSED - -NodeAddressTest[jvm] > idToNum_emptyString_returnsNull()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_isFromLocal_falseForDifferentNodeNum()[jvm] PASSED - -NodeAddressTest[jvm] > fromString_broadcastString_returnsBroadcast()[jvm] PASSED - -NodeAddressTest[jvm] > fromString_arbitraryString_returnsById()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_isBroadcast_falseForUnicastDestination()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_destination_parsesBroadcast()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_isFromLocal_trueForMatchingNodeNum()[jvm] PASSED - -NodeAddressTest[jvm] > contactKey_address_parsesCorrectly()[jvm] PASSED - -NodeAddressTest[jvm] > dataPacket_isFromLocal_trueForLocal()[jvm] PASSED - -NodeAddressTest[jvm] > toIdString_broadcast()[jvm] PASSED - -RetiredContactKeyTest[jvm] > it still reads as a channel conversation rather than a direct message()[jvm] PASSED - -RetiredContactKeyTest[jvm] > live keys are unaffected()[jvm] PASSED - -RetiredContactKeyTest[jvm] > a retired key parses as a broadcast with no live slot()[jvm] PASSED - -GeofenceTest[jvm] > boxBoundsAreInclusive()[jvm] PASSED - -GeofenceTest[jvm] > boxExcludesOutsidePoints()[jvm] PASSED - -GeofenceTest[jvm] > geofenceUsesOrSemantics()[jvm] PASSED - -GeofenceTest[jvm] > circleExcludesFarPoint()[jvm] PASSED - -GeofenceTest[jvm] > circleContainsCenterAndNearby()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a duplicated channel does not drag a conversation off its own slot()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a missing lora config on either side retires nothing()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a duplicate old slot is retired rather than merged into the slot that kept the identity()[jvm] PASSED - -ChannelReconciliationTest[jvm] > two different custom lora configs are not yet distinguished()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a preset switch is a channel change()[jvm] PASSED - -ChannelReconciliationTest[jvm] > an empty new channel list retires nothing()[jvm] PASSED - -ChannelReconciliationTest[jvm] > an unchanged set produces no changes()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a parked channel is reclaimed when it comes back()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a duplicated channel resolves to its lowest slot()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a replaced slot retires the previous occupant()[jvm] PASSED - -ChannelReconciliationTest[jvm] > region is not part of channel identity()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a token distinguishes name from psk and never leaks either()[jvm] PASSED - -ChannelReconciliationTest[jvm] > duplicate slots pair off one to one()[jvm] PASSED - -ChannelReconciliationTest[jvm] > blank padding secondaries are not treated as channels()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a duplicated channel is reclaimed only once()[jvm] PASSED - -ChannelReconciliationTest[jvm] > the default psk is disambiguated across presets()[jvm] PASSED - -ChannelReconciliationTest[jvm] > a reordered channel moves rather than retires()[jvm] PASSED - -CommonUtilsTest[jvm] > testByteArrayOfInts()[jvm] PASSED - -CommonUtilsTest[jvm] > testXorHash()[jvm] PASSED - -PositionPrecisionTest[jvm] > an undegraded position has no uncertainty circle()[jvm] PASSED - -PositionPrecisionTest[jvm] > each extra bit roughly halves the radius()[jvm] PASSED - -PositionPrecisionTest[jvm] > every degraded depth has a radius()[jvm] PASSED - -PositionPrecisionTest[jvm] > radii match the values the OSMdroid marker used()[jvm] PASSED - -TelemetryExtensionsTest[jvm] > lightning alone is valid()[jvm] PASSED - -TelemetryExtensionsTest[jvm] > temperature and humidity together are valid()[jvm] PASSED - -TelemetryExtensionsTest[jvm] > no environment metrics is not valid()[jvm] PASSED - -TelemetryExtensionsTest[jvm] > temperature alone or a NaN temperature is not valid()[jvm] PASSED - -DataPacketTest[jvm] > hopsAway_isUnknownForInvalidHopValues()[jvm] PASSED - -DataPacketTest[jvm] > nodeNumToDefaultId_formatsHexWithPrefix()[jvm] PASSED - -DataPacketTest[jvm] > equalityAndCopy_preserveDataUntilModified()[jvm] PASSED - -DataPacketTest[jvm] > alertProperty_onlyReturnsForAlertPackets()[jvm] PASSED - -DataPacketTest[jvm] > textConstructor_setsTextPayloadProperties()[jvm] PASSED - -HamNameTest[jvm] > forOnboarding_keeps_the_long_name_when_only_the_call_sign_is_over_long()[jvm] PASSED - -HamNameTest[jvm] > forUnlicensing_keeps_a_composed_name_the_node_actually_has()[jvm] PASSED - -HamNameTest[jvm] > split_keeps_a_later_separator_inside_the_long_name()[jvm] PASSED - -HamNameTest[jvm] > compose_omits_the_separator_when_the_long_name_is_unset()[jvm] PASSED - -HamNameTest[jvm] > compose_joins_the_two_halves_with_the_separator()[jvm] PASSED - -HamNameTest[jvm] > the_widest_pair_the_proto_can_carry_fits_the_firmware_owner_name()[jvm] PASSED - -HamNameTest[jvm] > forOnboarding_clips_on_a_code_point_boundary()[jvm] PASSED - -HamNameTest[jvm] > forOnboarding_clips_a_demoted_name_to_the_proto_cap()[jvm] PASSED - -HamNameTest[jvm] > forOnboarding_leaves_an_already_composed_name_alone()[jvm] PASSED - -HamNameTest[jvm] > split_round_trips_every_name_compose_can_build()[jvm] PASSED - -HamNameTest[jvm] > split_separates_a_composed_name()[jvm] PASSED - -HamNameTest[jvm] > forUnlicensing_drops_the_separator_left_by_an_abandoned_onboarding()[jvm] PASSED - -HamNameTest[jvm] > forOnboarding_demotes_an_over_long_name_to_the_long_name_half()[jvm] PASSED - -HamNameTest[jvm] > split_reads_a_name_without_a_separator_as_all_call_sign()[jvm] PASSED - -HamNameTest[jvm] > forOnboarding_leaves_a_name_that_can_be_a_call_sign_alone()[jvm] PASSED - -MergePowerChannelLabelTest[jvm] > keepsExistingChannelsWhenSettingAnother()[jvm] PASSED - -MergePowerChannelLabelTest[jvm] > setsLabelAndTrims()[jvm] PASSED - -MergePowerChannelLabelTest[jvm] > padsEarlierChannelsWithBlanks()[jvm] PASSED - -MergePowerChannelLabelTest[jvm] > clearingLastLabelDropsTrailingBlanks()[jvm] PASSED - -MergePowerChannelLabelTest[jvm] > clearingAMiddleLabelKeepsLaterOnesAsBlankSlots()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > of reads the same decision off a Node()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > older and unversioned nodes keep the locks()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > an in-person verified contact outranks signing at any version()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > 2_8 nodes show verification state instead of the locks()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > a heard signature shows the signed glyph even when the version is unknown()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > the connected radio reads as verified at any version()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > a key mismatch is a warning at any version - even for a verified contact()[jvm] PASSED - -NodeSecurityIndicatorTest[jvm] > 2_8 and newer report signing support - older and unknown do not()[jvm] PASSED - -RouteDiscoveryTest[jvm] > ok_whenOnlyForwardRoute_endpointsPositioned()[jvm] PASSED - -RouteDiscoveryTest[jvm] > missingEndpoints_whenReturnRouteEndpointMissing()[jvm] PASSED - -RouteDiscoveryTest[jvm] > noMappableNodes_whenNonePositioned()[jvm] PASSED - -RouteDiscoveryTest[jvm] > directRoute_withTwoNodes()[jvm] PASSED - -RouteDiscoveryTest[jvm] > ok_whenEndpointsPositioned_andIntermediateNot()[jvm] PASSED - -RouteDiscoveryTest[jvm] > missingEndpoints_whenForwardEndMissing()[jvm] PASSED - -RouteDiscoveryTest[jvm] > ok_whenAllNodesHavePositions()[jvm] PASSED - -RouteDiscoveryTest[jvm] > missingEndpoints_whenForwardStartMissing()[jvm] PASSED - -RouteDiscoveryTest[jvm] > noMappableNodes_whenEmptyRoutes()[jvm] PASSED - -WaypointToGeofenceTest[jvm] > radiusOnlyDecodesCircleNoBox()[jvm] PASSED - -WaypointToGeofenceTest[jvm] > geofenceFieldsSurviveEditAndRoundTrip()[jvm] PASSED - -WaypointToGeofenceTest[jvm] > invertedBoundingBoxIsNormalized()[jvm] PASSED - -WaypointToGeofenceTest[jvm] > bothShapesDecode()[jvm] PASSED - -WaypointToGeofenceTest[jvm] > notifiesOnCrossingTruthTable()[jvm] PASSED - -WaypointToGeofenceTest[jvm] > neitherShapeDecodesToNull()[jvm] PASSED - -WaypointToGeofenceTest[jvm] > boxOnlyDecodesBoxNoCircle()[jvm] PASSED - -ChannelSetReplacementTest[jvm] > replacement plan normalizes padding and duplicates before slot validation()[jvm] PASSED - -ChannelSetReplacementTest[jvm] > replacement plan rejects empty profile channel set before producing writes()[jvm] PASSED - -DistanceExtensionsTest[jvm] > kmhIn handles zero()[jvm] PASSED - -DistanceExtensionsTest[jvm] > storm distance stays in the large unit()[jvm] PASSED - -DistanceExtensionsTest[jvm] > distances keep their precision()[jvm] PASSED - -DistanceExtensionsTest[jvm] > kmhIn converts to mph for imperial()[jvm] PASSED - -DistanceExtensionsTest[jvm] > kmhIn returns value unchanged for metric()[jvm] PASSED - -DistanceExtensionsTest[jvm] > metres switch to kilometres at the threshold()[jvm] PASSED - -RxTimeExtensionsTest[jvm] > rxTimeOrNull returns the stamped time()[jvm] PASSED - -RxTimeExtensionsTest[jvm] > isDirectSignal requires a known arrival time()[jvm] PASSED - -RxTimeExtensionsTest[jvm] > rxTimeOrNull treats an old-firmware zero as unknown()[jvm] PASSED - -RxTimeExtensionsTest[jvm] > rxTimeOrNull treats an absent field as unknown()[jvm] PASSED - -ToSharedContactTest[jvm] > a contact already verified in person stays verified when relayed()[jvm] PASSED - -ToSharedContactTest[jvm] > sharing your own contact marks it manually verified()[jvm] PASSED - -ToSharedContactTest[jvm] > relaying someone else's contact asserts nothing on their behalf()[jvm] PASSED - -ToSharedContactTest[jvm] > carries the node number and user through()[jvm] PASSED - -> Task :core:network:compileAndroidHostTest - -> Task :core:data:testAndroidHostTest - -NodeManagerImplTest > a flood of novel NodeInfo packets cannot grow the in-memory index without bound PASSED - -NodeManagerImplTest > legitimate reuse clears prior retirement hint before a later keyless retirement PASSED - -NodeManagerImplTest > getMyId returns empty when disconnected PASSED - -NodeManagerImplTest > updateNodeAndPersist awaits the repository write PASSED - -NodeManagerImplTest > local number change during User reduction retries classification atomically PASSED - -NodeManagerImplTest > ambiguous noncanonical renumber replaces telemetry placeholder without session lockout PASSED - -NodeManagerImplTest > established same-key stale replay is removed in memory without repository mutation PASSED - -NodeManagerImplTest > clear starts a new session without retired-number suppression PASSED - -NodeManagerImplTest > old ID survivor restored after put changes user ID PASSED - -NodeManagerImplTest > three nodes sharing one user ID selects deterministic representative PASSED - -NodeManagerImplTest > eviction prefers placeholders over nodes with a real identity PASSED - -NodeManagerImplTest > stale duplicate never deletes or upserts a repository row PASSED - -NodeManagerImplTest > invalid public keys skip identity matching and update normally PASSED - -NodeManagerImplTest > different-key conflict preserves both nodes and emits no side effects PASSED - -NodeManagerImplTest > removeByNodenum removes node from map PASSED - -NodeManagerImplTest > fromByNum is independent of insertion order PASSED - -NodeManagerImplTest > notification skipped when identity changed before dispatch PASSED - -NodeManagerImplTest > different established key at canonical num preserved as conflict PASSED - -NodeManagerImplTest > trusted migration during the load window retires absent number and suppresses replay PASSED - -NodeManagerImplTest > direct snapshot returns only the newly selected DB after a currentDb switch PASSED - -NodeManagerImplTest > local authoritative renumber removes old same-key entries in memory upserts local no notification PASSED - -NodeManagerImplTest > getMyNodeInfo synthesizes from repository and nodeDB PASSED - -NodeManagerImplTest > User packet is discarded when clear starts a new session before CAS PASSED - -NodeManagerImplTest > toNodeID returns user ID for known node PASSED - -NodeManagerImplTest > public key diagnostics use a one-way fingerprint PASSED - -NodeManagerImplTest > stale replay preserves no-key telemetry placeholder and canonical identity PASSED - -NodeManagerImplTest > handleReceivedPosition for local node ignores purely empty packets PASSED - -NodeManagerImplTest > preferred canonical remains mapped after stale removal PASSED - -NodeManagerImplTest > node persistence is suppressed while database writes are disabled PASSED - -NodeManagerImplTest > handleReceivedUser keeps the stored key when a different one arrives PASSED - -NodeManagerImplTest > getMyNodeInfo returns null when repository has no info PASSED - -NodeManagerImplTest > handleReceivedPosition accepts a coarse report when the stored position is coarser PASSED - -NodeManagerImplTest > malformed key lengths 1 31 33 are rejected and skip identity matching PASSED - -NodeManagerImplTest > accepted local node remains byId representative PASSED - -NodeManagerImplTest > notification never fires for stale conflict or local outcomes PASSED - -NodeManagerImplTest > installNodeInfo clears publicKey for licensed users PASSED - -NodeManagerImplTest > notification skipped when number becomes local node before dispatch PASSED - -NodeManagerImplTest > getOrCreateNode creates default user for unknown node PASSED - -NodeManagerImplTest > handleReceivedPosition accepts a coarse report from a different box PASSED - -NodeManagerImplTest > clear resets internal state PASSED - -NodeManagerImplTest > neither num canonical preserves both no persistence no notification PASSED - -NodeManagerImplTest > getMyId returns user ID when connected PASSED - -NodeManagerImplTest > persisted local node fills null identity when live nodes change during load PASSED - -NodeManagerImplTest > handleReceivedUser updates user if incoming is higher detail PASSED - -NodeManagerImplTest > installNodeInfo sets publicKey from user public_key PASSED - -NodeManagerImplTest > retired number suppresses keyless and represented-key user replays PASSED - -NodeManagerImplTest > loadCachedNodeDB result is discarded when clear starts a new session mid-load PASSED - -NodeManagerImplTest > incoming canonical replaces own placeholder and removes noncanonical in memory only PASSED - -NodeManagerImplTest > handleReceivedTelemetry updates environment metrics PASSED - -NodeManagerImplTest > handleReceivedPosition with zero coordinates preserves last known location but updates satellites PASSED - -NodeManagerImplTest > installNodeInfo keeps precise position when the snapshot only has the coarse one PASSED - -NodeManagerImplTest > same-node persistence cannot finish with an older snapshot PASSED - -NodeManagerImplTest > retired number accepts validated new-key reuse and un-retires the slot PASSED - -NodeManagerImplTest > ambiguous noncanonical duplicates update from entry and preserve every candidate PASSED - -NodeManagerImplTest > getMyNodeInfo falls back to nodeDB model when repository model is null PASSED - -NodeManagerImplTest > retired number with different valid key can be legitimately reused PASSED - -NodeManagerImplTest > handleReceivedTelemetry updates soil water metrics PASSED - -NodeManagerImplTest > live node update during the load window is not overwritten by the snapshot PASSED - -NodeManagerImplTest > complete 2_7 to 2_8 renumbering produces no old number notification PASSED - -NodeManagerImplTest > trusted migration commits retirement before notification cancellation PASSED - -NodeManagerImplTest > notification skipped when number retired between select and dispatch PASSED - -NodeManagerImplTest > invalid Node publicKey falls back to valid User public_key PASSED - -TelemetryPacketHandlerImplTest > environment metrics updates node with environment data PASSED - -TelemetryPacketHandlerImplTest > local device metrics updates telemetry on connectionManager PASSED - -TelemetryPacketHandlerImplTest > handleTelemetry with empty payload bytes returns early PASSED - -TelemetryPacketHandlerImplTest > telemetry with time 0 gets time from dataPacket PASSED - -TelemetryPacketHandlerImplTest > remote device metrics updates node but not connectionManager PASSED - -TelemetryPacketHandlerImplTest > soil water metrics updates node with probe data PASSED - -TelemetryPacketHandlerImplTest > healthy battery level does not trigger low battery notification PASSED - -TelemetryPacketHandlerImplTest > power metrics updates node with power data PASSED - -TelemetryPacketHandlerImplTest > handleTelemetry with null decoded payload returns early PASSED - -> Task :core:ui:processAndroidMainJavaRes -> Task :core:ui:bundleAndroidMainClassesToRuntimeJar - -> Task :core:data:jvmTest - -NodeManagerImplTest[jvm] > eviction never drops the local node()[jvm] PASSED - -NodeManagerImplTest[jvm] > UNSET hardware with different valid key is preserved as conflict()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedTelemetry updates device metrics()[jvm] PASSED - -NodeManagerImplTest[jvm] > notification has exact title message ID category and deep link()[jvm] PASSED - -NodeManagerImplTest[jvm] > reverse ID and public-key indexes stay consistent across put replacement and remove()[jvm] PASSED - -NodeManagerImplTest[jvm] > byId index points to canonical survivor after stale removal shares user id()[jvm] PASSED - -NodeManagerImplTest[jvm] > genuine new node fires exactly one upsert and exactly one notification()[jvm] PASSED - -NodeManagerImplTest[jvm] > incoming canonical absent from index creates from packet removes noncanonical no notify()[jvm] PASSED - -NodeManagerImplTest[jvm] > pre-ready user packet stays notification-suppressed across a CAS retry()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedPosition updates node position()[jvm] PASSED - -NodeManagerImplTest[jvm] > custom incomplete identity is preserved over default incoming()[jvm] PASSED - -NodeManagerImplTest[jvm] > toNodeID returns default hex ID for unknown node()[jvm] PASSED - -NodeManagerImplTest[jvm] > applyTrustedIdentityMigrations cancels notifications for each retired number()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedTelemetry with null metrics does not crash()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedTelemetry updates lastHeard()[jvm] PASSED - -> Task :core:domain:jvmTest - -ExportDataUseCaseTest[jvm] > invoke leaves relay node blank when unset()[jvm] PASSED - -ExportDataUseCaseTest[jvm] > invoke writes header to sink()[jvm] PASSED - -ExportDataUseCaseTest[jvm] > invoke writes hop start and relay node columns()[jvm] PASSED - -ExportDataUseCaseTest[jvm] > invoke writes packet data to sink()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke treats blank channel URL as absent and installs profile LoRa once()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke replaces local channels and preserves cached LoRa when no LoRa write is needed()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > fixed position queue rejection aborts profile installation after closing the edit transaction()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke calls begin and commit edit settings()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke does not replace local cache for a remote profile install()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke installs is_unmessagable but never auto-installs is_licensed()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke rejects a malformed channel URL before opening the transaction()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke leaves local cache unchanged when a channel write fails()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke normalizes channels refreshes local cache and writes URL LoRa once()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke skips redundant LoRa write when desired config is already active()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke installs all sections of a full profile()[jvm] PASSED - -InstallProfileUseCaseTest[jvm] > invoke rejects an empty channel set before opening the transaction()[jvm] PASSED - -> Task :core:domain:allTests - -> Task :core:data:testAndroidHostTest - -AiFunctionProviderImplTest > getMeshMetrics_returns_valid_metrics_with_active_nodes PASSED - -AiFunctionProviderImplTest > getMeshMetrics_returns_not_connected_when_disconnected PASSED - -AiFunctionProviderImplTest > sendMessage_counts_multi_byte_text_in_bytes_not_characters PASSED - -AiFunctionProviderImplTest > getNodeDetails_returns_not_found_for_unknown_node PASSED - -AiFunctionProviderImplTest > sendMessage_rejects_text_one_byte_over_the_limit PASSED - -AiFunctionProviderImplTest > sendMessage_returns_rate_limited_when_exhausted PASSED - -AiFunctionProviderImplTest > getUnreadSummary_returns_empty_when_no_unread PASSED - -AiFunctionProviderImplTest > getNodeDetails_returns_not_connected_when_disconnected PASSED - -AiFunctionProviderImplTest > getMeshMetrics_returns_zero_health_score_when_empty PASSED - -AiFunctionProviderImplTest > getNodeDetails_returns_error_for_invalid_hex_format PASSED - -AiFunctionProviderImplTest > getNodeDetails_returns_node_data_for_valid_hex_id PASSED - -AiFunctionProviderImplTest > getMeshMetrics_falls_back_to_current_time_when_all_lastHeard_zero PASSED - -AiFunctionProviderImplTest > maxMessageLength_is_the_largest_text_the_send_path_will_encode PASSED - -AiFunctionProviderImplTest > getNodeDetails_returns_null_position_when_no_fix PASSED - -AiFunctionProviderImplTest > getRecentMessages_contact_not_found PASSED - -AiFunctionProviderImplTest > sendMessage_returns_not_connected_when_disconnected PASSED - -AiFunctionProviderImplTest > getMeshMetrics_returns_degraded_health_when_no_nodes_online PASSED - -AiFunctionProviderImplTest > getNodeDetails_round_trips_high_bit_node_num PASSED - -AiFunctionProviderImplTest > sendMessage_accepts_text_exactly_at_the_byte_limit PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:navigation:jvmTest - -NavigationParityTest[jvm] > all top level destinations are defined()[jvm] PASSED - -NavigationParityTest[jvm] > fromNavKey matches all top level routes()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings with unknown sub-route returns Settings only()[jvm] PASSED - -DeepLinkRouterTest[jvm] > messages with contactKey query param()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and map sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum returns NodeDetail()[jvm] PASSED - -> Task :core:network:compileTestKotlinJvm -> Task :core:network:compileJvmTestJava NO-SOURCE -> Task :core:network:jvmTestClasses - -> Task :core:data:testAndroidHostTest - -SwitchingChannelSetDataSourceTest > a whole-set write reconciles immediately PASSED - -SwitchingChannelSetDataSourceTest > the first reconcile only captures a baseline PASSED - -SwitchingChannelSetDataSourceTest > disabled channels are ignored PASSED - -SwitchingChannelSetDataSourceTest > updateChannelSettings fills gaps with blank channels to preserve indices PASSED - -SwitchingChannelSetDataSourceTest > concurrent updateChannelSettings does not lose updates PASSED - -SwitchingChannelSetDataSourceTest > replaceAllSettings replaces the whole list PASSED - -SwitchingChannelSetDataSourceTest > clearing the channel set keeps the reconciliation baseline PASSED - -SwitchingChannelSetDataSourceTest > clearChannelSet empties the channel set PASSED - -SwitchingChannelSetDataSourceTest > updateChannelSettings places channel at its index PASSED - -SwitchingChannelSetDataSourceTest > the handshake lora write does not archive conversations PASSED - -SwitchingChannelSetDataSourceTest > switching device does not leak channels across databases PASSED - -SwitchingChannelSetDataSourceTest > setLoraConfig preserves existing channel settings PASSED - -SwitchingChannelSetDataSourceTest > per-slot writes do not reconcile PASSED - -SwitchingChannelSetDataSourceTest > updateChannelSet atomically replaces settings and lora PASSED - -GeofenceCrossingStoreTest > retainOnlyForgetsInactiveWaypoints PASSED - -GeofenceCrossingStoreTest > firstSightingIsBaselineThenTransitionsOnlyOnChange PASSED - -GeofenceCrossingStoreTest > stateIsIndependentPerWaypointAndNode PASSED - -MeshConfigHandlerImplTest > handleChannel calls onHandshakeProgress PASSED - -MeshConfigHandlerImplTest > start wires localConfig flow from repository PASSED - -MeshConfigHandlerImplTest > handleRegionPresets persists map PASSED - -MeshConfigHandlerImplTest > handleModuleConfig with statusmessage updates node status PASSED - -MeshConfigHandlerImplTest > handleChannel persists channel settings PASSED - -MeshConfigHandlerImplTest > stale session cannot persist config or advance handshake PASSED - -MeshConfigHandlerImplTest > active session persists device config and advances handshake PASSED - -MeshConfigHandlerImplTest > handleChannel shows progress without max channels when myNodeInfo unavailable PASSED - -MeshConfigHandlerImplTest > handleChannel shows progress with max channels when myNodeInfo available PASSED - -MeshConfigHandlerImplTest > module config remains persisted when node status persistence fails PASSED - -MeshConfigHandlerImplTest > handleDeviceConfig persists config and updates progress PASSED - -MeshConfigHandlerImplTest > start wires moduleConfig flow from repository PASSED - -MeshConfigHandlerImplTest > handleModuleConfig with statusmessage skipped when myNodeNum is null PASSED - -MeshConfigHandlerImplTest > handleModuleConfig persists config and updates progress PASSED - -MeshConfigHandlerImplTest > revoked session cannot complete queued config persistence PASSED - -MeshConfigHandlerImplTest > handleDeviceConfig handles all config variants PASSED - -MeshConfigHandlerImplTest > handleModuleConfig calls onHandshakeProgress PASSED - -MeshConfigHandlerImplTest > handleDeviceConfig calls onHandshakeProgress PASSED - -MeshConfigHandlerImplTest > handleDeviceUIConfig calls onHandshakeProgress PASSED - -MeshConfigHandlerImplTest > module config cancellation cancels node status persistence job PASSED - -MeshConfigHandlerImplTest > handleDeviceUIConfig persists config PASSED - -MqttManagerImplTest > a partly refused subscription names the refused filters and how many were granted PASSED - -MqttManagerImplTest > a refusal is only reported while the connection is up PASSED - -MqttManagerImplTest > a subscription refused in full reads as zero granted rather than connected PASSED - -MqttManagerImplTest > a connection with every filter granted reads as connected PASSED - -RequestTimerTest > appendDuration_afterStart_appendsDurationLine PASSED - -RequestTimerTest > appendDuration_withoutStart_returnsTextUnchanged PASSED - -RequestTimerTest > start_tracksRequestsIndependently PASSED - -RequestTimerTest > appendDuration_consumesStartTime_soSecondCallIsUnchanged PASSED - -PacketTranslationRepositoryTest > setShowTranslatedTogglesDisplayState PASSED - -PacketTranslationRepositoryTest > setMessageTranslationPersistsAndShowsTranslation PASSED - -> Task :core:navigation:jvmTest - -DeepLinkRouterTest[jvm] > discovery alias localmeshdiscovery resolves session ID()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and signal sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > wifi-provision without address()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum query param()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings with destNum()[jvm] PASSED - -DeepLinkRouterTest[jvm] > messages with contactKey and message()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and environment sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > messages with contactKey path segment()[jvm] PASSED - -DeepLinkRouterTest[jvm] > discovery session deep link resolves session ID()[jvm] PASSED - -DeepLinkRouterTest[jvm] > share without message defaults to empty string()[jvm] PASSED - -DeepLinkRouterTest[jvm] > discovery settings sub-route navigates to discovery graph()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and unknown sub-route falls back to NodeDetail()[jvm] PASSED - -DeepLinkRouterTest[jvm] > wifi-provision with address query param()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and traceroute sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > connections routes to Connections()[jvm] PASSED - -DeepLinkRouterTest[jvm] > map with waypointId query param()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings all known sub-routes resolve correctly()[jvm] PASSED - -DeepLinkRouterTest[jvm] > quickchat routes to QuickChat()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and position sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with non-numeric destNum returns Nodes only()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and pax sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes root returns Nodes()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and device-metrics sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > map without waypointId()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings with destNum and sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > map with invalid waypointId falls back to null()[jvm] PASSED - -DeepLinkRouterTest[jvm] > map with waypointId path segment()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings attributions is an alias for Acknowledgements()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings with sub-route without destNum()[jvm] PASSED - -DeepLinkRouterTest[jvm] > channels routes to Channels()[jvm] PASSED - -DeepLinkRouterTest[jvm] > firmware root returns FirmwareGraph()[jvm] PASSED - -DeepLinkRouterTest[jvm] > app link query parameters survive the host rewrite()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings about resolves to the About screen()[jvm] PASSED - -DeepLinkRouterTest[jvm] > messages without contactKey returns graph only()[jvm] PASSED - -DeepLinkRouterTest[jvm] > empty path returns null()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings acknowledgements resolves to the Acknowledgements screen()[jvm] PASSED - -DeepLinkRouterTest[jvm] > share with message()[jvm] PASSED - -DeepLinkRouterTest[jvm] > route segments are case insensitive()[jvm] PASSED - -DeepLinkRouterTest[jvm] > discovery session with invalid ID falls back to graph()[jvm] PASSED - -DeepLinkRouterTest[jvm] > connections with n address routes to Connections with disconnect sentinel()[jvm] PASSED - -DeepLinkRouterTest[jvm] > connections with address query param routes to Connections with address()[jvm] PASSED - -DeepLinkRouterTest[jvm] > unrecognized segment returns null()[jvm] PASSED - -DeepLinkRouterTest[jvm] > app link hosts route the same as the custom scheme()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and neighbors sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > channel set and shared contact import links return null for the import fallback()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and power sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > nodes with destNum and host-metrics sub-route()[jvm] PASSED - -DeepLinkRouterTest[jvm] > settings root returns Settings()[jvm] PASSED - -DeepLinkRouterTest[jvm] > firmware update returns FirmwareGraph and FirmwareUpdate()[jvm] PASSED - -RumViewNameTest[jvm] > rumViewName is the fully qualified route name for data objects()[jvm] PASSED - -RumViewNameTest[jvm] > rumViewName is stable across argument values for data classes()[jvm] PASSED - -> Task :core:navigation:allTests - -> Task :core:data:jvmTest - -NodeManagerImplTest[jvm] > a flood of novel node numbers cannot grow the in-memory index without bound()[jvm] PASSED - -NodeManagerImplTest[jvm] > retired number rejects delayed field sequence without persistence()[jvm] PASSED - -NodeManagerImplTest[jvm] > session-bound node persistence from a retired generation is rejected()[jvm] PASSED - -NodeManagerImplTest[jvm] > toNodeID returns broadcast ID for broadcast nodeNum()[jvm] PASSED - -NodeManagerImplTest[jvm] > genuine remote first sighting emits exactly one notification()[jvm] PASSED - -NodeManagerImplTest[jvm] > retired number with same key suppressed even without canonical key candidate()[jvm] PASSED - -NodeManagerImplTest[jvm] > same number same key updates normally without stale classification()[jvm] PASSED - -NodeManagerImplTest[jvm] > repeated trusted migration preserves original hint and still permits distinct-key reuse()[jvm] PASSED - -NodeManagerImplTest[jvm] > keyless retired number rejects an unrepresented valid key for the session()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:model:testAndroidHostTest - -ChannelHashTest > aeadFoldsMarkerIntoHash PASSED - -ChannelHashTest > aeadDoesNotChangeIdentity PASSED - -ChannelHashTest > defaultChannelHashMatchesFirmware PASSED - -ExcludedModuleTest > no bits set excludes nothing PASSED - -ExcludedModuleTest > metadata not read yet excludes nothing PASSED - -ExcludedModuleTest > a set bit excludes only its own module PASSED - -LocalStatsTest > a real reading passes through unchanged PASSED - -LocalStatsTest > the never-reported sentinel maps to null PASSED - -MqttJsonPayloadTest > non_string_primitive_payload_is_coerced_to_text PASSED - -MqttJsonPayloadTest > string_payload_round_trips_as_string PASSED - -MqttJsonPayloadTest > null_payload_decodes_to_null PASSED - -MqttJsonPayloadTest > garbage_input_still_fails PASSED - -MqttJsonPayloadTest > array_payload_decodes_to_compact_json_text PASSED - -MqttJsonPayloadTest > object_payload_decodes_to_compact_json_text PASSED - -MqttJsonPayloadTest > absent_payload_decodes_to_null PASSED - -MqttJsonPayloadTest > string_payload_decodes_unchanged PASSED - -RegionInfoTest > eu_866_lite_gives_four_600kHz_slots PASSED - -RegionInfoTest > explicit_channel_num_wins_over_override_slot PASSED - -RegionInfoTest > ham_2m_regions_use_20kHz_slots PASSED - -RegionInfoTest > ensure_firmware_regions_are_mapped_in_RegionInfo PASSED - -RegionInfoTest > ham_70cm_and_125cm_regions_use_100kHz_slots PASSED - -RegionInfoTest > standard_regions_keep_legacy_slot_math PASSED - -RegionInfoTest > eu_n_868_narrow_defaults_to_first_slot PASSED - -GeofenceRadiusPresetsTest > nearestSnapsToClosestPreset PASSED - -GeofenceRadiusPresetsTest > bothListsStartWithOff PASSED - -GeofenceRadiusPresetsTest > forUnitsSelectsBySystem PASSED - -ChannelReconciliationTest > a duplicated channel does not drag a conversation off its own slot PASSED - -ChannelReconciliationTest > a missing lora config on either side retires nothing PASSED - -ChannelReconciliationTest > a duplicate old slot is retired rather than merged into the slot that kept the identity PASSED - -ChannelReconciliationTest > two different custom lora configs are not yet distinguished PASSED - -ChannelReconciliationTest > a preset switch is a channel change PASSED - -ChannelReconciliationTest > an empty new channel list retires nothing PASSED - -ChannelReconciliationTest > an unchanged set produces no changes PASSED - -ChannelReconciliationTest > a parked channel is reclaimed when it comes back PASSED - -ChannelReconciliationTest > a duplicated channel resolves to its lowest slot PASSED - -ChannelReconciliationTest > a replaced slot retires the previous occupant PASSED - -ChannelReconciliationTest > region is not part of channel identity PASSED - -ChannelReconciliationTest > a token distinguishes name from psk and never leaks either PASSED - -ChannelReconciliationTest > duplicate slots pair off one to one PASSED - -ChannelReconciliationTest > blank padding secondaries are not treated as channels PASSED - -ChannelReconciliationTest > a duplicated channel is reclaimed only once PASSED - -ChannelReconciliationTest > the default psk is disambiguated across presets PASSED - -ChannelReconciliationTest > a reordered channel moves rather than retires PASSED - -DistanceExtensionsTest > kmhIn handles zero PASSED - -DistanceExtensionsTest > storm distance stays in the large unit PASSED - -DistanceExtensionsTest > distances keep their precision PASSED - -DistanceExtensionsTest > kmhIn converts to mph for imperial PASSED - -DistanceExtensionsTest > kmhIn returns value unchanged for metric PASSED - -DistanceExtensionsTest > metres switch to kilometres at the threshold PASSED - -SfppHasherTest > outputIsAlways16Bytes PASSED - -SfppHasherTest > littleEndianByteOrder PASSED - -SfppHasherTest > maxIntValues PASSED - -SfppHasherTest > emptyPayloadProduces16Bytes PASSED - -SfppHasherTest > differentPayloadsProduceDifferentHashes PASSED - -SfppHasherTest > differentIdsProduceDifferentHashes PASSED - -SfppHasherTest > differentFromProduceDifferentHashes PASSED - -SfppHasherTest > deterministicOutput PASSED - -UnitConversionsTest > metersPerSecondToMph PASSED - -UnitConversionsTest > celsiusToFahrenheit PASSED - -DataPacketTest > hopsAway_isUnknownForInvalidHopValues PASSED - -ChannelOptionTest > ensure_every_ModemPreset_is_mapped_in_ChannelOption PASSED - -ChannelOptionTest > ensure_no_extra_mappings_exist_in_ChannelOption PASSED - -FirmwareUpdateNoticePolicyTest > dedupe key scopes notifications to node hardware target and stable version PASSED - -FirmwareUpdateNoticePolicyTest > dedupe only suppresses a previously scheduled notification PASSED - -> Task :core:prefs:compileTestKotlinJvm -> Task :core:prefs:compileJvmTestJava NO-SOURCE -> Task :core:prefs:jvmTestClasses - -> Task :core:data:jvmTest - -SwitchingChannelSetDataSourceTest[jvm] > a whole-set write reconciles immediately()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > the first reconcile only captures a baseline()[jvm] PASSED - -NodeManagerImplTest[jvm] > eviction never drops user-marked nodes()[jvm] PASSED - -NodeManagerImplTest[jvm] > ambiguous noncanonical renumber installs identity into empty slot in memory()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedUser preserves existing user if incoming is default()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedPosition keeps precise position when a coarse report lands in the same box()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > disabled channels are ignored()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > updateChannelSettings fills gaps with blank channels to preserve indices()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > concurrent updateChannelSettings does not lose updates()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > replaceAllSettings replaces the whole list()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > clearing the channel set keeps the reconciliation baseline()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > clearChannelSet empties the channel set()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > updateChannelSettings places channel at its index()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > the handshake lora write does not archive conversations()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > switching device does not leak channels across databases()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > setLoraConfig preserves existing channel settings()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > per-slot writes do not reconcile()[jvm] PASSED - -SwitchingChannelSetDataSourceTest[jvm] > updateChannelSet atomically replaces settings and lora()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestNeighborInfo_localNode_generatesDummyWhenNoCached()[jvm] PASSED - -NodeManagerImplTest[jvm] > a flood of novel NodeInfo packets cannot grow the in-memory index without bound()[jvm] PASSED - -NodeManagerImplTest[jvm] > legitimate reuse clears prior retirement hint before a later keyless retirement()[jvm] PASSED - -NodeManagerImplTest[jvm] > getMyId returns empty when disconnected()[jvm] PASSED - -NodeManagerImplTest[jvm] > updateNodeAndPersist awaits the repository write()[jvm] PASSED - -NodeManagerImplTest[jvm] > local number change during User reduction retries classification atomically()[jvm] PASSED - -NodeManagerImplTest[jvm] > ambiguous noncanonical renumber replaces telemetry placeholder without session lockout()[jvm] PASSED - -NodeManagerImplTest[jvm] > established same-key stale replay is removed in memory without repository mutation()[jvm] PASSED - -NodeManagerImplTest[jvm] > clear starts a new session without retired-number suppression()[jvm] PASSED - -NodeManagerImplTest[jvm] > old ID survivor restored after put changes user ID()[jvm] PASSED - -NodeManagerImplTest[jvm] > three nodes sharing one user ID selects deterministic representative()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendAdminForConnectionForwardsLifecycleOwnershipToAdmission()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestNeighborInfo_remoteNode_sendsRequest()[jvm] PASSED - -CommandSenderImplTest[jvm] > resolveNodeNum_local_returnsMyNodeNum()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendData_setsStatusQueued()[jvm] PASSED - -CommandSenderImplTest[jvm] > generatePacketId_returnsNonZero()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendData_setsIdWhenZero()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getMeshMetrics_returns_valid_metrics_with_active_nodes()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendAdminSurfacesQueueRejection()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestTraceroute_recordsStartTime()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getMeshMetrics_returns_not_connected_when_disconnected()[jvm] PASSED - -> Task :core:prefs:compileAndroidHostTest -> Task :core:ui:compileKotlinJvm - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::loadLibrary has been called by androidx.sqlite.driver.bundled.NativeLibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.sqlite/sqlite-bundled-jvm/2.7.1/ab882d5991b28bcbe4a02f480284f4c3c3a84bb9/sqlite-bundled-jvm-2.7.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:model:testAndroidHostTest - -FirmwareUpdateNoticePolicyTest > selects Meshtastic Flasher when Android cannot update the hardware over the active connection PASSED - -FirmwareUpdateNoticePolicyTest > creates an informational OTA update notice for an older connected ESP32 node PASSED - -FirmwareUpdateNoticePolicyTest > does not create a notice when the stable manifest omits the hardware target PASSED - -FirmwareUpdateNoticePolicyTest > does not create a notice for missing malformed current equal or newer versions PASSED - -MentionTest > textMentionsNode matches case-insensitively PASSED - -MentionTest > textMentionsNode empty or unknown local id never matches PASSED - -MentionTest > textMentionsNode matches an exact mention token PASSED - -MentionTest > MENTION_TOKEN_REGEX captures the hex id and rejects trailing hex PASSED - -MentionTest > textMentionsNode does not match a different node PASSED - -MentionTest > textMentionsNode does not match plain text without the token PASSED - -MentionTest > textMentionsNode does not match when trailing hex extends the id PASSED - -MentionTest > textMentionsNode matches a mention at the end of text PASSED - -DataPacketTest > nodeNumToDefaultId_formatsHexWithPrefix PASSED - -NodeAddressTest > toContactKey_nonZeroChannel PASSED - -NodeAddressTest > idToNum_overflow_returnsNull PASSED - -NodeAddressTest > numToDefaultId_zero_padsToEightChars PASSED - -NodeAddressTest > idToNum_null_returnsNull PASSED - -NodeAddressTest > contactKey_channelOrNull_returnsDigitForPrefixedKey PASSED - -NodeAddressTest > numToDefaultId_maxInt_formatsCorrectly PASSED - -NodeAddressTest > dataPacket_isBroadcast_trueForBroadcastDestination PASSED - -NodeAddressTest > contactKey_broadcast_factory PASSED - -NodeAddressTest > toIdString_byId PASSED - -NodeAddressTest > contactKey_emptyKey_isSafe PASSED - -NodeAddressTest > dataPacket_source_parsesLocal PASSED - -DataPacketTest > equalityAndCopy_preserveDataUntilModified PASSED - -DataPacketTest > alertProperty_onlyReturnsForAlertPackets PASSED - -DataPacketTest > textConstructor_setsTextPayloadProperties PASSED - -HamNameTest > forOnboarding_keeps_the_long_name_when_only_the_call_sign_is_over_long PASSED - -HamNameTest > forUnlicensing_keeps_a_composed_name_the_node_actually_has PASSED - -HamNameTest > split_keeps_a_later_separator_inside_the_long_name PASSED - -HamNameTest > compose_omits_the_separator_when_the_long_name_is_unset PASSED - -HamNameTest > compose_joins_the_two_halves_with_the_separator PASSED - -HamNameTest > the_widest_pair_the_proto_can_carry_fits_the_firmware_owner_name PASSED - -HamNameTest > forOnboarding_clips_on_a_code_point_boundary PASSED - -HamNameTest > forOnboarding_clips_a_demoted_name_to_the_proto_cap PASSED - -HamNameTest > forOnboarding_leaves_an_already_composed_name_alone PASSED - -HamNameTest > split_round_trips_every_name_compose_can_build PASSED - -HamNameTest > split_separates_a_composed_name PASSED - -HamNameTest > forUnlicensing_drops_the_separator_left_by_an_abandoned_onboarding PASSED - -HamNameTest > forOnboarding_demotes_an_over_long_name_to_the_long_name_half PASSED - -HamNameTest > split_reads_a_name_without_a_separator_as_all_call_sign PASSED - -HamNameTest > forOnboarding_leaves_a_name_that_can_be_a_call_sign_alone PASSED - -MergePowerChannelLabelTest > keepsExistingChannelsWhenSettingAnother PASSED - -MergePowerChannelLabelTest > setsLabelAndTrims PASSED - -MergePowerChannelLabelTest > padsEarlierChannelsWithBlanks PASSED - -MergePowerChannelLabelTest > clearingLastLabelDropsTrailingBlanks PASSED - -MergePowerChannelLabelTest > clearingAMiddleLabelKeepsLaterOnesAsBlankSlots PASSED - -DeviceTypeTest > fromAddress_returns_null_for_non_presented_prefixes PASSED - -DeviceTypeTest > fromAddress_preserves_transport_analytics_names PASSED - -HardwareSupportTierTest > actively supported decides the rung for everything that is not maker PASSED - -HardwareSupportTierTest > a maker board reads maker even once the registry marks it actively supported PASSED - -NodeSecurityIndicatorTest > of reads the same decision off a Node PASSED - -NodeSecurityIndicatorTest > older and unversioned nodes keep the locks PASSED - -NodeSecurityIndicatorTest > an in-person verified contact outranks signing at any version PASSED - -NodeSecurityIndicatorTest > 2_8 nodes show verification state instead of the locks PASSED - -NodeSecurityIndicatorTest > a heard signature shows the signed glyph even when the version is unknown PASSED - -NodeSecurityIndicatorTest > the connected radio reads as verified at any version PASSED - -NodeSecurityIndicatorTest > a key mismatch is a warning at any version - even for a verified contact PASSED - -NodeSecurityIndicatorTest > 2_8 and newer report signing support - older and unknown do not PASSED - -RouteDiscoveryTest > ok_whenOnlyForwardRoute_endpointsPositioned PASSED - -RouteDiscoveryTest > missingEndpoints_whenReturnRouteEndpointMissing PASSED - -RouteDiscoveryTest > noMappableNodes_whenNonePositioned PASSED - -RouteDiscoveryTest > directRoute_withTwoNodes PASSED - -RouteDiscoveryTest > ok_whenEndpointsPositioned_andIntermediateNot PASSED - -RouteDiscoveryTest > missingEndpoints_whenForwardEndMissing PASSED - -RouteDiscoveryTest > ok_whenAllNodesHavePositions PASSED - -RouteDiscoveryTest > missingEndpoints_whenForwardStartMissing PASSED - -RouteDiscoveryTest > noMappableNodes_whenEmptyRoutes PASSED - -WaypointToGeofenceTest > radiusOnlyDecodesCircleNoBox PASSED - -HardwareSupportTierTest > isMaker defaults to false so an absent key reads as not maker PASSED - -HardwareSupportTierTest > a legacy or untiered maker board falls through to the lifecycle flag PASSED - -WaypointToGeofenceTest > geofenceFieldsSurviveEditAndRoundTrip PASSED - -WaypointToGeofenceTest > invertedBoundingBoxIsNormalized PASSED - -WaypointToGeofenceTest > bothShapesDecode PASSED - -WaypointToGeofenceTest > notifiesOnCrossingTruthTable PASSED - -WaypointToGeofenceTest > neitherShapeDecodesToNull PASSED - -WaypointToGeofenceTest > boxOnlyDecodesBoxNoCircle PASSED - -ChannelSetUrlTest > all supported channel counts preserve settings for replace and add PASSED - -ChannelSetUrlTest > legacy fragment add parameter remains add mode alongside other parameters PASSED - -MeshDataMapperTest > toDataPacket_preservesAbsentRssiRatherThanCoercingToZero PASSED - -MeshDataMapperTest > meshUser_defaultsEmptyFieldsFromEmptyProto PASSED - -MeshDataMapperTest > environmentMetrics_filtersSentinelAndInvalidValues PASSED - -MeshDataMapperTest > environmentMetrics_mapsTelemetryFields PASSED - -MeshDataMapperTest > toDataPacket_keepsAReportedZeroRssiDistinctFromAbsent PASSED - -MeshDataMapperTest > toDataPacket_mapsMeshPacketFields PASSED - -MeshDataMapperTest > toDataPacket_usesPkcChannelWhenPacketIsPkiEncrypted PASSED - -MeshDataMapperTest > deviceMetrics_mapsProtoFields PASSED - -MeshDataMapperTest > deviceMetrics_defaultsUnsetFieldsToZero PASSED - -MeshDataMapperTest > position_usesDefaultTimeAndZeroValuesForUnsetProtoFields PASSED - -MeshDataMapperTest > meshUser_mapsProtoFields PASSED - -MeshDataMapperTest > position_mapsScaledCoordinatesAndProvidedTime PASSED - -MeshDataMapperTest > toDataPacket_returnsNullWhenPacketHasNoDecodedData PASSED - -TelemetryChannelsTest > absentLegacyListLeavesMetricsUnchanged PASSED - -TelemetryChannelsTest > legacyListIsLiftedOntoPerChannelFields PASSED - -TelemetryChannelsTest > perChannelValuesWinOverLegacyList PASSED - -TelemetryChannelsTest > outOfRangeChannelIsNullRatherThanAnError PASSED - -TelemetryChannelsTest > oneWireAccessorReadsEveryChannelInOrder PASSED - -TelemetryChannelsTest > adcAccessorReadsEveryChannelInOrder PASSED - -TelemetryChannelsTest > measuredZeroIsDistinctFromAbsentChannel PASSED - -TelemetryChannelsTest > withAccessorsIgnoreOutOfRangeChannels PASSED - -TelemetryChannelsTest > legacyListLongerThanTheChannelRangeIsTruncated PASSED - -TelemetryChannelsTest > withAccessorsSetOnlyTheTargetChannel PASSED - -MessageDisplayedTextTest > displaysTranslationWhenToggledOn PASSED - -MessageDisplayedTextTest > displaysOriginalWhenNoTranslation PASSED - -MessageDisplayedTextTest > displaysOriginalWhenTranslationToggledOff PASSED - -MessageDisplayedTextTest > displaysOriginalWhileSearchingEvenWhenTranslationShown PASSED - -NodeTelemetryStringsTest > zero_voltage_and_current_are_reported PASSED - -NodeTelemetryStringsTest > zero_humidity_stays_filtered PASSED - -NodeTelemetryStringsTest > out_of_range_soil_moisture_is_still_rejected PASSED - -NodeTelemetryStringsTest > zero_temperature_is_reported PASSED - -NodeTelemetryStringsTest > soil_moisture_no_longer_requires_a_soil_temperature PASSED - -NodeTelemetryStringsTest > absent_environment_metrics_render_nothing PASSED - -NodeTelemetryStringsTest > zero_soil_readings_are_reported PASSED - -WaypointLockTest > placeholderLockShutsOutTheCreatorButRealOwnerLockDoesNot PASSED - -WaypointLockTest > unlockedWaypointIsModifiableByAnyone PASSED - -WaypointLockTest > unlockedWaypointIsNotLocked PASSED - -WaypointLockTest > lockedWaypointIsLocked PASSED - -WaypointLockTest > lockedWaypointIsModifiableOnlyByOwner PASSED - -LockdownStateTest > absence of lockdown status allows config writes PASSED - -LockdownStateTest > unlocked devices allow config writes PASSED - -LockdownStateTest > lockdown capable but disabled devices allow config writes PASSED - -LockdownStateTest > pending locked and not-yet-authorized states withhold config writes PASSED - -CodePointUtilsTest > zero renders as a control character without the waypoint helper PASSED - -CodePointUtilsTest > firstCodePointOrNull combines a surrogate pair PASSED - -CodePointUtilsTest > waypointIconOrDefault leaves a chosen icon alone PASSED - -CodePointUtilsTest > toCodePointString honours an explicit fallback PASSED - -CodePointUtilsTest > isValidCodePoint accepts scalar values PASSED - -CodePointUtilsTest > toCodePointString encodes bmp and supplementary planes PASSED - -CodePointUtilsTest > isValidCodePoint rejects out of range and surrogates PASSED - -CodePointUtilsTest > toCodePointString falls back instead of throwing on out-of-range input PASSED - -CodePointUtilsTest > firstCodePointOrNull returns null for an empty string rather than throwing PASSED - -CodePointUtilsTest > waypointIconOrDefault maps the unset icon to the pushpin PASSED - -CodePointUtilsTest > firstCodePointOrNull reads a basic-plane character as itself PASSED - -PositionPrecisionTest > an undegraded position has no uncertainty circle PASSED - -PositionPrecisionTest > each extra bit roughly halves the radius PASSED - -PositionPrecisionTest > every degraded depth has a radius PASSED - -PositionPrecisionTest > radii match the values the OSMdroid marker used PASSED - -TelemetryExtensionsTest > lightning alone is valid PASSED - -TelemetryExtensionsTest > temperature and humidity together are valid PASSED - -TelemetryExtensionsTest > no environment metrics is not valid PASSED - -TelemetryExtensionsTest > temperature alone or a NaN temperature is not valid PASSED - -NodeAddressTest > fromString_emptyString_returnsById PASSED - -NodeAddressTest > toIdString_byNum PASSED - -NodeAddressTest > toIdString_local PASSED - -NodeAddressTest > toContactKey_formatsChannelPlusId PASSED - -NodeAddressTest > fromString_shortHexId_returnsByNum PASSED - -NodeAddressTest > contactKey_addressString_extractsAfterFirstChar PASSED - -NodeAddressTest > numToDefaultId_negativeOne_formatsAsFffffffff PASSED - -NodeAddressTest > fromString_validHexId_returnsByNum PASSED - -NodeAddressTest > fromString_null_returnsBroadcast PASSED - -NodeAddressTest > numToDefaultId_idToNum_roundtrip PASSED - -NodeAddressTest > idToNum_nonHex_returnsNull PASSED - -NodeAddressTest > idToNum_validHex_returnsInt PASSED - -NodeAddressTest > fromString_localString_returnsLocal PASSED - -NodeAddressTest > numToDefaultId_typicalValue_formatsCorrectly PASSED - -NodeAddressTest > contactKey_channel_extractsFirstDigit PASSED - -NodeAddressTest > idToNum_withBangPrefix_stripsAndParses PASSED - -NodeAddressTest > fromString_invalidHexAfterBang_returnsByIdFallback PASSED - -NodeAddressTest > contactKey_unprefixedKey_signalsNoChannelAndKeepsWholeAddress PASSED - -NodeAddressTest > dataPacket_isFromLocal_falseWithoutNodeNum PASSED - -NodeAddressTest > idToNum_emptyString_returnsNull PASSED - -NodeAddressTest > dataPacket_isFromLocal_falseForDifferentNodeNum PASSED - -NodeAddressTest > fromString_broadcastString_returnsBroadcast PASSED - -NodeAddressTest > fromString_arbitraryString_returnsById PASSED - -NodeAddressTest > dataPacket_isBroadcast_falseForUnicastDestination PASSED - -NodeAddressTest > dataPacket_destination_parsesBroadcast PASSED - -NodeAddressTest > dataPacket_isFromLocal_trueForMatchingNodeNum PASSED - -NodeAddressTest > contactKey_address_parsesCorrectly PASSED - -NodeAddressTest > dataPacket_isFromLocal_trueForLocal PASSED - -NodeAddressTest > toIdString_broadcast PASSED - -RetiredContactKeyTest > it still reads as a channel conversation rather than a direct message PASSED - -RetiredContactKeyTest > live keys are unaffected PASSED - -RetiredContactKeyTest > a retired key parses as a broadcast with no live slot PASSED - -GeofenceTest > boxBoundsAreInclusive PASSED - -GeofenceTest > boxExcludesOutsidePoints PASSED - -GeofenceTest > geofenceUsesOrSemantics PASSED - -GeofenceTest > circleExcludesFarPoint PASSED - -GeofenceTest > circleContainsCenterAndNearby PASSED - -ChannelSetReplacementTest > replacement plan normalizes padding and duplicates before slot validation PASSED - -ChannelSetReplacementTest > replacement plan rejects empty profile channel set before producing writes PASSED - -MeshBeaconOfferTest > default 1-byte psk shorthand matches its expanded full-length equivalent PASSED - -MeshBeaconOfferTest > null lora config forces SWITCH PASSED - -MeshBeaconOfferTest > different preset forces SWITCH PASSED - -MeshBeaconOfferTest > unnamed primary matches a beacon that names the preset explicitly yielding ADD PASSED - -MeshBeaconOfferTest > empty-name primary channel matches an offer naming the preset display name PASSED - -MeshBeaconOfferTest > toJoinChannelSet omits lora for ADD and includes it for SWITCH PASSED - -MeshBeaconOfferTest > decode returns null for a malformed record PASSED - -MeshBeaconOfferTest > join strips position sharing from the offered channel PASSED - -MeshBeaconOfferTest > offer matching a configured channel by name and psk is already joined PASSED - -MeshBeaconOfferTest > no offer channel yields NONE PASSED - -MeshBeaconOfferTest > different region forces SWITCH PASSED - -MeshBeaconOfferTest > SWITCH without an offered preset keeps the current preset and region and resets channel_num PASSED - -MeshBeaconOfferTest > matching preset region and slot yields ADD PASSED - -MeshBeaconOfferTest > encode then decode round-trips an absent rssi without collapsing it to zero PASSED - -MeshBeaconOfferTest > blank-name no-psk secondary placeholder slot is not mistaken for an already-joined channel PASSED - -MeshBeaconOfferTest > isAlreadyJoined returns false when no channels are configured PASSED - -MeshBeaconOfferTest > isAlreadyJoined returns false when lora config is unknown so a real invitation is never hidden PASSED - -MeshBeaconOfferTest > offer for a channel not configured on the radio is not already joined PASSED - -MeshBeaconOfferTest > same name but different psk is a different mesh and is not already joined PASSED - -MeshBeaconOfferTest > SWITCH ships a fresh lora config so stale RF pins never survive the retune PASSED - -MeshBeaconOfferTest > encode then decode round-trips a beacon offer PASSED - -MeshBeaconOfferTest > isAlreadyJoined returns false for a beacon with no offer channel PASSED - -SnrExtensionsTest > snrOrNull reports a negative reading PASSED - -SnrExtensionsTest > snrOrNull does not conflate a zero reading with an unknown one PASSED - -SnrExtensionsTest > snrOrNull reports a positive reading PASSED - -SnrExtensionsTest > snrOrNull treats a true zero as a measurement rather than as absent PASSED - -WireExtensionsTest > null bytes short-circuit without touching the logger PASSED - -WireExtensionsTest > no logger means no log line only null PASSED - -WireExtensionsTest > a decode failure logs at WARN not ERROR PASSED - -WireExtensionsTest > the ByteArray overload delegates the same WARN behavior PASSED - -> Task :core:ui:bundleAndroidMainClassesToCompileJar - -> Task :core:data:jvmTest - -CommandSenderImplTest[jvm] > requestTelemetryForConnectionForwardsLifecycleOwnershipToAdmission()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > sendMessage_counts_multi_byte_text_in_bytes_not_characters()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getNodeDetails_returns_not_found_for_unknown_node()[jvm] PASSED - -CommandSenderImplTest[jvm] > resolveNodeNum_byId_looksUpAndReturns()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendAdminAwaitResult_preservesNonAcceptedStatus()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestNeighborInfo_localNode_usesCachedNeighborInfo()[jvm] PASSED - -CommandSenderImplTest[jvm] > generatePacketId_staysNonZeroOverManyIterations()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > sendMessage_rejects_text_one_byte_over_the_limit()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > sendMessage_returns_rate_limited_when_exhausted()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestTraceroute_generatesNonZeroIdWhenCallerSuppliesZero()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getUnreadSummary_returns_empty_when_no_unread()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getNodeDetails_returns_not_connected_when_disconnected()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendAdminImmediate_dispatchesDirectToRadioWithPasskeyAndNoResponse()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getMeshMetrics_returns_zero_health_score_when_empty()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getNodeDetails_returns_error_for_invalid_hex_format()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getNodeDetails_returns_node_data_for_valid_hex_id()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendLockdownPassphrase_returnsFalseWhenLocalNodeIdentityIsUnavailable()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendAdminAwaitResult_generatesNonZeroIdWhenCallerSuppliesZero()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestNeighborInfo_localNode_doesNotStartTimerWhenQueueRejectsPacket()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getMeshMetrics_falls_back_to_current_time_when_all_lastHeard_zero()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestNeighborInfo_generatesNonZeroIdWhenCallerSuppliesZero()[jvm] PASSED - -CommandSenderImplTest[jvm] > resolveNodeNum_local_returnsZeroWhenMyNodeNumNull()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendPosition_doesNotUpdateLocalPositionWhenQueueRejectsPacket()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestUserInfo_rejectsWhenLocalNodeRecordIsUnavailable()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestTelemetry_surfacesQueueRejection()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendData_rejectsOversizedPayload()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > maxMessageLength_is_the_largest_text_the_send_path_will_encode()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getNodeDetails_returns_null_position_when_no_fix()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getRecentMessages_contact_not_found()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > sendMessage_returns_not_connected_when_disconnected()[jvm] PASSED - -CommandSenderImplTest[jvm] > setFixedPosition_doesNotProjectZeroPositionWhenRemovingIt()[jvm] PASSED - -CommandSenderImplTest[jvm] > generatePacketId_isIncrementing()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getMeshMetrics_returns_degraded_health_when_no_nodes_online()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendPosition_rejectsWhenLocalNodeIdentityIsUnavailable()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > getNodeDetails_round_trips_high_bit_node_num()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendPosition_updatesLocalPositionWhenNotFixed()[jvm] PASSED - -CommandSenderImplTest[jvm] > resolveNodeNum_broadcast_returnsNodeNumBroadcast()[jvm] PASSED - -AiFunctionProviderImplTest[jvm] > sendMessage_accepts_text_exactly_at_the_byte_limit()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestNeighborInfo_remoteNode_doesNotStartTimerWhenQueueRejectsPacket()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendLockdownPassphrase_returnsDirectTransportAdmission()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendData_requiresNonZeroDataType()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendData_marksPacketErrorAndThrowsWhenQueueRejectsIt()[jvm] PASSED - -CommandSenderImplTest[jvm] > resolveNodeNum_byId_throwsForUnknown()[jvm] PASSED - -CommandSenderImplTest[jvm] > resolveNodeNum_byNum_returnsPassthrough()[jvm] PASSED - -CommandSenderImplTest[jvm] > setFixedPosition_doesNotUpdateLocalPositionWhenQueueRejectsPacket()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendAdmin_generatesNonZeroIdWhenCallerSuppliesZero()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendAdmin_injectsSessionPasskey()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendPosition_skipsLocalUpdateWhenFixedPosition()[jvm] PASSED - -CommandSenderImplTest[jvm] > setFixedPosition_rejectsBeforeDeviceMutationWhenLocalNodeIdentityIsUnavailable()[jvm] PASSED - -CommandSenderImplTest[jvm] > sendLockNow_returnsDirectTransportAdmission()[jvm] PASSED - -CommandSenderImplTest[jvm] > requestTraceroute_doesNotStartTimerWhenQueueRejectsPacket()[jvm] PASSED - -MeshDataHandlerTest[jvm] > routing ack completes dispatched response as accepted()[jvm] PASSED - -MeshDataHandlerTest[jvm] > same reaction packet id from a different sender is persisted()[jvm] PASSED - -MeshDataHandlerTest[jvm] > message from ignored node is filtered()[jvm] PASSED - -MeshDataHandlerTest[jvm] > handleReceivedData does not broadcast for position from local node()[jvm] PASSED - -MeshDataHandlerTest[jvm] > non-owner unlock replay of a locked waypoint is dropped()[jvm] PASSED - -MeshDataHandlerTest[jvm] > neighborinfo packet delegates to neighborInfoHandler and broadcasts()[jvm] PASSED - -MeshDataHandlerTest[jvm] > our own mesh beacon is ignored()[jvm] PASSED - -MeshDataHandlerTest[jvm] > position packet delegates to nodeManager()[jvm] PASSED - -MeshDataHandlerTest[jvm] > message for another conversation while foregrounded notifies silently()[jvm] PASSED - -MeshDataHandlerTest[jvm] > text message is persisted via rememberDataPacket()[jvm] PASSED - -MeshDataHandlerTest[jvm] > text with reply_id and emoji is treated as reaction()[jvm] PASSED - -MeshDataHandlerTest[jvm] > mesh beacon without a join offer is ignored()[jvm] PASSED - -MeshDataHandlerTest[jvm] > range test packet is remembered as text message type()[jvm] PASSED - -MeshDataHandlerTest[jvm] > owner unlock of their own locked waypoint is accepted()[jvm] PASSED - -MeshDataHandlerTest[jvm] > same packet id from a different sender is persisted()[jvm] PASSED - -MeshDataHandlerTest[jvm] > handleReceivedData tracks analytics()[jvm] PASSED - -MeshDataHandlerTest[jvm] > telemetry from local node delegates to telemetryHandler()[jvm] PASSED - -MeshDataHandlerTest[jvm] > nodeinfo packet from local node is ignored()[jvm] PASSED - -MeshDataHandlerTest[jvm] > nodeinfo packet from remote delegates to handleReceivedUser()[jvm] PASSED - -MeshDataHandlerTest[jvm] > mesh beacon with a join offer is recorded as an invitation()[jvm] PASSED - -MeshDataHandlerTest[jvm] > waypoint locked to someone other than the sender is dropped()[jvm] PASSED - -NodeDeletionDatabaseSwitchTest[jvm] > deleteNodeUsesOneDatabaseCaptureForNodeAndMetadata()[jvm] PASSED - -MeshDataHandlerTest[jvm] > PKI reaction persists normalized channel and finds its notification parent()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > packet with empty payload bytes is ignored()[jvm] PASSED - -MeshDataHandlerTest[jvm] > duplicate text message is not inserted again()[jvm] PASSED - -MeshDataHandlerTest[jvm] > mention from a muted node does not notify()[jvm] PASSED - -MeshDataHandlerTest[jvm] > traceroute packet delegates to tracerouteHandler and suppresses broadcast()[jvm] PASSED - -MeshDataHandlerTest[jvm] > message while backgrounded notifies normally even for the last viewed conversation()[jvm] PASSED - -MeshDataHandlerTest[jvm] > mention from an unmuted node in a muted channel still notifies()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > get_module_config_response from remote without status message does not crash()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > packet with null decoded payload is ignored()[jvm] PASSED - -MeshDataHandlerTest[jvm] > message for the conversation on screen does not notify()[jvm] PASSED - -MeshDataHandlerTest[jvm] > admin message delegates to adminPacketHandler()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > session passkey is updated when present()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > device metadata from own node delegates to configFlowManager()[jvm] PASSED - -MeshDataHandlerTest[jvm] > mesh beacon offering an already-configured channel is stored but does not notify()[jvm] PASSED - -MeshDataHandlerTest[jvm] > text persistence from a retired session is rejected before database access()[jvm] PASSED - -MeshDataHandlerTest[jvm] > telemetry packet delegates to telemetryHandler()[jvm] PASSED - -MeshDataHandlerTest[jvm] > paxcounter packet delegates to nodeManager()[jvm] PASSED - -MeshDataHandlerTest[jvm] > non-owner update to an unlocked waypoint is accepted()[jvm] PASSED - -MeshDataHandlerTest[jvm] > new waypoint from a non-owner is accepted when none is stored()[jvm] PASSED - -MeshDataHandlerTest[jvm] > owner edit of their own locked waypoint is accepted()[jvm] PASSED - -MeshDataHandlerTest[jvm] > filtered message is inserted with filtered flag()[jvm] PASSED - -MeshDataHandlerTest[jvm] > store forward packet delegates to storeForwardHandler()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > combined admin message with passkey and config response()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > get_module_config_response from remote node updates node status()[jvm] PASSED - -MeshDataHandlerTest[jvm] > testInitialization()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > get_config_response from remote node is ignored()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > get_channel_response from own node delegates to configHandler()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > get_module_config_response from own node delegates to configHandler()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > get_channel_response from remote node is ignored()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > device metadata from remote node delegates to nodeManager()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > empty session passkey does not record refresh()[jvm] PASSED - -AdminPacketHandlerImplTest[jvm] > get_config_response from own node delegates to configHandler()[jvm] PASSED - -MeshDataHandlerTest[jvm] > routing nak completes dispatched response as rejected()[jvm] PASSED - -MeshDataHandlerTest[jvm] > non-owner takeover of a locked waypoint is dropped()[jvm] PASSED - -MeshDataHandlerTest[jvm] > handleReceivedData returns early when dataMapper returns null()[jvm] PASSED - -MeshDataHandlerTest[jvm] > routing packet always broadcasts()[jvm] PASSED - -MeshDataHandlerTest[jvm] > handleReceivedData broadcasts for remote packets()[jvm] PASSED - -MeshDataHandlerTest[jvm] > routing ack from a retired generation cannot update the replacement database()[jvm] PASSED - -DeviceLinkRepositoryImplTest[jvm] > worldwideLinksShowRegardlessOfRegion()[jvm] PASSED - -GeofenceMonitorTest[jvm] > ownPositionIsNeverEvaluated()[jvm] PASSED - -GeofenceMonitorTest[jvm] > favoritesOnlySuppressesNonFavoriteCrossing()[jvm] PASSED - -GeofenceMonitorTest[jvm] > remoteCreatedGeofenceDoesNotNotify()[jvm] PASSED - -GeofenceMonitorTest[jvm] > firstSightingInsideDoesNotNotify()[jvm] PASSED - -GeofenceMonitorTest[jvm] > enterOnlyWaypointDoesNotNotifyOnExit()[jvm] PASSED - -DeviceLinkRepositoryImplTest[jvm] > ensureImportedSeedsOnlyWhenEmpty()[jvm] PASSED - -DeviceLinkRepositoryImplTest[jvm] > reconcilePrunesShortCodesNoLongerInCatalog()[jvm] PASSED - -DeviceLinkRepositoryImplTest[jvm] > seedsFromBundledJsonWhenEmptyAndDropsInternalLinks()[jvm] PASSED - -DeviceLinkRepositoryImplTest[jvm] > getLinksForTargetFiltersByTargetAndRegionVendorFirst()[jvm] PASSED - -DeviceLinkRepositoryImplTest[jvm] > emptyResponseLeavesCacheUntouched()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Disconnected state stops services()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP Stage 1 meaningful progress resets watchdog without false restart()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Recovery exhaustion after three consecutive failures surfaces sticky error and stops recovery()[jvm] PASSED - -> Task :core:repository:compileTestKotlinJvm - -> Task :core:network:testAndroidHostTest - -MockRadioTransportTest > close is terminal and suppresses delayed acknowledgements PASSED - -MockRadioTransportTest > config stage answers with my_info and its own nonce but never with node info PASSED - -MockRadioTransportTest > an unrecognised want_config_id is ignored rather than answered with the wrong stage PASSED - -MockRadioTransportTest > received packets look like direct LoRa receptions so signal metrics reach the node list PASSED - -MockRadioTransportTest > node info stage does not re-send my_info because that would reset the handshake PASSED - -MockRadioTransportTest > an open transport delivers the delayed fake acknowledgement PASSED - -MockRadioTransportTest > malformed admin payload is ignored without escaping the admission contract PASSED - -MockRadioTransportTest > close stops the simulated mesh PASSED - -MockRadioTransportTest > node info stage populates a mesh whose nodes all render PASSED - -MockRadioTransportTest > seeded traffic supplies a channel thread a direct thread positions and telemetry PASSED - -MockRadioTransportTest > start signals onConnect without emitting frames PASSED - -MockRadioTransportTest > malformed payload is rejected without escaping the admission contract PASSED - -ScanOnlyProbeGateTest > the default threshold is far above the reconnect policy transient-disconnect threshold PASSED - -ScanOnlyProbeGateTest > a non-positive threshold is rejected PASSED - -ScanOnlyProbeGateTest > no probing while the failure streak is below the threshold PASSED - -ScanOnlyProbeGateTest > a stable reconnect policy outcome disarms probing PASSED - -ScanOnlyProbeGateTest > the default threshold is only reachable after minutes of unbroken failure PASSED - -ScanOnlyProbeGateTest > probing starts at the threshold and periodically yields to bonded fallback PASSED - -KermitMqttLoggerTest > an error with no throwable is downgraded to WARN PASSED - -KermitMqttLoggerTest > NONE is dropped PASSED - -KermitMqttLoggerTest > a connection teardown log is not reported as an application error PASSED - -KermitMqttLoggerTest > a broker rejection is a user configuration problem rather than an application error PASSED - -KermitMqttLoggerTest > an expected connection failure logged at ERROR is downgraded to WARN PASSED - -KermitMqttLoggerTest > a genuine error logged at ERROR stays an error PASSED - -KermitMqttLoggerTest > other levels map straight through and keep the library tag PASSED - -HeartbeatSenderTest > sendHeartbeat encodes a heartbeat and runs afterHeartbeat after sending PASSED - -HeartbeatSenderTest > sender demotes repeated rejections and an accepted handoff resets warning severity PASSED - -HeartbeatSenderTest > heartbeat loop emits at the configured interval PASSED - -HeartbeatSenderTest > zero interval sends all scheduled heartbeats without advancing time PASSED - -HeartbeatSenderTest > nonces are strictly increasing and never 1 the firmware NodeInfo-ping trigger PASSED - -HeartbeatSenderTest > rejected heartbeat skips post-send work PASSED - -HeartbeatSenderTest > restarting a heartbeat loop resumes with the next nonce PASSED - -HeartbeatSenderTest > cancelling a heartbeat loop stops additional heartbeats PASSED - -> Task :core:barcode:compileFdroidDebugKotlin -> Task :core:barcode:compileFdroidDebugJavaWithJavac NO-SOURCE - -> Task :core:data:jvmTest - -MeshConnectionManagerImplTest[jvm] > post-handshake admission retries stop at the attempt cap()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Stage 1 config stall triggers transport restart and ends Disconnected()[jvm] PASSED - -NodeManagerImplTest[jvm] > eviction prefers placeholders over nodes with a real identity()[jvm] PASSED - -NodeManagerImplTest[jvm] > stale duplicate never deletes or upserts a repository row()[jvm] PASSED - -NodeManagerImplTest[jvm] > invalid public keys skip identity matching and update normally()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Disconnected state clears the stale noise floor()[jvm] PASSED - -NodeManagerImplTest[jvm] > different-key conflict preserves both nodes and emits no side effects()[jvm] PASSED - -NodeManagerImplTest[jvm] > removeByNodenum removes node from map()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP Stage 2 stall fires restartTransport at 12s()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP fast recovery preserves Disconnected-before-restartTransport ordering()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP Stage 1 stall report names TCP()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > rapid state transitions are serialized by connectionMutex()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP fast watchdog report names TCP()[jvm] PASSED - -NodeManagerImplTest[jvm] > fromByNum is independent of insertion order()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP Stage 2 NodeInfo progress resets watchdog()[jvm] PASSED - -NodeManagerImplTest[jvm] > notification skipped when identity changed before dispatch()[jvm] PASSED - -NodeManagerImplTest[jvm] > different established key at canonical num preserved as conflict()[jvm] PASSED - -NodeManagerImplTest[jvm] > trusted migration during the load window retires absent number and suppresses replay()[jvm] PASSED - -NodeManagerImplTest[jvm] > direct snapshot returns only the newly selected DB after a currentDb switch()[jvm] PASSED - -NodeManagerImplTest[jvm] > local authoritative renumber removes old same-key entries in memory upserts local no notification()[jvm] PASSED - -NodeManagerImplTest[jvm] > getMyNodeInfo synthesizes from repository and nodeDB()[jvm] PASSED - -NodeManagerImplTest[jvm] > User packet is discarded when clear starts a new session before CAS()[jvm] PASSED - -NodeManagerImplTest[jvm] > toNodeID returns user ID for known node()[jvm] PASSED - -NodeManagerImplTest[jvm] > public key diagnostics use a one-way fingerprint()[jvm] PASSED - -NodeManagerImplTest[jvm] > stale replay preserves no-key telemetry placeholder and canonical identity()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedPosition for local node ignores purely empty packets()[jvm] PASSED - -NodeManagerImplTest[jvm] > preferred canonical remains mapped after stale removal()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > BLE Stage 2 progress re-arms the 60s stall guard as an inactivity window()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > onNodeDbReady starts MQTT and requests history()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP Stage 1 stall fires restartTransport at 12s without retry()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > TCP Stage 1 watchdog fires after progress stops()[jvm] PASSED - -NodeManagerImplTest[jvm] > node persistence is suppressed while database writes are disabled()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedUser keeps the stored key when a different one arrives()[jvm] PASSED - -NodeManagerImplTest[jvm] > getMyNodeInfo returns null when repository has no info()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedPosition accepts a coarse report when the stored position is coarser()[jvm] PASSED - -NodeManagerImplTest[jvm] > malformed key lengths 1 31 33 are rejected and skip identity matching()[jvm] PASSED - -NodeManagerImplTest[jvm] > accepted local node remains byId representative()[jvm] PASSED - -NodeManagerImplTest[jvm] > notification never fires for stale conflict or local outcomes()[jvm] PASSED - -NodeManagerImplTest[jvm] > installNodeInfo clears publicKey for licensed users()[jvm] PASSED - -NodeManagerImplTest[jvm] > notification skipped when number becomes local node before dispatch()[jvm] PASSED - -NodeManagerImplTest[jvm] > getOrCreateNode creates default user for unknown node()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedPosition accepts a coarse report from a different box()[jvm] PASSED - -NodeManagerImplTest[jvm] > clear resets internal state()[jvm] PASSED - -NodeManagerImplTest[jvm] > neither num canonical preserves both no persistence no notification()[jvm] PASSED - -NodeManagerImplTest[jvm] > getMyId returns user ID when connected()[jvm] PASSED - -NodeManagerImplTest[jvm] > persisted local node fills null identity when live nodes change during load()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedUser updates user if incoming is higher detail()[jvm] PASSED - -NodeManagerImplTest[jvm] > installNodeInfo sets publicKey from user public_key()[jvm] PASSED - -NodeManagerImplTest[jvm] > retired number suppresses keyless and represented-key user replays()[jvm] PASSED - -NodeManagerImplTest[jvm] > loadCachedNodeDB result is discarded when clear starts a new session mid-load()[jvm] PASSED - -NodeManagerImplTest[jvm] > incoming canonical replaces own placeholder and removes noncanonical in memory only()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedTelemetry updates environment metrics()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedPosition with zero coordinates preserves last known location but updates satellites()[jvm] PASSED - -NodeManagerImplTest[jvm] > installNodeInfo keeps precise position when the snapshot only has the coarse one()[jvm] PASSED - -NodeManagerImplTest[jvm] > same-node persistence cannot finish with an older snapshot()[jvm] PASSED - -NodeManagerImplTest[jvm] > retired number accepts validated new-key reuse and un-retires the slot()[jvm] PASSED - -NodeManagerImplTest[jvm] > ambiguous noncanonical duplicates update from entry and preserve every candidate()[jvm] PASSED - -NodeManagerImplTest[jvm] > getMyNodeInfo falls back to nodeDB model when repository model is null()[jvm] PASSED - -NodeManagerImplTest[jvm] > retired number with different valid key can be legitimately reused()[jvm] PASSED - -NodeManagerImplTest[jvm] > handleReceivedTelemetry updates soil water metrics()[jvm] PASSED - -NodeManagerImplTest[jvm] > live node update during the load window is not overwritten by the snapshot()[jvm] PASSED - -NodeManagerImplTest[jvm] > complete 2_7 to 2_8 renumbering produces no old number notification()[jvm] PASSED - -NodeManagerImplTest[jvm] > trusted migration commits retirement before notification cancellation()[jvm] PASSED - -NodeManagerImplTest[jvm] > notification skipped when number retired between select and dispatch()[jvm] PASSED - -NodeManagerImplTest[jvm] > invalid Node publicKey falls back to valid User public_key()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > onNodeDbReady retains owned requests until queue admission opens()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Stage 2 node-info stall triggers transport restart()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Connected state triggers broadcast and config start()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > BLE Stage 1 stall report names BLE()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > onRadioConfigLoaded enqueues queued packets and sets time()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Disconnect during pre-handshake settle cancels config start()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > USB serial transport engages fast path like TCP()[jvm] PASSED - -SessionManagerImplTest[jvm] > observeSessionStatus emits NoSession initially when no key recorded()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > onNodeDbReady skips history when its lifecycle departs while config loads()[jvm] PASSED - -SessionManagerImplTest[jvm] > clearAll wipes per-node entries()[jvm] PASSED - -SessionManagerImplTest[jvm] > observeSessionStatus reports Active for a fresh recording()[jvm] PASSED - -SessionManagerImplTest[jvm] > recordSession stores per-node passkeys without overwriting siblings()[jvm] PASSED - -SessionManagerImplTest[jvm] > observeSessionStatus reports Stale once age exceeds threshold()[jvm] PASSED - -SessionManagerImplTest[jvm] > sessionRefreshFlow emits srcNodeNum on each non-empty recording()[jvm] PASSED - -SessionManagerImplTest[jvm] > recordSession with empty passkey is a no-op()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward text with broadcast rr sets to broadcast()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > BLE total cap fires the stall guard despite continuous trickle progress()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > onHandshakeProgress is a no-op when state is not Connecting()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > DeviceSleep behavior when power saving is on stays in DeviceSleep()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > DeviceSleep timeout is capped at MAX_SLEEP_TIMEOUT_SECONDS for high ls_secs()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > post-handshake admission retries stop when the connected lifecycle changes()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Successful handshake resets the consecutive recovery failure counter()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward stats ignores original_id()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus LINK_PROVIDE_FIRSTHALF handled as link provide()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus CHAIN_QUERY logs info without crash()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward text ignores original_id for a non-router-text rr()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus LINK_REQUEST logs info without crash()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward with no fields set does not crash()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward with malformed payload does not crash()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward heartbeat does not crash()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus with null payload returns early()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus LINK_PROVIDE with message_hash updates status()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward text keeps the header id when original_id is absent()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus LINK_PROVIDE_SECONDHALF handled as link provide()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward history creates text packet and updates last request()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward text without broadcast rr preserves destination()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus LINK_PROVIDE with commit_hash sets SFPP_CONFIRMED()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > SFPP update from a retired same-address generation is rejected()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward stats creates text data packet()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreForwardPlusPlus CANON_ANNOUNCE updates status by hash()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > concurrent sleep-timeout and radio state change are serialized()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward with null payload returns early()[jvm] PASSED - -StoreForwardPacketHandlerImplTest[jvm] > handleStoreAndForward text adopts original_id as the packet id()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > BLE Stage 1 progress re-arms the stall guard as an inactivity window()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Second recovery attempt applies exponential backoff delay before restart()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > USB Stage 1 stall report names USB()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Handshake completing before stall timeout does not trigger transport restart()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > getEditionReturnsMatchingRecordByEnumName()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > failedRefreshDoesNotRetryOnEveryCall()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > DeviceSleep behavior when power saving is off maps to Disconnected()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > seedsFromBundledJsonOnlyWhenTableEmpty()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > emptyNetworkResponseLeavesBundledSnapshotInPlace()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > networkRefreshReplacesBundledSnapshot()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Handshake stall recovery orders app disconnect before transport restart emissions()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > getEditionReturnsNullForUnknownEdition()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > onHandshakeComplete cancels armed Stage 2 fast watchdog()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > Connected state sends pre-handshake heartbeat before config request()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > observeEditionEmitsNullForUnknownEdition()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > absentAssetYieldsNullWithoutCrashing()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > observeEditionReEmitsWhenTheCacheIsRefreshed()[jvm] PASSED - -MeshConnectionManagerImplTest[jvm] > post-handshake failure recovery disconnects before restarting transport()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > persistsAcrossRepositoryInstancesBackedByTheSameDb()[jvm] PASSED - -MqttManagerImplTest[jvm] > a partly refused subscription names the refused filters and how many were granted()[jvm] PASSED - -MqttManagerImplTest[jvm] > a refusal is only reported while the connection is up()[jvm] PASSED - -EventFirmwareRepositoryImplTest[jvm] > v2FieldsRoundTripThroughCache()[jvm] PASSED - -MqttManagerImplTest[jvm] > a subscription refused in full reads as zero granted rather than connected()[jvm] PASSED - -MqttManagerImplTest[jvm] > a connection with every filter granted reads as connected()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > environment metrics updates node with environment data()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > local device metrics updates telemetry on connectionManager()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > handleTelemetry with empty payload bytes returns early()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > telemetry with time 0 gets time from dataPacket()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > remote device metrics updates node but not connectionManager()[jvm] PASSED - -NodeRepositoryTest[jvm] > effectiveLogNodeId preserves remote node numbers()[jvm] PASSED - -NodeRepositoryTest[jvm] > effectiveLogNodeId maps local node number to NODE_NUM_LOCAL()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > soil water metrics updates node with probe data()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > healthy battery level does not trigger low battery notification()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > power metrics updates node with power data()[jvm] PASSED - -TelemetryPacketHandlerImplTest[jvm] > handleTelemetry with null decoded payload returns early()[jvm] PASSED - -XModemManagerImplTest[jvm] > removes CTRLZ padding from end of file()[jvm] PASSED - -XModemManagerImplTest[jvm] > successful transfer emits file and ACKs blocks()[jvm] PASSED - -XModemManagerImplTest[jvm] > handles CAN and resets state()[jvm] PASSED - -XModemManagerImplTest[jvm] > ignores bad CRC and replies NAK()[jvm] PASSED - -BootloaderOtaQuirksRepositoryImplTest[jvm] > getSnapshotIsEmptyWhenNoSeedAndNoCache()[jvm] PASSED - -BootloaderOtaQuirksRepositoryImplTest[jvm] > emptyNetworkResponseLeavesCacheUntouched()[jvm] PASSED - -BootloaderOtaQuirksRepositoryImplTest[jvm] > getSnapshotSeedsFromBundledJsonWhenCacheIsEmpty()[jvm] PASSED - -BootloaderOtaQuirksRepositoryImplTest[jvm] > getSnapshotSeedsOnlyWhenCacheIsEmpty()[jvm] PASSED - -BootloaderOtaQuirksRepositoryImplTest[jvm] > reconcileUpdatesCacheFromTheNetwork()[jvm] PASSED - -MaintenanceUf2RepositoryImplTest[jvm] > getSnapshotIsEmptyWhenNoSeedAndNoCache()[jvm] PASSED - -MaintenanceUf2RepositoryImplTest[jvm] > emptyNetworkResponseLeavesCacheUntouched()[jvm] PASSED - -MaintenanceUf2RepositoryImplTest[jvm] > getSnapshotSeedsFromBundledJsonWhenCacheIsEmpty()[jvm] PASSED - -MaintenanceUf2RepositoryImplTest[jvm] > aManifestWithoutTheBootloaderEraseEntryStillDecodes()[jvm] PASSED - -MaintenanceUf2RepositoryImplTest[jvm] > getSnapshotSeedsOnlyWhenCacheIsEmpty()[jvm] PASSED - -MaintenanceUf2RepositoryImplTest[jvm] > reconcileUpdatesCacheFromTheNetwork()[jvm] PASSED - -PacketRepositoryTest[jvm] > reply parent fails closed for same-conversation ID collisions()[jvm] PASSED - -PacketRepositoryTest[jvm] > legacy claim returns exact row identity and fails closed when ambiguous()[jvm] PASSED - -PacketRepositoryTest[jvm] > outgoing status update ignores inbound and different-port ID collisions()[jvm] PASSED - -PacketRepositoryTest[jvm] > failed-send rollback is exact and preserves a racing ACK()[jvm] PASSED - -PacketRepositoryTest[jvm] > clearAllUnreadCounts works with real DB()[jvm] PASSED - -PacketRepositoryTest[jvm] > same mesh packet id persists as distinct durable rows()[jvm] PASSED - -PacketRepositoryTest[jvm] > savePacket persists and retrieves waypoints()[jvm] PASSED - -PacketRepositoryTest[jvm] > reply lookups stay in the current conversation when packet IDs collide()[jvm] PASSED - -PacketRepositoryTest[jvm] > queued row can be claimed for send only once()[jvm] PASSED - -PacketRepositoryTest[jvm] > concurrent UUID and legacy claims produce one send owner()[jvm] PASSED - -> Task :core:ui:compileKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/ContactSharing.kt:50:32 Unnecessary safe call on a non-null receiver of type 'User'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/QrDialog.kt:196:60 'fun rememberPlainTooltipPositionProvider(spacingBetweenTooltipAndAnchor: Dp = ...): PopupPositionProvider' is deprecated. Deprecated in favor of rememberTooltipPositionProvider API. - -> Task :core:network:jvmTest - -MockRadioTransportTest[jvm] > close is terminal and suppresses delayed acknowledgements()[jvm] PASSED - -MockRadioTransportTest[jvm] > config stage answers with my_info and its own nonce but never with node info()[jvm] PASSED - -MockRadioTransportTest[jvm] > an unrecognised want_config_id is ignored rather than answered with the wrong stage()[jvm] PASSED - -BleRadioTransportTest[jvm] > reconnect loop never gives up - no permanent disconnect from policy()[jvm] PASSED - -MockRadioTransportTest[jvm] > received packets look like direct LoRa receptions so signal metrics reach the node list()[jvm] PASSED - -MockRadioTransportTest[jvm] > node info stage does not re-send my_info because that would reset the handshake()[jvm] PASSED - -MockRadioTransportTest[jvm] > an open transport delivers the delayed fake acknowledgement()[jvm] PASSED - -MockRadioTransportTest[jvm] > malformed admin payload is ignored without escaping the admission contract()[jvm] PASSED - -MockRadioTransportTest[jvm] > close stops the simulated mesh()[jvm] PASSED - -MockRadioTransportTest[jvm] > node info stage populates a mesh whose nodes all render()[jvm] PASSED - -MockRadioTransportTest[jvm] > seeded traffic supplies a channel thread a direct thread positions and telemetry()[jvm] PASSED - -MockRadioTransportTest[jvm] > start signals onConnect without emitting frames()[jvm] PASSED - -MockRadioTransportTest[jvm] > malformed payload is rejected without escaping the admission contract()[jvm] PASSED - -BleRadioTransportTest[jvm] > findDevice prefers freshly scanned device over bonded device()[jvm] PASSED - -BleRadioTransportTest[jvm] > bond succeeds then connectAndAwait is called()[jvm] PASSED - -BleRadioTransportTest[jvm] > the first scan-only probe skips the bonded connect exactly at the threshold()[jvm] PASSED - -BleRadioTransportTest[jvm] > onDisconnect is called after DEFAULT_FAILURE_THRESHOLD consecutive failures()[jvm] PASSED - -BleRadioTransportTest[jvm] > prolonged scan misses periodically retry the bonded fallback()[jvm] PASSED - -StreamTransportTest[jvm] > per-send cancellation does not stop the framed-send worker()[jvm] PASSED - -BleRadioTransportTest[jvm] > a second failure streak after the previous one ended earns its own cache refresh()[jvm] PASSED - -BleRadioTransportTest[jvm] > bond throws but device is bonded then connectAndAwait is still called()[jvm] PASSED - -BleRadioTransportTest[jvm] > a reconnect failure streak below the threshold never refreshes the GATT cache()[jvm] PASSED - -BleRadioTransportTest[jvm] > non bonded absence keeps full discovery retries beyond the probe threshold()[jvm] PASSED - -BleRadioTransportTest[jvm] > connect attempts to scan and connect via start()[jvm] PASSED - -BleRadioTransportTest[jvm] > offline heartbeat owns rejection logging while an ordinary send keeps the transport warning()[jvm] PASSED - -BleRadioTransportTest[jvm] > long absence reconnect uses the fresh advertisement returned by the probe()[jvm] PASSED - -BleRadioTransportTest[jvm] > a stale service table never recovers when the platform cannot refresh the cache()[jvm] PASSED - -BleRadioTransportTest[jvm] > BLE write backlog rejection retains a transport warning on every rejection()[jvm] PASSED - -BleRadioTransportTest[jvm] > findDevice scans with both service UUID and address()[jvm] PASSED - -BleRadioTransportTest[jvm] > send is rejected before the BLE profile is available()[jvm] PASSED - -BleRadioTransportTest[jvm] > post-OTA cache invalidation flag is consumed during connect and triggers reconnect()[jvm] PASSED - -BleRadioTransportTest[jvm] > a stale service table recovers on the attempt that follows the cache refresh()[jvm] PASSED - -StreamTransportTest[jvm] > readChar property test()[jvm] PASSED - -BleRadioTransportTest[jvm] > findDevice falls back to bonded device when fresh scans miss()[jvm] PASSED - -BleRadioTransportTest[jvm] > bond throws and device not bonded then connectAndAwait is not called()[jvm] PASSED - -StreamTransportTest[jvm] > concurrent framed sends preserve FIFO without interleaving writes()[jvm] PASSED - -StreamTransportTest[jvm] > send is rejected after the transport scope stops()[jvm] PASSED - -StreamTransportTest[jvm] > close lets an active framed send finish before returning()[jvm] PASSED - -BleRadioTransportTest[jvm] > a post-OTA cache refresh does not consume the stale-cache allowance()[jvm] PASSED - -BleRadioTransportTest[jvm] > stale GATT cache is refreshed after the reconnect failure streak reaches the threshold()[jvm] PASSED - -BleRadioTransportTest[jvm] > CancellationException from bond cancels the connection job without retrying()[jvm] PASSED - -BleRadioTransportTest[jvm] > address returns correct value()[jvm] PASSED - -StreamTransportTest[jvm] > close does not emit disconnect callback()[jvm] PASSED - -BleRadioTransportTest[jvm] > close drains every write admitted by the active BLE profile generation()[jvm] PASSED - -StreamTransportTest[jvm] > close completes ownership for in-flight and queued framed sends()[jvm] PASSED - -StreamTransportTest[jvm] > rejected framed send releases its completion owner exactly once()[jvm] PASSED - -ReplayFuzzTest[jvm] > adversarial frames replay through the transport without crashing it()[jvm] PASSED - -StreamTransportTest[jvm] > handleSendToRadio property test()[jvm] PASSED - -StreamTransportTest[jvm] > connect sends wake bytes()[jvm] PASSED - -StreamTransportTest[jvm] > close completes ownership when the worker never started()[jvm] PASSED - -StreamTransportTest[jvm] > framed send queue reports backpressure at its capacity()[jvm] PASSED - -ReplayFuzzTest[jvm] > corrupt assets fail only with IllegalArgumentException()[jvm] PASSED - -ReplayFuzzTest[jvm] > decode of bit-flipped frames never raises an Error()[jvm] PASSED - -> Task :feature:connections:compileAndroidMain - -> Task :core:network:testAndroidHostTest - -BleReconnectPolicyTest > execute passes null error for unstable disconnect at threshold PASSED - -BleReconnectPolicyTest > execute calls onTransientDisconnect at threshold then continues retrying PASSED - -BleReconnectPolicyTest > execute gives up after maxFailures and calls onPermanentDisconnect PASSED - -BleReconnectPolicyTest > execute reaches recovery after repeated inner connect failures PASSED - -BleRadioTransportReconnectCrashTest > internal session failure is not treated as intentional disconnect PASSED - -BleRadioTransportReconnectCrashTest > Connected-gate normal path succeeds and transport operates PASSED - -BleReconnectPolicyTest > intentional disconnect resets failures and returns Continue PASSED - -BleReconnectPolicyTest > unstable disconnect increments failures PASSED - -BleReconnectPolicyTest > stable disconnect resets failures and returns Continue PASSED - -BleReconnectPolicyTest > maxFailures equal to failureThreshold gives up without signalling transient PASSED - -BleReconnectPolicyTest > failure at threshold signals transient disconnect PASSED - -BleReconnectPolicyTest > custom backoff strategy is used PASSED - -BleReconnectPolicyTest > failure count resets after stable disconnect then re-increments PASSED - -BleReconnectPolicyTest > execute continues immediately after stable disconnect PASSED - -BleReconnectPolicyTest > failure at max gives up permanently PASSED - -BleReconnectPolicyTest > execute stops when coroutine is cancelled PASSED - -BleReconnectPolicyTest > backoff increases with consecutive failures PASSED - -BleRadioTransportReconnectCrashTest > FROMNUM GATT 133 before readiness aborts setup and retries PASSED - -BleRadioTransportReconnectCrashTest > transient onDisconnect is signalled after failure threshold without giving up PASSED - -BleRadioTransportReconnectCrashTest > fromRadio read failure triggers handleFailure and reconnect PASSED - -BleRadioTransportReconnectCrashTest > FROMNUM subscription readiness timeout aborts setup clears stale service and retries PASSED - -BleRadioTransportReconnectCrashTest > stale radioService is cleared after session failure PASSED - -BleRadioTransportReconnectCrashTest > CancellationException from write does not trigger onDisconnect after reconnection PASSED - -BleRadioTransportReconnectCrashTest > CancellationException from write does not trigger callback PASSED - -BleRadioTransportReconnectCrashTest > transport reconnects after a stable connection is dropped remotely PASSED - -BleRadioTransportReconnectCrashTest > stop and restart creates a new connection attempt PASSED - -BleRadioTransportReconnectCrashTest > bonded device never advertising falls back after one bounded scan PASSED - -BleRadioTransportReconnectCrashTest > profile setup failure returns Failed outcome and retries PASSED - -BleRadioTransportReconnectCrashTest > concurrent fromRadio and write failure fires onDisconnect exactly once PASSED - -BleRadioTransportReconnectCrashTest > FROMNUM NotConnected before readiness aborts setup and retries PASSED - -BleRadioTransportReconnectCrashTest > write failure while connected clears state and triggers reconnect PASSED - -BleRadioTransportReconnectCrashTest > repeated writes after session failure do not spam onDisconnect PASSED - -BleRadioTransportReconnectCrashTest > close calls disconnect to clean up GATT handle PASSED - -BleRadioTransportReconnectCrashTest > bonded reconnect uses one bounded scan and prefers its fresh device PASSED - -BleRadioTransportReconnectCrashTest > retired BLE profile cannot dispatch inbound packets after reconnect PASSED - -BleRadioTransportReconnectCrashTest > disconnect is called when profile setup throws CancellationException PASSED - -BleRadioTransportTest > reconnect loop never gives up - no permanent disconnect from policy PASSED - -GattCacheInvalidationGateTest > the default threshold is far above the reconnect policy transient-disconnect threshold PASSED - -BleRadioTransportReconnectCrashTest > Connected-gate timeout cleans up stale service and retries without disconnect spam PASSED - -BleRadioTransportReconnectCrashTest > disconnect is called on connection failure PASSED - -BleRadioTransportReconnectCrashTest > write retry stops when remote disconnect retires the captured session PASSED - -MockTransportAddressAdmissionTest > real transports are unaffected by the gate PASSED - -MockTransportAddressAdmissionTest > virtual transport addresses are admitted once the gate opens PASSED - -MockTransportAddressAdmissionTest > virtual transport addresses are refused while the gate is closed PASSED - -MockTransportAddressAdmissionTest > the gate is re-read on every check rather than captured once PASSED - -BleRadioTransportTest > findDevice prefers freshly scanned device over bonded device PASSED - -BleRadioTransportTest > bond succeeds then connectAndAwait is called PASSED - -BleRadioTransportTest > the first scan-only probe skips the bonded connect exactly at the threshold PASSED - -BleRadioTransportTest > onDisconnect is called after DEFAULT_FAILURE_THRESHOLD consecutive failures PASSED - -BleRadioTransportTest > prolonged scan misses periodically retry the bonded fallback PASSED - -BleRadioTransportTest > a second failure streak after the previous one ended earns its own cache refresh PASSED - -BleRadioTransportTest > bond throws but device is bonded then connectAndAwait is still called PASSED - -GattCacheInvalidationGateTest > a non-positive threshold is rejected PASSED - -GattCacheInvalidationGateTest > a threshold of one refreshes on the first failure PASSED - -GattCacheInvalidationGateTest > an attempted refresh that never happened leaves the allowance intact PASSED - -GattCacheInvalidationGateTest > the end of a failure streak re-arms the gate for the next one PASSED - -GattCacheInvalidationGateTest > no invalidation while the failure streak is below the threshold PASSED - -BleRadioTransportTest > a reconnect failure streak below the threshold never refreshes the GATT cache PASSED - -BleRadioTransportTest > non bonded absence keeps full discovery retries beyond the probe threshold PASSED - -BleRadioTransportTest > connect attempts to scan and connect via start PASSED - -ReplayFuzzTest > adversarial frames replay through the transport without crashing it PASSED - -SerialRadioTransportTest > close waits for wake IO then revokes without publishing connected PASSED - -SerialRadioTransportTest > failed connection is not left admitted PASSED - -SerialRadioTransportTest > legacy selected address resolves the sole USB serial device PASSED - -GattCacheInvalidationGateTest > the default threshold is only reachable after minutes of unbroken failure PASSED - -GattCacheInvalidationGateTest > invalidation is requested once the threshold is reached PASSED - -GattCacheInvalidationGateTest > the refresh fires at most once per failure streak PASSED - -ReplayFuzzTest > corrupt assets fail only with IllegalArgumentException PASSED - -BleRadioTransportTest > offline heartbeat owns rejection logging while an ordinary send keeps the transport warning PASSED - -SerialRadioTransportTest > concurrent close callers await the same physical teardown PASSED - -BleRadioTransportTest > long absence reconnect uses the fresh advertisement returned by the probe PASSED - -SerialRadioTransportTest > start during connection cleanup opens a replacement after cleanup completes PASSED - -SerialRadioTransportTest > unexpected wake failure closes the connection without publishing connected PASSED - -SerialRadioTransportTest > send is rejected before connection and after close PASSED - -SerialRadioTransportTest > ambiguous missing selected device never falls back to another USB serial device PASSED - -SerialRadioTransportTest > stale terminal callbacks do not tear down a replacement connection PASSED - -SerialRadioTransportTest > repeated start cannot replace an active connection generation PASSED - -SerialRadioTransportTest > send is rejected promptly while connection is still opening PASSED - -ReplayFuzzTest > decode of bit-flipped frames never raises an Error PASSED - -BleRadioTransportTest > a stale service table never recovers when the platform cannot refresh the cache PASSED - -BleRadioTransportTest > BLE write backlog rejection retains a transport warning on every rejection PASSED - -BleRadioTransportTest > findDevice scans with both service UUID and address PASSED - -BleRadioTransportTest > send is rejected before the BLE profile is available PASSED - -BleRadioTransportTest > post-OTA cache invalidation flag is consumed during connect and triggers reconnect PASSED - -BleRadioTransportTest > a stale service table recovers on the attempt that follows the cache refresh PASSED - -BleRadioTransportTest > findDevice falls back to bonded device when fresh scans miss PASSED - -BleRadioTransportTest > bond throws and device not bonded then connectAndAwait is not called PASSED - -BleRadioTransportTest > a post-OTA cache refresh does not consume the stale-cache allowance PASSED - -BleRadioTransportTest > stale GATT cache is refreshed after the reconnect failure streak reaches the threshold PASSED - -BleRadioTransportTest > CancellationException from bond cancels the connection job without retrying PASSED - -BleRadioTransportTest > address returns correct value PASSED - -BleRadioTransportTest > close drains every write admitted by the active BLE profile generation PASSED - -ReconnectBackoffTest > large failure count stays capped at 60s PASSED - -ReconnectBackoffTest > backoff is strictly increasing up to the cap PASSED - -ReconnectBackoffTest > first failure yields 5s PASSED - -ReconnectBackoffTest > fourth failure yields 40s PASSED - -ReconnectBackoffTest > third failure yields 20s PASSED - -ReconnectBackoffTest > second failure yields 10s PASSED - -ReconnectBackoffTest > fifth failure is capped at 60s PASSED - -ReconnectBackoffTest > zero failures yields base delay PASSED - -StreamTransportTest > per-send cancellation does not stop the framed-send worker PASSED - -ReplayFuzzTest > handleSendToRadio tolerates arbitrary outbound bytes PASSED - -SerialRadioTransportTest > offline heartbeat owns rejection logging while an ordinary send keeps the serial warning PASSED - -SerialRadioTransportTest > start after close cannot reopen a serial transport PASSED - -TcpRadioTransportTest > established transport admits send before close and rejects after close PASSED - -TcpRadioTransportTest > close racing with send wins admission before teardown can return PASSED - -> Task :feature:connections:bundleAndroidMainClassesToCompileJar - -> Task :core:network:jvmTest - -ReplayFuzzTest[jvm] > handleSendToRadio tolerates arbitrary outbound bytes()[jvm] PASSED - -ScanOnlyProbeGateTest[jvm] > the default threshold is far above the reconnect policy transient-disconnect threshold()[jvm] PASSED - -ScanOnlyProbeGateTest[jvm] > a non-positive threshold is rejected()[jvm] PASSED - -ScanOnlyProbeGateTest[jvm] > no probing while the failure streak is below the threshold()[jvm] PASSED - -ScanOnlyProbeGateTest[jvm] > a stable reconnect policy outcome disarms probing()[jvm] PASSED - -ScanOnlyProbeGateTest[jvm] > the default threshold is only reachable after minutes of unbroken failure()[jvm] PASSED - -ScanOnlyProbeGateTest[jvm] > probing starts at the threshold and periodically yields to bonded fallback()[jvm] PASSED - -JvmServiceDiscoveryTest[jvm] > resolvedServices emits initial empty list immediately()[jvm] PASSED - -JvmServiceDiscoveryTest[jvm] > findLanAddress does not throw()[jvm] PASSED - -JvmServiceDiscoveryTest[jvm] > findLanAddress returns non-loopback address or null()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > empty address substitutes the public broker's well-known credentials()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > only credential and identity reason codes classify as credential rejections()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > encrypted packet is deliverable()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > a 3 1 1 broker is subscribed without the MQTT 5 noLocal option()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > bare host without scheme is wrapped as plain Tcp on the standard MQTT port()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > address with ws scheme is parsed as-is and tls flag is ignored()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > packet-less envelope is deliverable - fail open()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > the json topic applies the same three-way rule()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > execute passes null error for unstable disconnect at threshold()[jvm] PASSED - -ReconnectBackoffTest[jvm] > large failure count stays capped at 60s()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > queued publish resolves the active session after waiting for a permit()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > execute calls onTransientDisconnect at threshold then continues retrying()[jvm] PASSED - -ReconnectBackoffTest[jvm] > backoff is strictly increasing up to the cap()[jvm] PASSED - -ReconnectBackoffTest[jvm] > first failure yields 5s()[jvm] PASSED - -ReconnectBackoffTest[jvm] > fourth failure yields 40s()[jvm] PASSED - -ReconnectBackoffTest[jvm] > third failure yields 20s()[jvm] PASSED - -ReconnectBackoffTest[jvm] > second failure yields 10s()[jvm] PASSED - -ReconnectBackoffTest[jvm] > fifth failure is capped at 60s()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > stale collector teardown closes only its session and preserves replacement state()[jvm] PASSED - -ReconnectBackoffTest[jvm] > zero failures yields base delay()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > execute gives up after maxFailures and calls onPermanentDisconnect()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > execute reaches recovery after repeated inner connect failures()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > intentional disconnect resets failures and returns Continue()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > unstable disconnect increments failures()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > stable disconnect resets failures and returns Continue()[jvm] PASSED - -ApiServiceTest[jvm] > nightly pointer returns null when nothing is published()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > credential rejection stops the proxy permanently()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > decoded packet is deliverable()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > maxFailures equal to failureThreshold gives up without signalling transient()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > failure at threshold signals transient disconnect()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > custom server respects tlsEnabled false()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > default server with ssl scheme still forces TLS()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > custom backoff strategy is used()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > failure count resets after stable disconnect then re-increments()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > execute continues immediately after stable disconnect()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > failure at max gives up permanently()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > execute stops when coroutine is cancelled()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > a refused topic filter is recorded for the UI without restarting the connection()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > a 5 0 broker keeps noLocal so the broker does not echo our own uplink()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > explicit default server address uses the stored credentials as-is - firmware parity()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > payload-less packet is undeliverable()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > self-traffic classification fails open before the local node id is known()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > address with mqtts tcp scheme is parsed as Tcp endpoint with tls true()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > a different gateway's payload-less packet is undeliverable()[jvm] PASSED - -BleReconnectPolicyTest[jvm] > backoff increases with consecutive failures()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > subscription failures trigger reconnect retry()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > bare host with TLS enabled is wrapped as Tcp on the secure MQTT port()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > default server with tcp scheme still forces TLS()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > an unrelated packet from an unrelated gateway is forwarded()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > the default threshold is far above the reconnect policy transient-disconnect threshold()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > a non-positive threshold is rejected()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > a threshold of one refreshes on the first failure()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > an attempted refresh that never happened leaves the allowance intact()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > the end of a failure streak re-arms the gate for the next one()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > no invalidation while the failure streak is below the threshold()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > the default threshold is only reachable after minutes of unbroken failure()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > invalidation is requested once the threshold is reached()[jvm] PASSED - -GattCacheInvalidationGateTest[jvm] > the refresh fires at most once per failure streak()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > connection state flow reflects active client state updates()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > extractHost with tcp scheme and port()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > replacing a session cancels its delayed connection retry()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > the json topic fails open when the sender or local id is unknown()[jvm] PASSED - -ApiServiceTest[jvm] > nightly pointer is fetched from the nightly host root()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > PKI payload-less packet is deliverable - guard()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > our node id arriving via someone else's gateway is a forgery and is dropped()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > null myId does not suppress dropping()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > our own uplink returning via our own gateway is forwarded as firmware reads it as a local ack()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > a malformed SUBACK fails the attempt and the connect loop retries it()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > address with wss scheme is parsed as-is()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > explicit address uses the stored credentials as-is()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > empty address ignores stored credentials entirely - firmware parity()[jvm] PASSED - -ApiServiceTest[jvm] > firmware release manifest decoder coerces explicit nulls to defaults()[jvm] PASSED - -ApiServiceTest[jvm] > service decodes release manifest served as octet stream()[jvm] PASSED - -ApiServiceTest[jvm] > firmware release manifest decoder accepts release asset JSON and unknown fields()[jvm] PASSED - -ApiServiceTest[jvm] > firmware release manifest decoder rejects malformed JSON()[jvm] PASSED - -ShouldResetBackoffTest[jvm] > data at exactly threshold resets backoff()[jvm] PASSED - -ShouldResetBackoffTest[jvm] > no data never resets backoff()[jvm] PASSED - -ShouldResetBackoffTest[jvm] > data below threshold does not reset backoff()[jvm] PASSED - -ShouldResetBackoffTest[jvm] > data above threshold resets backoff()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > test json payload serialization()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > default server forces TLS even when tlsEnabled is false()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > host with explicit port is preserved when wrapped as Tcp()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > payload-less downlink stubs are dropped before forwarding()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > our own uplink of someone else's packet coming back is dropped()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > default server with explicit port still forces TLS()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > default server case-insensitive match forces TLS()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > extractHost bare hostname()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > null config substitutes the public broker's well-known credentials()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > own echo payload-less packet is deliverable - guard()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > extractHost with ssl scheme no port()[jvm] PASSED - -MockTransportAddressAdmissionTest[jvm] > real transports are unaffected by the gate()[jvm] PASSED - -MockTransportAddressAdmissionTest[jvm] > virtual transport addresses are admitted once the gate opens()[jvm] PASSED - -MockTransportAddressAdmissionTest[jvm] > virtual transport addresses are refused while the gate is closed()[jvm] PASSED - -MockTransportAddressAdmissionTest[jvm] > the gate is re-read on every check rather than captured once()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > json mqtt messages are decoded into text proxy messages()[jvm] PASSED - -TcpRadioTransportTest[jvm] > established transport admits send before close and rejects after close()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > test json payload parsing()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > address with mqtt tcp scheme is parsed as Tcp endpoint()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > custom server respects tlsEnabled true()[jvm] PASSED - -TcpRadioTransportTest[jvm] > close racing with send wins admission before teardown can return()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > protobuf mqtt messages are decoded into binary proxy messages()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > topic patterns are built from enabled channels with json topics and PKI()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > connect retries after a transient failure and succeeds when the network recovers()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > garbage bytes are deliverable - fail open()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > self-traffic classification fails open on unparseable bytes()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > extractHost with path()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > extractHost with port()[jvm] PASSED - -MQTTRepositoryImplTest[jvm] > transport failure wrapped as ConnectionRejected retries instead of stopping the proxy()[jvm] PASSED - -HeartbeatSenderTest[jvm] > sendHeartbeat encodes a heartbeat and runs afterHeartbeat after sending()[jvm] PASSED - -HeartbeatSenderTest[jvm] > sender demotes repeated rejections and an accepted handoff resets warning severity()[jvm] PASSED - -HeartbeatSenderTest[jvm] > heartbeat loop emits at the configured interval()[jvm] PASSED - -HeartbeatSenderTest[jvm] > zero interval sends all scheduled heartbeats without advancing time()[jvm] PASSED - -HeartbeatSenderTest[jvm] > nonces are strictly increasing and never 1 the firmware NodeInfo-ping trigger()[jvm] PASSED - -HeartbeatSenderTest[jvm] > rejected heartbeat skips post-send work()[jvm] PASSED - -HeartbeatSenderTest[jvm] > restarting a heartbeat loop resumes with the next nonce()[jvm] PASSED - -HeartbeatSenderTest[jvm] > cancelling a heartbeat loop stops additional heartbeats()[jvm] PASSED - -TcpRadioTransportTest[jvm] > close waits for an admitted send to finish before stopping the connection()[jvm] PASSED - -TcpRadioTransportTest[jvm] > operation timeout stops a connection before another send can be admitted()[jvm] PASSED - -TcpRadioTransportTest[jvm] > send is rejected while the transport was never started()[jvm] PASSED - -TcpRadioTransportTest[jvm] > hung admitted send times out before close stops the connection()[jvm] PASSED - -KermitMqttLoggerTest[jvm] > an error with no throwable is downgraded to WARN()[jvm] PASSED - -KermitMqttLoggerTest[jvm] > NONE is dropped()[jvm] PASSED - -KermitMqttLoggerTest[jvm] > a connection teardown log is not reported as an application error()[jvm] PASSED - -KermitMqttLoggerTest[jvm] > a broker rejection is a user configuration problem rather than an application error()[jvm] PASSED - -KermitMqttLoggerTest[jvm] > an expected connection failure logged at ERROR is downgraded to WARN()[jvm] PASSED - -KermitMqttLoggerTest[jvm] > a genuine error logged at ERROR stays an error()[jvm] PASSED - -KermitMqttLoggerTest[jvm] > other levels map straight through and keep the library tag()[jvm] PASSED - -ConnectionFailuresJvmTest[jvm] > an unresolvable hostname is an expected connection failure()[jvm] PASSED - -ConnectionFailuresJvmTest[jvm] > an unrelated IllegalArgumentException is still an error()[jvm] PASSED - -ConnectionFailuresJvmTest[jvm] > ordinary unreachable-host failures are expected connection failures()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > close bounds preparation separately before teardown()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:network:testAndroidHostTest - -TcpRadioTransportTest > close waits for an admitted send to finish before stopping the connection PASSED - -TcpRadioTransportTest > operation timeout stops a connection before another send can be admitted PASSED - -TcpRadioTransportTest > send is rejected while the transport was never started PASSED - -TcpRadioTransportTest > hung admitted send times out before close stops the connection PASSED - -SerialRadioTransportTest > close drains an admitted queued write before closing its connection PASSED - -SerialRadioTransportTest > explicit close suppresses a disconnect notification deferred by admitted IO PASSED - -StreamTransportTest > readChar property test PASSED - -StreamTransportTest > concurrent framed sends preserve FIFO without interleaving writes PASSED - -StreamTransportTest > send is rejected after the transport scope stops PASSED - -StreamTransportTest > close lets an active framed send finish before returning PASSED - -StreamTransportTest > close does not emit disconnect callback PASSED - -StreamTransportTest > close completes ownership for in-flight and queued framed sends PASSED - -StreamTransportTest > rejected framed send releases its completion owner exactly once PASSED - -SerialRadioTransportTest > close orders against connection creation before publication PASSED - -MQTTRepositoryImplTest > empty address substitutes the public broker's well-known credentials PASSED - -MQTTRepositoryImplTest > only credential and identity reason codes classify as credential rejections PASSED - -MQTTRepositoryImplTest > encrypted packet is deliverable PASSED - -MQTTRepositoryImplTest > a 3 1 1 broker is subscribed without the MQTT 5 noLocal option PASSED - -StreamTransportTest > handleSendToRadio property test PASSED - -StreamTransportTest > connect sends wake bytes PASSED - -StreamTransportTest > close completes ownership when the worker never started PASSED - -StreamTransportTest > framed send queue reports backpressure at its capacity PASSED - -ReplayRadioTransportTest > non-handshake traffic is ignored PASSED - -ReplayRadioTransportTest > frame length exceeding remaining bytes is rejected PASSED - -ReplayRadioTransportTest > a second node nonce does not restart the packet stream PASSED - -ReplayRadioTransportTest > node nonce is answered with the node db then the packet stream PASSED - -ReplayRadioTransportTest > truncated section count is rejected PASSED - -ReplayRadioTransportTest > handshake worker remains responsive while packet replay is streaming PASSED - -ReplayRadioTransportTest > counted section with fewer frames than declared is rejected PASSED - -ReplayRadioTransportTest > back to back handshake requests are replayed sequentially PASSED - -ReplayRadioTransportTest > empty config and node sections with no packets are valid PASSED - -ReplayRadioTransportTest > close cancels replay work and rejects later handshakes PASSED - -ReplayRadioTransportTest > start signals onConnect without emitting frames PASSED - -ReplayRadioTransportTest > config nonce is answered with config frames and the echoed nonce only PASSED - -TransportLifecycleGateTest > close bounds preparation separately before teardown PASSED - -MQTTRepositoryImplTest > bare host without scheme is wrapped as plain Tcp on the standard MQTT port PASSED - -MQTTRepositoryImplTest > address with ws scheme is parsed as-is and tls flag is ignored PASSED - -MQTTRepositoryImplTest > packet-less envelope is deliverable - fail open PASSED - -MQTTRepositoryImplTest > the json topic applies the same three-way rule PASSED - -MQTTRepositoryImplTest > queued publish resolves the active session after waiting for a permit PASSED - -MQTTRepositoryImplTest > stale collector teardown closes only its session and preserves replacement state PASSED - -MQTTRepositoryImplTest > credential rejection stops the proxy permanently PASSED - -MQTTRepositoryImplTest > decoded packet is deliverable PASSED - -MQTTRepositoryImplTest > custom server respects tlsEnabled false PASSED - -MQTTRepositoryImplTest > default server with ssl scheme still forces TLS PASSED - -MQTTRepositoryImplTest > a refused topic filter is recorded for the UI without restarting the connection PASSED - -MQTTRepositoryImplTest > a 5 0 broker keeps noLocal so the broker does not echo our own uplink PASSED - -MQTTRepositoryImplTest > explicit default server address uses the stored credentials as-is - firmware parity PASSED - -MQTTRepositoryImplTest > payload-less packet is undeliverable PASSED - -MQTTRepositoryImplTest > self-traffic classification fails open before the local node id is known PASSED - -MQTTRepositoryImplTest > address with mqtts tcp scheme is parsed as Tcp endpoint with tls true PASSED - -MQTTRepositoryImplTest > a different gateway's payload-less packet is undeliverable PASSED - -MQTTRepositoryImplTest > subscription failures trigger reconnect retry PASSED - -MQTTRepositoryImplTest > bare host with TLS enabled is wrapped as Tcp on the secure MQTT port PASSED - -MQTTRepositoryImplTest > default server with tcp scheme still forces TLS PASSED - -MQTTRepositoryImplTest > an unrelated packet from an unrelated gateway is forwarded PASSED - -MQTTRepositoryImplTest > connection state flow reflects active client state updates PASSED - -MQTTRepositoryImplTest > extractHost with tcp scheme and port PASSED - -MQTTRepositoryImplTest > replacing a session cancels its delayed connection retry PASSED - -MQTTRepositoryImplTest > the json topic fails open when the sender or local id is unknown PASSED - -MQTTRepositoryImplTest > PKI payload-less packet is deliverable - guard PASSED - -MQTTRepositoryImplTest > our node id arriving via someone else's gateway is a forgery and is dropped PASSED - -MQTTRepositoryImplTest > null myId does not suppress dropping PASSED - -MQTTRepositoryImplTest > our own uplink returning via our own gateway is forwarded as firmware reads it as a local ack PASSED - -MQTTRepositoryImplTest > a malformed SUBACK fails the attempt and the connect loop retries it PASSED - -MQTTRepositoryImplTest > address with wss scheme is parsed as-is PASSED - -MQTTRepositoryImplTest > explicit address uses the stored credentials as-is PASSED - -MQTTRepositoryImplTest > empty address ignores stored credentials entirely - firmware parity PASSED - -MQTTRepositoryImplTest > test json payload serialization PASSED - -MQTTRepositoryImplTest > default server forces TLS even when tlsEnabled is false PASSED - -MQTTRepositoryImplTest > host with explicit port is preserved when wrapped as Tcp PASSED - -MQTTRepositoryImplTest > payload-less downlink stubs are dropped before forwarding PASSED - -MQTTRepositoryImplTest > our own uplink of someone else's packet coming back is dropped PASSED - -MQTTRepositoryImplTest > default server with explicit port still forces TLS PASSED - -MQTTRepositoryImplTest > default server case-insensitive match forces TLS PASSED - -MQTTRepositoryImplTest > extractHost bare hostname PASSED - -MQTTRepositoryImplTest > null config substitutes the public broker's well-known credentials PASSED - -MQTTRepositoryImplTest > own echo payload-less packet is deliverable - guard PASSED - -MQTTRepositoryImplTest > extractHost with ssl scheme no port PASSED - -MQTTRepositoryImplTest > json mqtt messages are decoded into text proxy messages PASSED - -MQTTRepositoryImplTest > test json payload parsing PASSED - -MQTTRepositoryImplTest > address with mqtt tcp scheme is parsed as Tcp endpoint PASSED - -MQTTRepositoryImplTest > custom server respects tlsEnabled true PASSED - -MQTTRepositoryImplTest > protobuf mqtt messages are decoded into binary proxy messages PASSED - -MQTTRepositoryImplTest > topic patterns are built from enabled channels with json topics and PKI PASSED - -MQTTRepositoryImplTest > connect retries after a transient failure and succeeds when the network recovers PASSED - -MQTTRepositoryImplTest > garbage bytes are deliverable - fail open PASSED - -TransportLifecycleGateTest > teardown failure leaves the gate terminal and is not retried PASSED - -MQTTRepositoryImplTest > self-traffic classification fails open on unparseable bytes PASSED - -MQTTRepositoryImplTest > extractHost with path PASSED - -MQTTRepositoryImplTest > extractHost with port PASSED - -MQTTRepositoryImplTest > transport failure wrapped as ConnectionRejected retries instead of stopping the proxy PASSED - -TransportLifecycleGateTest > close bounds cooperative suspended teardown and releases every waiter PASSED - -TransportLifecycleGateTest > throwing admitted block releases its operation lease PASSED - -TransportLifecycleGateTest > close bounds a leaked operation before teardown PASSED - -TransportLifecycleGateTest > releasing a lease twice does not unblock close early PASSED - -TransportLifecycleGateTest > close rejects new work drains admitted work and tears down exactly once PASSED - -TransportLifecycleGateTest > close reports a throwing preparation without skipping teardown PASSED - -ConnectionFailuresTest > an IO subclass is an expected connection failure PASSED - -ConnectionFailuresTest > a programming error is not an expected connection failure PASSED - -ConnectionFailuresTest > an IO failure is an expected connection failure PASSED - -ApiServiceTest > nightly pointer returns null when nothing is published PASSED - -ApiServiceTest > nightly pointer is fetched from the nightly host root PASSED - -ApiServiceTest > firmware release manifest decoder coerces explicit nulls to defaults PASSED - -ApiServiceTest > service decodes release manifest served as octet stream PASSED - -ApiServiceTest > firmware release manifest decoder accepts release asset JSON and unknown fields PASSED - -ApiServiceTest > firmware release manifest decoder rejects malformed JSON PASSED - -StreamFrameCodecTest > processInputByte is robust against random noise PASSED - -StreamFrameCodecTest > WAKE_BYTES is four START1 bytes PASSED - -StreamFrameCodecTest > re-examines the rejected byte when a corrupt length ends in START1 PASSED - -StreamFrameCodecTest > DEFAULT_TCP_PORT is 4403 PASSED - -StreamFrameCodecTest > desync count tracks framing errors and resets with the codec PASSED - -StreamFrameCodecTest > processInputByte loses sync on overly large packet length PASSED - -StreamFrameCodecTest > processInputByte delivers a 1-byte packet PASSED - -StreamFrameCodecTest > recovers from a corrupt length prefix and parses the next frame PASSED - -StreamFrameCodecTest > always parses a well-formed frame following non-protocol noise PASSED - -StreamFrameCodecTest > parses a frame after a START1 run of any length PASSED - -StreamFrameCodecTest > recovers from a frame header split by a desync in the middle of a payload PASSED - -StreamFrameCodecTest > processInputByte loses sync on invalid START2 PASSED - -StreamFrameCodecTest > processInputByte handles multi-byte payload PASSED - -StreamFrameCodecTest > frameAndSend produces correct header for 1-byte payload PASSED - -StreamFrameCodecTest > frameAndSend and processInputByte are inverse PASSED - -StreamFrameCodecTest > parses a frame that arrives immediately after wake bytes PASSED - -StreamFrameCodecTest > recovers from garbage between two frames PASSED - -StreamFrameCodecTest > parses a frame whose header is preceded by a repeated START1 PASSED - -StreamFrameCodecTest > processInputByte handles multiple packets sequentially PASSED - -StreamFrameCodecTest > processInputByte handles large packet up to MAX_TO_FROM_RADIO_SIZE PASSED - -StreamFrameCodecTest > reset clears framing state PASSED - -StreamFrameCodecTest > recovers from a truncated frame and parses a later frame PASSED - -StreamFrameCodecTest > processInputByte handles zero length packet PASSED - -> Task :core:ui:bundleLibRuntimeToDirAndroidMain -> Task :feature:docs:compileAndroidMain - -> Task :core:network:jvmTest - -StreamFrameCodecTest[jvm] > processInputByte is robust against random noise()[jvm] PASSED - -StreamFrameCodecTest[jvm] > WAKE_BYTES is four START1 bytes()[jvm] PASSED - -StreamFrameCodecTest[jvm] > re-examines the rejected byte when a corrupt length ends in START1()[jvm] PASSED - -StreamFrameCodecTest[jvm] > DEFAULT_TCP_PORT is 4403()[jvm] PASSED - -StreamFrameCodecTest[jvm] > desync count tracks framing errors and resets with the codec()[jvm] PASSED - -StreamFrameCodecTest[jvm] > processInputByte loses sync on overly large packet length()[jvm] PASSED - -StreamFrameCodecTest[jvm] > processInputByte delivers a 1-byte packet()[jvm] PASSED - -StreamFrameCodecTest[jvm] > recovers from a corrupt length prefix and parses the next frame()[jvm] PASSED - -StreamFrameCodecTest[jvm] > always parses a well-formed frame following non-protocol noise()[jvm] PASSED - -StreamFrameCodecTest[jvm] > parses a frame after a START1 run of any length()[jvm] PASSED - -StreamFrameCodecTest[jvm] > recovers from a frame header split by a desync in the middle of a payload()[jvm] PASSED - -StreamFrameCodecTest[jvm] > processInputByte loses sync on invalid START2()[jvm] PASSED - -StreamFrameCodecTest[jvm] > processInputByte handles multi-byte payload()[jvm] PASSED - -StreamFrameCodecTest[jvm] > frameAndSend produces correct header for 1-byte payload()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > teardown failure leaves the gate terminal and is not retried()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > close bounds cooperative suspended teardown and releases every waiter()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > throwing admitted block releases its operation lease()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > close bounds a leaked operation before teardown()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > releasing a lease twice does not unblock close early()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > close rejects new work drains admitted work and tears down exactly once()[jvm] PASSED - -TransportLifecycleGateTest[jvm] > close reports a throwing preparation without skipping teardown()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > internal session failure is not treated as intentional disconnect()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > Connected-gate normal path succeeds and transport operates()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > FROMNUM GATT 133 before readiness aborts setup and retries()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > transient onDisconnect is signalled after failure threshold without giving up()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > fromRadio read failure triggers handleFailure and reconnect()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > FROMNUM subscription readiness timeout aborts setup clears stale service and retries()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > stale radioService is cleared after session failure()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > CancellationException from write does not trigger onDisconnect after reconnection()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > CancellationException from write does not trigger callback()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > transport reconnects after a stable connection is dropped remotely()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > stop and restart creates a new connection attempt()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > bonded device never advertising falls back after one bounded scan()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > profile setup failure returns Failed outcome and retries()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > concurrent fromRadio and write failure fires onDisconnect exactly once()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > FROMNUM NotConnected before readiness aborts setup and retries()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > write failure while connected clears state and triggers reconnect()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > repeated writes after session failure do not spam onDisconnect()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > close calls disconnect to clean up GATT handle()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > bonded reconnect uses one bounded scan and prefers its fresh device()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > retired BLE profile cannot dispatch inbound packets after reconnect()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > disconnect is called when profile setup throws CancellationException()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > Connected-gate timeout cleans up stale service and retries without disconnect spam()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > disconnect is called on connection failure()[jvm] PASSED - -BleRadioTransportReconnectCrashTest[jvm] > write retry stops when remote disconnect retires the captured session()[jvm] PASSED - -StreamFrameCodecTest[jvm] > frameAndSend and processInputByte are inverse()[jvm] PASSED - -StreamFrameCodecTest[jvm] > parses a frame that arrives immediately after wake bytes()[jvm] PASSED - -StreamFrameCodecTest[jvm] > recovers from garbage between two frames()[jvm] PASSED - -StreamFrameCodecTest[jvm] > parses a frame whose header is preceded by a repeated START1()[jvm] PASSED - -StreamFrameCodecTest[jvm] > processInputByte handles multiple packets sequentially()[jvm] PASSED - -StreamFrameCodecTest[jvm] > processInputByte handles large packet up to MAX_TO_FROM_RADIO_SIZE()[jvm] PASSED - -StreamFrameCodecTest[jvm] > reset clears framing state()[jvm] PASSED - -StreamFrameCodecTest[jvm] > recovers from a truncated frame and parses a later frame()[jvm] PASSED - -StreamFrameCodecTest[jvm] > processInputByte handles zero length packet()[jvm] PASSED - -TcpTransportTest[jvm] > transport decodes a framed packet sent by the peer()[jvm] PASSED - -TcpTransportTest[jvm] > heartbeat nonces are strictly increasing and never 1 the firmware NodeInfo-ping trigger()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > non-handshake traffic is ignored()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > frame length exceeding remaining bytes is rejected()[jvm] PASSED - -TcpTransportTest[jvm] > read channel survives a withTimeoutOrNull read timeout and resumes()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > a second node nonce does not restart the packet stream()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > node nonce is answered with the node db then the packet stream()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > truncated section count is rejected()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > handshake worker remains responsive while packet replay is streaming()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > counted section with fewer frames than declared is rejected()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > back to back handshake requests are replayed sequentially()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > empty config and node sections with no packets are valid()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > close cancels replay work and rejects later handshakes()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > start signals onConnect without emitting frames()[jvm] PASSED - -ReplayRadioTransportTest[jvm] > config nonce is answered with config frames and the echoed nonce only()[jvm] PASSED - -ConnectionFailuresTest[jvm] > an IO subclass is an expected connection failure()[jvm] PASSED - -ConnectionFailuresTest[jvm] > a programming error is not an expected connection failure()[jvm] PASSED - -ConnectionFailuresTest[jvm] > an IO failure is an expected connection failure()[jvm] PASSED - -> Task :feature:docs:bundleAndroidMainClassesToCompileJar -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:prefs:jvmTest - -TakPrefsTest[jvm] > mesh to CoT is independent of the server toggle()[jvm] PASSED - -TakPrefsTest[jvm] > isTakServerEnabled defaults to false()[jvm] PASSED - -TakPrefsTest[jvm] > isMeshToCotEnabled defaults to false()[jvm] PASSED - -TakPrefsTest[jvm] > setting isMeshToCotEnabled updates preference()[jvm] PASSED - -TakPrefsTest[jvm] > setting isTakServerEnabled updates preference()[jvm] PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:network:testAndroidHostTest - -UsbManagerTest > permission result receiver is private and ignores a different device PASSED - -UsbManagerTest > concurrent requests consume only their own device result PASSED - -UsbManagerTest > permission result rejects a broadcast grant when platform permission is absent PASSED - -UsbManagerTest > permission result without a device is denied and completes PASSED - -UsbManagerTest > permission result requires the platform grant PASSED - -TcpTransportTest > transport decodes a framed packet sent by the peer PASSED - -TcpTransportTest > heartbeat nonces are strictly increasing and never 1 the firmware NodeInfo-ping trigger PASSED - -TcpTransportTest > read channel survives a withTimeoutOrNull read timeout and resumes PASSED - -> Task :feature:discovery:compileAndroidMain - -> Task :core:prefs:jvmTest - -FilterPrefsTest[jvm] > setting filterWords updates preference()[jvm] PASSED - -FilterPrefsTest[jvm] > setting filterEnabled updates preference()[jvm] PASSED - -FilterPrefsTest[jvm] > filterEnabled defaults to false()[jvm] PASSED - -FilterPrefsTest[jvm] > filterWords defaults to empty set()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowSignal defaults to true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowRole defaults to true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setNodeListDensity persists COMPACT()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowChannel defaults to true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowHops persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowLocation defaults to true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > nodeListDensity defaults to COMPLETE()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > lastHeardIsRelative defaults to false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowSignal persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowLastHeard persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowPower defaults to true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowHops defaults to true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowTelemetry defaults to true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowRole persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowTelemetry persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setLastHeardIsRelative persists true()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowLocation persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowPower persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > setShouldShowChannel persists false()[jvm] PASSED - -NodeListLayoutPrefsTest[jvm] > shouldShowLastHeard defaults to true()[jvm] PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:prefs:testAndroidHostTest - -FilterPrefsTest > setting filterWords updates preference PASSED - -FilterPrefsTest > setting filterEnabled updates preference PASSED - -FilterPrefsTest > filterEnabled defaults to false PASSED - -FilterPrefsTest > filterWords defaults to empty set PASSED - -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:prefs:jvmTest - -MapPrefsImplTest[jvm] > a layer opacity update sees the persisted value rather than the eager default()[jvm] PASSED - -MapPrefsImplTest[jvm] > layer opacity is absent until a slider is moved()[jvm] PASSED - -MapPrefsImplTest[jvm] > camera position is persisted as a complete record()[jvm] PASSED - -MapPrefsImplTest[jvm] > camera is absent before the map has been positioned()[jvm] PASSED - -MapPrefsImplTest[jvm] > map style await sees the persisted value rather than the eager default()[jvm] PASSED - -MapPrefsImplTest[jvm] > layer opacity is persisted()[jvm] PASSED - -UiPrefsImplTest[jvm] > selected connection transport is null when no legacy transport keys exist()[jvm] PASSED - -MeshPrefsImplTest[jvm] > await device address waits for persisted data instead of returning the flow default()[jvm] PASSED - -UiPrefsImplTest[jvm] > legacy selected connection transport defaults to BLE when all transports are visible()[jvm] PASSED - -UiPrefsImplTest[jvm] > explicit selected connection transport wins over legacy booleans()[jvm] PASSED - -UiPrefsImplTest[jvm] > full message timestamps default to false()[jvm] PASSED - -UiPrefsImplTest[jvm] > full message timestamps persist when enabled()[jvm] PASSED - -UiPrefsImplTest[jvm] > legacy selected connection transport chooses USB when only USB is visible()[jvm] PASSED - -UiPrefsImplTest[jvm] > legacy selected connection transport chooses TCP when BLE is hidden()[jvm] PASSED - -UiPrefsImplTest[jvm] > firmware update notification keys persist without duplicates()[jvm] PASSED - -UiPrefsImplTest[jvm] > invalid selected connection transport falls back to legacy booleans()[jvm] PASSED - -NotificationPrefsTest[jvm] > geofenceAlertOptIns retoggle refreshes eviction order()[jvm] PASSED - -NotificationPrefsTest[jvm] > lowBatteryEnabled defaults to true()[jvm] PASSED - -NotificationPrefsTest[jvm] > setting nodeEventsEnabled updates preference()[jvm] PASSED - -NotificationPrefsTest[jvm] > geofenceAlertOptIns adds and removes waypoint ids()[jvm] PASSED - -NotificationPrefsTest[jvm] > vanilla firmware restores node events only when the restore was claimed()[jvm] PASSED - -NotificationPrefsTest[jvm] > setting messagesEnabled updates preference()[jvm] PASSED - -NotificationPrefsTest[jvm] > setting lowBatteryEnabled updates preference()[jvm] PASSED - -NotificationPrefsTest[jvm] > nodeEventsEnabled defaults to true()[jvm] PASSED - -NotificationPrefsTest[jvm] > event firmware leaves an already-off preference alone and claims nothing()[jvm] PASSED - -NotificationPrefsTest[jvm] > geofenceAlertOptIns defaults to empty()[jvm] PASSED - -NotificationPrefsTest[jvm] > repeated event firmware connections do not re-disable a manual re-enable()[jvm] PASSED - -NotificationPrefsTest[jvm] > event firmware disables node events and claims the restore()[jvm] PASSED - -NotificationPrefsTest[jvm] > messagesEnabled defaults to true()[jvm] PASSED - -> Task :feature:intro:compileAndroidMain -> Task :feature:intro:bundleAndroidMainClassesToCompileJar - -> Task :core:prefs:jvmTest - -NotificationPrefsTest[jvm] > geofenceAlertOptIns caps size and evicts oldest()[jvm] PASSED - -NotificationPrefsTest[jvm] > vanilla firmware does not enable node events the user had turned off()[jvm] PASSED - -> Task :core:barcode:processFdroidDebugJavaRes -> Task :feature:connections:processAndroidMainJavaRes -> Task :core:barcode:bundleLibCompileToJarFdroidDebug -> Task :feature:discovery:processAndroidMainJavaRes -> Task :feature:docs:processAndroidMainJavaRes -> Task :feature:intro:processAndroidMainJavaRes -> Task :core:barcode:bundleLibRuntimeToDirFdroidDebug -> Task :feature:discovery:bundleAndroidMainClassesToCompileJar -> Task :feature:intro:bundleLibRuntimeToDirAndroidMain -> Task :feature:firmware:compileAndroidMain - -> Task :core:prefs:testAndroidHostTest - -NodeListLayoutPrefsTest > shouldShowSignal defaults to true PASSED - -NodeListLayoutPrefsTest > shouldShowRole defaults to true PASSED - -NodeListLayoutPrefsTest > setNodeListDensity persists COMPACT PASSED - -NodeListLayoutPrefsTest > shouldShowChannel defaults to true PASSED - -NodeListLayoutPrefsTest > setShouldShowHops persists false PASSED - -NodeListLayoutPrefsTest > shouldShowLocation defaults to true PASSED - -NodeListLayoutPrefsTest > nodeListDensity defaults to COMPLETE PASSED - -NodeListLayoutPrefsTest > lastHeardIsRelative defaults to false PASSED - -NodeListLayoutPrefsTest > setShouldShowSignal persists false PASSED - -NodeListLayoutPrefsTest > setShouldShowLastHeard persists false PASSED - -NodeListLayoutPrefsTest > shouldShowPower defaults to true PASSED - -NodeListLayoutPrefsTest > shouldShowHops defaults to true PASSED - -NodeListLayoutPrefsTest > shouldShowTelemetry defaults to true PASSED - -NodeListLayoutPrefsTest > setShouldShowRole persists false PASSED - -NodeListLayoutPrefsTest > setShouldShowTelemetry persists false PASSED - -NodeListLayoutPrefsTest > setLastHeardIsRelative persists true PASSED - -NodeListLayoutPrefsTest > setShouldShowLocation persists false PASSED - -NodeListLayoutPrefsTest > setShouldShowPower persists false PASSED - -NodeListLayoutPrefsTest > setShouldShowChannel persists false PASSED - -NodeListLayoutPrefsTest > shouldShowLastHeard defaults to true PASSED - -MapPrefsImplTest > a layer opacity update sees the persisted value rather than the eager default PASSED - -MapPrefsImplTest > layer opacity is absent until a slider is moved PASSED - -MapPrefsImplTest > camera position is persisted as a complete record PASSED - -MapPrefsImplTest > camera is absent before the map has been positioned PASSED - -MapPrefsImplTest > map style await sees the persisted value rather than the eager default PASSED - -MapPrefsImplTest > layer opacity is persisted PASSED - -UiPrefsImplTest > selected connection transport is null when no legacy transport keys exist PASSED - -UiPrefsImplTest > legacy selected connection transport defaults to BLE when all transports are visible PASSED - -UiPrefsImplTest > explicit selected connection transport wins over legacy booleans PASSED - -UiPrefsImplTest > full message timestamps default to false PASSED - -UiPrefsImplTest > full message timestamps persist when enabled PASSED - -UiPrefsImplTest > legacy selected connection transport chooses USB when only USB is visible PASSED - -UiPrefsImplTest > legacy selected connection transport chooses TCP when BLE is hidden PASSED - -UiPrefsImplTest > firmware update notification keys persist without duplicates PASSED - -UiPrefsImplTest > invalid selected connection transport falls back to legacy booleans PASSED - -> Task :feature:connections:bundleLibRuntimeToDirAndroidMain -> Task :feature:firmware:processAndroidMainJavaRes -> Task :feature:firmware:bundleAndroidMainClassesToCompileJar -> Task :feature:discovery:bundleLibRuntimeToDirAndroidMain -> Task :feature:docs:bundleLibRuntimeToDirAndroidMain -> Task :core:barcode:compileGoogleReleaseKotlin -> Task :core:barcode:compileGoogleReleaseJavaWithJavac NO-SOURCE -> Task :core:barcode:bundleLibCompileToJarGoogleRelease -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release -> Task :feature:firmware:bundleLibRuntimeToDirAndroidMain - -> Task :core:prefs:testAndroidHostTest - -MeshPrefsImplTest > await device address waits for persisted data instead of returning the flow default PASSED - -> Task :core:model:testAndroidHostTest - -CapabilitiesTest > supportsEsp32Ota_requires_V2_7_18 PASSED - -CapabilitiesTest > offers_hides_a_deprecated_field_at_deprecated_since_unless_set PASSED - -CapabilitiesTest > supportsQrCodeSharing_requires_V2_6_8 PASSED - -CapabilitiesTest > offers_hides_a_field_below_since_firmware PASSED - -CapabilitiesTest > offers_an_unannotated_field_everywhere PASSED - -CapabilitiesTest > supportsRegion_gates_2_8_regions_but_not_established_ones PASSED - -CapabilitiesTest > offers_everything_when_forceEnableAll PASSED - -CapabilitiesTest > nullFirmware_returns_all_false PASSED - -CapabilitiesTest > canToggleUnmessageable_requires_V2_6_9 PASSED - -CapabilitiesTest > supportsLockdown_requires_V2_8_0 PASSED - -CapabilitiesTest > canMuteNode_requires_V2_7_18 PASSED - -CapabilitiesTest > supportsPreset_gates_2_8_presets_but_not_established_ones PASSED - -CapabilitiesTest > supportsTakConfig_requires_V2_8_0 PASSED - -> Task :core:barcode:compileGoogleDebugKotlin -> Task :core:barcode:compileGoogleDebugJavaWithJavac NO-SOURCE -> Task :core:barcode:bundleLibCompileToJarGoogleDebug -> Task :core:barcode:processGoogleDebugJavaRes -> Task :core:barcode:bundleLibRuntimeToDirGoogleDebug -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release - -> Task :core:prefs:testAndroidHostTest - -TakPrefsTest > mesh to CoT is independent of the server toggle PASSED - -TakPrefsTest > isTakServerEnabled defaults to false PASSED - -TakPrefsTest > isMeshToCotEnabled defaults to false PASSED - -TakPrefsTest > setting isMeshToCotEnabled updates preference PASSED - -TakPrefsTest > setting isTakServerEnabled updates preference PASSED - -NotificationPrefsTest > geofenceAlertOptIns retoggle refreshes eviction order PASSED - -NotificationPrefsTest > lowBatteryEnabled defaults to true PASSED - -NotificationPrefsTest > setting nodeEventsEnabled updates preference PASSED - -NotificationPrefsTest > geofenceAlertOptIns adds and removes waypoint ids PASSED - -NotificationPrefsTest > vanilla firmware restores node events only when the restore was claimed PASSED - -NotificationPrefsTest > setting messagesEnabled updates preference PASSED - -NotificationPrefsTest > setting lowBatteryEnabled updates preference PASSED - -NotificationPrefsTest > nodeEventsEnabled defaults to true PASSED - -> Task :docs-screenshots:compileDebugKotlin NO-SOURCE -> Task :docs-screenshots:compileDebugJavaWithJavac NO-SOURCE -> Task :docs-screenshots:mergeDebugGeneratedProguardFiles -> Task :docs-screenshots:mergeDebugConsumerProguardFiles -> Task :docs-screenshots:processDebugJavaRes NO-SOURCE -> Task :docs-screenshots:extractDebugAnnotations -> Task :docs-screenshots:mergeDebugJavaResource -> Task :core:barcode:extractFdroidDebugAnnotations -> Task :core:barcode:mergeFdroidDebugGeneratedProguardFiles -> Task :core:barcode:mergeFdroidDebugConsumerProguardFiles -> Task :core:barcode:mergeFdroidDebugJavaResource -> Task :feature:wifi-provision:compileAndroidMain -> Task :feature:wifi-provision:bundleAndroidMainClassesToCompileJar -> Task :feature:wifi-provision:processAndroidMainJavaRes -> Task :docs-screenshots:syncDebugLibJars -> Task :docs-screenshots:bundleDebugAar -> Task :docs-screenshots:assembleDebug -> Task :feature:wifi-provision:bundleLibRuntimeToDirAndroidMain - -> Task :core:model:testAndroidHostTest - -CapabilitiesTest > offers_rejects_an_unparseable_schema_version PASSED - -CapabilitiesTest > forceEnableAll_returns_true_regardless_of_version PASSED - -CapabilitiesTest > canSendVerifiedContacts_requires_V2_7_12 PASSED - -CapabilitiesTest > canRequestNeighborInfo_is_currently_disabled PASSED - -CapabilitiesTest > supportsSecondaryChannelLocation_requires_V2_6_10 PASSED - -CapabilitiesTest > supportsStatusMessage_requires_V2_7_20 PASSED - -DeviceVersionTest > comparisonIsCorrect PASSED - -DeviceVersionTest > invalidVersionReturns_zero PASSED - -DeviceVersionTest > canParse PASSED - -DeviceVersionTest > checkStatus_classifiesKnownVersions PASSED - -DeviceVersionTest > twoPartVersionAppends_zero PASSED - -DeviceVersionTest > checkStatus_unparseableIsUnknownNotTooOld PASSED - -LoRaRegionPresetsTest > an UNSET map entry marks even a LongFast pin as deliberate at fresh setup PASSED - -LoRaRegionPresetsTest > region default preset is LongTurbo for US and absent for other regions PASSED - -LoRaRegionPresetsTest > constraint resolves the region's preset group PASSED - -LoRaRegionPresetsTest > fresh setup placeholder adopts the region's advertised default PASSED - -LoRaRegionPresetsTest > repair keeps a preset that is legal in the region PASSED - -LoRaRegionPresetsTest > region change keeps a legal placeholder when not fresh setup PASSED - -LoRaRegionPresetsTest > fresh setup never adopts a malformed map's illegal advertised default PASSED - -LoRaRegionPresetsTest > region absent from region_groups is unconstrained PASSED - -LoRaRegionPresetsTest > a pin stated via UNSET entry is still repaired when illegal in the region PASSED - -LoRaRegionPresetsTest > repair swaps an illegal preset to the region default PASSED - -LoRaRegionPresetsTest > licensed_only group is gated only for an unlicensed operator PASSED - -LoRaRegionPresetsTest > a group with no presets is treated as unconstrained PASSED - -LoRaRegionPresetsTest > fresh setup pin that is illegal in the region is still repaired PASSED - -LoRaRegionPresetsTest > repair falls back to the first legal preset when the default is not in the group PASSED - -LoRaRegionPresetsTest > fresh US setup adopts LongTurbo over the advertised LongFast default PASSED - -LoRaRegionPresetsTest > region change keeps a legal preset when not fresh setup PASSED - -LoRaRegionPresetsTest > out of range group_index is treated as unconstrained PASSED - -LoRaRegionPresetsTest > first-setup default is offered when the map lists it as legal PASSED - -LoRaRegionPresetsTest > no first-setup default when the map omits it from the region PASSED - -LoRaRegionPresetsTest > unlicensed group is never gated PASSED - -LoRaRegionPresetsTest > fresh setup keeps a deliberately pinned legal preset PASSED - -LoRaRegionPresetsTest > fresh setup keeps LongFast when firmware advertises no map PASSED - -LoRaRegionPresetsTest > a later US change on the advertised map keeps the running preset PASSED - -LoRaRegionPresetsTest > null map imposes no constraint PASSED - -LoRaRegionPresetsTest > fresh setup falls back to the advertised default when the built-in is illegal there PASSED - -LoRaRegionPresetsTest > no first-setup default is offered without a map PASSED - -MessageTest > getStatusStringRes_returnsMessageSpecificRoutingResources PASSED - -MessageTest > getStringResFrom_keepsSharedRoutingResourcesForGenericContexts PASSED - -MessageTest > messageConstruction_preservesProperties PASSED - -MessageTest > getStatusStringRes_returnsErrorResourcesForRoutingFailures PASSED - -MessageTest > isMessageStatusRetryable_allowsRetryForRetryableMessageStatusesOnly PASSED - -MessageTest > getStatusStringRes_returnsDeliveryResources PASSED - -MessageTest > getMessageStatusDetailRes_returnsActionableRoutingFailureDetails PASSED - -MessageTest > getStatusStringRes_returnsUnknownForMissingStatus PASSED - -MessageTest > getStatusStringRes_returnsDirectImplicitAckResourceForDirectMessages PASSED - -MessageTest > getStatusStringRes_returnsSendingResourceForPendingMessages PASSED - -MessageTest > getStatusStringRes_returnsRecipientDeliveryResource PASSED - -MessageTest > getStringResFrom_mapsUnknownValuesToUnrecognized PASSED - -NodeTest > isUnknownUser_falseWhenHardwareModelIsKnown PASSED - -NodeTest > matchesSearch_isCaseInsensitiveForNonAsciiLetters PASSED - -NodeTest > matchesSearch_toleratesAnAbsentStatusMessage PASSED - -NodeTest > createFallback_createsUnknownUserWithDerivedNames PASSED - -NodeTest > validPosition_returnsPositionOnlyForValidCoordinates PASSED - -NodeTest > matchesSearch_matchesTheStatusMessage PASSED - -NodeTest > isUnheardOnCurrentLora is true for a node not heard on the config in force now PASSED - -NodeTest > isOnline_usesStrictThresholdBoundary PASSED - -NodeTest > hasPKC_usesUserPublicKeyWhenNodeKeyIsMissing PASSED - -NodeTest > bearing_returnsCardinalDirections PASSED - -NodeTest > getRelayNode_filtersCandidatesAndChoosesFewestHops PASSED - -NodeTest > colors_returnsForegroundAndBackgroundValues PASSED - -NodeTest > matchesSearch_matchesHexAndDecimalNodeId PASSED - -NodeTest > distance_returnsMetersForKnownCoordinates PASSED - -NodeTest > isUnheardOnCurrentLora excludes MQTT nodes the radio never heard over RF PASSED - -NodeTest > mismatchKey_trueForErrorByteString PASSED - -NodeTest > matchesSearch_blankFilterMatchesEveryNode PASSED - -ActiveWaypointsTest > geofencesToMonitorKeepsOwnDropsForeign PASSED - -ActiveWaypointsTest > geofencesToMonitorIncludesOptedInForeign PASSED - -ActiveWaypointsTest > latestTransmissionWinsPerWaypointId PASSED - -ActiveWaypointsTest > expiredWaypointsAreDropped PASSED - -ActiveWaypointsTest > geofencesToMonitorDropsWaypointsWithNoCrossingNotifications PASSED - -AirQualityIndexTest > computeNowCastPm25_ignores_readings_older_than_the_twelve_hour_window PASSED - -AirQualityIndexTest > computeNowCastPm25_returns_null_when_second_valid_hour_is_outside_recent_three PASSED - -AirQualityIndexTest > nowCastAqiSeries_drops_history_older_than_the_twelve_hour_window PASSED - -AirQualityIndexTest > computeNowCastPm25_averages_stable_readings_with_weight_factor_one PASSED - -AirQualityIndexTest > nowCastAqiSeries_is_empty_for_no_readings PASSED - -AirQualityIndexTest > pm25ToAqi_clamps_negative_and_above_scale_concentrations PASSED - -AirQualityIndexTest > pm25ToAqi_uses_2024_breakpoints_for_low_concentrations PASSED - -AirQualityIndexTest > computeNowCastPm25_averages_multiple_readings_within_the_same_hour PASSED - -AirQualityIndexTest > computeNowCastPm25_weights_recent_hours_more_heavily_when_declining PASSED - -AirQualityIndexTest > computeNowCastPm25_returns_null_with_fewer_than_two_valid_hours PASSED - -AirQualityIndexTest > computeNowCastPm25_applies_minimum_weight_factor_floor PASSED - -AirQualityIndexTest > pm25ToAqi_matches_epa_breakpoint_table PASSED - -AirQualityIndexTest > computeNowCastPm25_returns_null_when_most_recent_hour_missing PASSED - -AirQualityIndexTest > nowCastAqiSeries_returns_an_entry_per_reading_in_input_order PASSED - -AirQualityIndexTest > nowCastAqiSeries_scopes_each_point_to_its_own_timestamp_not_the_newest PASSED - -AirQualityIndexTest > nowCastAqiSeries_yields_null_where_a_gap_breaks_the_epa_minimum_data_rule PASSED - -AirQualityIndexTest > nowCastAqiSeries_leaves_the_first_reading_null_because_one_hour_is_below_the_epa_minimum PASSED - -AirQualityIndexTest > nowCastAqiSeries_matches_computeNowCastPm25_at_the_final_point PASSED - -CommonUtilsTest > testByteArrayOfInts PASSED - -CommonUtilsTest > testXorHash PASSED - -RxTimeExtensionsTest > rxTimeOrNull returns the stamped time PASSED - -RxTimeExtensionsTest > isDirectSignal requires a known arrival time PASSED - -RxTimeExtensionsTest > rxTimeOrNull treats an old-firmware zero as unknown PASSED - -RxTimeExtensionsTest > rxTimeOrNull treats an absent field as unknown PASSED - -ToSharedContactTest > a contact already verified in person stays verified when relayed PASSED - -ToSharedContactTest > sharing your own contact marks it manually verified PASSED - -ToSharedContactTest > relaying someone else's contact asserts nothing on their behalf PASSED - -ToSharedContactTest > carries the node number and user through PASSED - -> Task :core:barcode:extractGoogleDebugAnnotations -> Task :core:barcode:mergeGoogleDebugGeneratedProguardFiles -> Task :core:barcode:mergeGoogleDebugConsumerProguardFiles -> Task :core:barcode:mergeGoogleDebugJavaResource - -> Task :core:prefs:testAndroidHostTest - -NotificationPrefsTest > event firmware leaves an already-off preference alone and claims nothing PASSED - -NotificationPrefsTest > geofenceAlertOptIns defaults to empty PASSED - -NotificationPrefsTest > repeated event firmware connections do not re-disable a manual re-enable PASSED - -NotificationPrefsTest > event firmware disables node events and claims the restore PASSED - -NotificationPrefsTest > messagesEnabled defaults to true PASSED - -NotificationPrefsTest > geofenceAlertOptIns caps size and evicts oldest PASSED - -NotificationPrefsTest > vanilla firmware does not enable node events the user had turned off PASSED - -> Task :core:barcode:bundleLibRuntimeToJarFdroidDebug -> Task :feature:connections:bundleAndroidMainClassesToRuntimeJar -> Task :feature:discovery:bundleAndroidMainClassesToRuntimeJar -> Task :feature:docs:bundleAndroidMainClassesToRuntimeJar -> Task :core:barcode:syncFdroidDebugLibJars FROM-CACHE -> Task :core:barcode:bundleFdroidDebugAar -> Task :core:barcode:assembleFdroidDebug -> Task :feature:intro:bundleAndroidMainClassesToRuntimeJar -> Task :feature:firmware:bundleAndroidMainClassesToRuntimeJar -> Task :feature:wifi-provision:bundleAndroidMainClassesToRuntimeJar -> Task :core:ui:compileJvmMainJava NO-SOURCE -> Task :core:ui:jvmMainClasses -> Task :core:barcode:bundleLibRuntimeToJarGoogleDebug -> Task :docs-screenshots:bundleLibRuntimeToJarDebug -> Task :docs-screenshots:bundleLibCompileToJarDebug -> Task :docs-screenshots:compileDebugUnitTestKotlin NO-SOURCE -> Task :docs-screenshots:compileDebugUnitTestJavaWithJavac NO-SOURCE -> Task :docs-screenshots:processDebugUnitTestJavaRes NO-SOURCE -> Task :docs-screenshots:testDebugUnitTest NO-SOURCE -> Task :docs-screenshots:test UP-TO-DATE -> Task :core:barcode:syncGoogleDebugLibJars FROM-CACHE -> Task :core:barcode:bundleGoogleDebugAar -> Task :core:barcode:assembleGoogleDebug -> Task :core:barcode:assembleDebug -> Task :core:ui:jvmJar -> Task :feature:map:compileAndroidMain -> Task :feature:map:bundleAndroidMainClassesToCompileJar -> Task :core:barcode:compileFdroidDebugUnitTestKotlin -> Task :core:barcode:compileGoogleDebugUnitTestKotlin -> Task :feature:map:processAndroidMainJavaRes -> Task :feature:map:bundleLibRuntimeToDirAndroidMain -> Task :feature:map:bundleAndroidMainClassesToRuntimeJar -> Task :feature:messaging:compileAndroidMain -> Task :feature:messaging:bundleAndroidMainClassesToCompileJar -> Task :feature:messaging:processAndroidMainJavaRes -> Task :feature:messaging:bundleLibRuntimeToDirAndroidMain -> Task :feature:docs:compileKotlinJvm -> Task :feature:connections:compileKotlinJvm -> Task :feature:connections:compileJvmMainJava NO-SOURCE -> Task :feature:connections:jvmMainClasses -> Task :feature:connections:jvmJar UP-TO-DATE -> Task :feature:docs:compileJvmMainJava NO-SOURCE -> Task :feature:docs:jvmMainClasses -> Task :feature:messaging:bundleAndroidMainClassesToRuntimeJar -> Task :feature:docs:jvmJar UP-TO-DATE -> Task :feature:intro:compileKotlinJvm -> Task :feature:intro:compileJvmMainJava NO-SOURCE -> Task :feature:intro:jvmMainClasses -> Task :feature:intro:jvmJar UP-TO-DATE -> Task :feature:discovery:compileKotlinJvm -> Task :feature:discovery:compileJvmMainJava NO-SOURCE -> Task :feature:discovery:jvmMainClasses -> Task :feature:discovery:jvmJar UP-TO-DATE -> Task :core:barcode:compileFdroidDebugUnitTestJavaWithJavac NO-SOURCE -> Task :core:barcode:processFdroidDebugUnitTestJavaRes - -> Task :feature:map-maplibre:compileAndroidMain -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonMain/kotlin/org/meshtastic/feature/map/maplibre/NodeTrackMap.kt:194:74 Elvis operator (?:) always returns the left operand of non-nullable type 'Int'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonMain/kotlin/org/meshtastic/feature/map/maplibre/geojson/WaypointFeatures.kt:68:76 Elvis operator (?:) always returns the left operand of non-nullable type 'Int'. - -> Task :feature:wifi-provision:compileKotlinJvm -> Task :feature:map-maplibre:processAndroidMainJavaRes -> Task :feature:map-maplibre:bundleLibRuntimeToDirAndroidMain -> Task :feature:map-maplibre:bundleAndroidMainClassesToCompileJar -> Task :feature:wifi-provision:compileJvmMainJava NO-SOURCE -> Task :feature:wifi-provision:jvmMainClasses -> Task :feature:wifi-provision:jvmJar UP-TO-DATE -> Task :core:barcode:compileGoogleDebugUnitTestJavaWithJavac NO-SOURCE -> Task :core:barcode:processGoogleDebugUnitTestJavaRes -> Task :feature:map-maplibre:bundleAndroidMainClassesToRuntimeJar - -> Task :core:barcode:testFdroidDebugUnitTest - -FdroidQrDecoderTest > decodes Apple-compatible channel URL from padded camera plane PASSED - -> Task :feature:map:compileKotlinJvm -> Task :feature:map:compileJvmMainJava NO-SOURCE -> Task :feature:map:jvmMainClasses -> Task :feature:map:jvmJar UP-TO-DATE -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -> Task :core:data:allTests -> Task :feature:firmware:compileKotlinJvm -> Task :feature:firmware:compileJvmMainJava NO-SOURCE -> Task :feature:firmware:jvmMainClasses -> Task :feature:firmware:jvmJar UP-TO-DATE -> Task :core:model:allTests -> Task :core:network:allTests -> Task :core:prefs:allTests -> Task :core:repository:compileJvmTestJava NO-SOURCE -> Task :core:repository:jvmTestClasses -> Task :feature:messaging:compileKotlinJvm -> Task :feature:messaging:compileJvmMainJava NO-SOURCE -> Task :feature:messaging:jvmMainClasses -> Task :feature:messaging:jvmJar UP-TO-DATE - -> Task :core:barcode:testFdroidDebugUnitTest - -SingleScanResultGateTest > concurrent_results_deliver_once PASSED - -SingleScanResultGateTest > first_result_is_delivered PASSED - -SingleScanResultGateTest > duplicate_results_are_ignored PASSED - -SingleScanResultGateTest > dismiss_blocks_late_scan_result PASSED - -SingleScanResultGateTest > throwing_callback_consumes_gate PASSED - -> Task :core:repository:compileAndroidHostTest - -> Task :core:barcode:testGoogleDebugUnitTest - -SingleScanResultGateTest > concurrent_results_deliver_once PASSED - -SingleScanResultGateTest > first_result_is_delivered PASSED - -SingleScanResultGateTest > duplicate_results_are_ignored PASSED - -SingleScanResultGateTest > dismiss_blocks_late_scan_result PASSED - -SingleScanResultGateTest > throwing_callback_consumes_gate PASSED - -> Task :feature:settings:compileAndroidMain -> Task :core:service:compileKotlinIosSimulatorArm64 -> Task :feature:settings:processAndroidMainJavaRes - -> Task :core:repository:jvmTest - -AppPreferencesTest[jvm] > RadioPrefs isBle returns false for other prefix()[jvm] PASSED - -AppPreferencesTest[jvm] > RadioPrefs isMock returns true for m prefix()[jvm] PASSED - -AppPreferencesTest[jvm] > RadioPrefs isBle returns true for x prefix()[jvm] PASSED - -AppPreferencesTest[jvm] > RadioPrefs isSerial returns true for s prefix()[jvm] PASSED - -AppPreferencesTest[jvm] > RadioPrefs isTcp returns true for t prefix()[jvm] PASSED - -MeshLogRetentionTest[jvm] > every window is positive so the cutoff never lands in the future()[jvm] PASSED - -MeshLogRetentionTest[jvm] > out of range negative settings still resolve to an hour()[jvm] PASSED - -MeshLogRetentionTest[jvm] > the lowest selectable setting is the one hour sentinel()[jvm] PASSED - -MeshLogRetentionTest[jvm] > positive settings resolve to that many days()[jvm] PASSED - -MeshLogRetentionTest[jvm] > one hour sentinel resolves to an hour and not a negative day count()[jvm] PASSED - -MeshLogRetentionTest[jvm] > keep forever sentinel resolves to no window()[jvm] PASSED - -> Task :feature:node:compileAndroidMain -> Task :feature:node:bundleAndroidMainClassesToCompileJar -> Task :feature:node:processAndroidMainJavaRes -> Task :feature:settings:bundleLibRuntimeToDirAndroidMain -> Task :feature:node:bundleLibRuntimeToDirAndroidMain -> Task :feature:settings:bundleAndroidMainClassesToCompileJar -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:repository:jvmTest - -AwaitedSendResultTest[jvm] > transportStoppedMayOccurBeforeOrAfterTransportDispatch()[jvm] PASSED - -AwaitedSendResultTest[jvm] > radioRejectedAndTimedOutResultsAreNotAccepted()[jvm] PASSED - -AwaitedSendResultTest[jvm] > sendFailedStatusCannotClaimTransportDispatch()[jvm] PASSED - -AwaitedSendResultTest[jvm] > validDispatchPairingPreservesAcceptedMapping()[jvm] PASSED - -AwaitedSendResultTest[jvm] > radioRejectedStatusRequiresTransportDispatch()[jvm] PASSED - -AwaitedSendResultTest[jvm] > rejectedNonDispatchedResultIsValidAndNotAccepted()[jvm] PASSED - -AwaitedSendResultTest[jvm] > rejectedStatusCannotClaimTransportDispatch()[jvm] PASSED - -AwaitedSendResultTest[jvm] > timedOutStatusRequiresTransportDispatch()[jvm] PASSED - -AwaitedSendResultTest[jvm] > acceptedStatusRequiresDispatch()[jvm] PASSED - -ClientNotificationIdentityTest[jvm] > identity is stable across reply_id and time on an otherwise identical repeat()[jvm] PASSED - -ClientNotificationIdentityTest[jvm] > identity differs when the message differs()[jvm] PASSED - -ClientNotificationIdentityTest[jvm] > identity differs when the payload variant differs()[jvm] PASSED - -NotificationTest[jvm] > Notification creation works with defaults()[jvm] PASSED - -NodeRestartTrackerTest[jvm] > onConnected closes the window()[jvm] PASSED - -NodeRestartTrackerTest[jvm] > expectRestart opens the window()[jvm] PASSED - -NodeRestartTrackerTest[jvm] > window expires if the node never comes back()[jvm] PASSED - -NodeRestartTrackerTest[jvm] > a later expectRestart extends an open window()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > reset into disconnected records a canonical departure()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > constructor rejects initial departure evidence beyond completed handshakes()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > constructor rejects negative epoch counters()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke with broadcast message simply sends data packet()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke with direct message to new firmware triggers sendSharedContact()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke queues the stable id returned by persistence()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke with PKI DM to older firmware does not trigger favorite()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke with homoglyph enabled transforms text()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke with direct message to older firmware triggers favoriteNode()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke with PKI DM triggers sendSharedContact()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke reports a message_send analytics action()[jvm] PASSED - -SendMessageUseCaseTest[jvm] > invoke with channel DM does not trigger sendSharedContact or favorite()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > concurrent mixed transitions publish correlated lifecycle snapshots while active()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > explicit reset baseline must include the requested lifecycle transition()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > concurrent duplicate transitions advance each lifecycle edge once()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > constructor rejects an initial epoch snapshot without its departure state()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > reset preserves monotonic epochs when no baseline is supplied()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > explicit reset baseline must retain its last departure state()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > reset rejects an explicit epoch baseline that rewinds monotonic counters()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > lifecycle flow publishes state and epochs as one correlated snapshot()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > device sleep departure records handshake evidence()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > transitions advance matching epochs exactly once()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > explicit reset baseline must preserve the canonical departure state()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > reset restores an explicit state and epoch baseline()[jvm] PASSED - -ConnectionStateHolderTest[jvm] > initial epochs reject impossible departure evidence()[jvm] PASSED - -RadioTransportTest[jvm] > RadioTransport can be implemented()[jvm] PASSED - -> Task :core:barcode:testFdroidDebugUnitTest - -BarcodeScannerTest > testRememberBarcodeScanner PASSED - -> Task :feature:map-maplibre:compileKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonMain/kotlin/org/meshtastic/feature/map/maplibre/NodeTrackMap.kt:194:74 Elvis operator (?:) always returns the left operand of non-nullable type 'Int'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonMain/kotlin/org/meshtastic/feature/map/maplibre/geojson/WaypointFeatures.kt:68:76 Elvis operator (?:) always returns the left operand of non-nullable type 'Int'. - -> Task :core:repository:testAndroidHostTest - -AppPreferencesTest > RadioPrefs isBle returns false for other prefix PASSED - -AppPreferencesTest > RadioPrefs isMock returns true for m prefix PASSED - -AppPreferencesTest > RadioPrefs isBle returns true for x prefix PASSED - -AppPreferencesTest > RadioPrefs isSerial returns true for s prefix PASSED - -AppPreferencesTest > RadioPrefs isTcp returns true for t prefix PASSED - -MeshLogRetentionTest > every window is positive so the cutoff never lands in the future PASSED - -MeshLogRetentionTest > out of range negative settings still resolve to an hour PASSED - -MeshLogRetentionTest > the lowest selectable setting is the one hour sentinel PASSED - -MeshLogRetentionTest > positive settings resolve to that many days PASSED - -MeshLogRetentionTest > one hour sentinel resolves to an hour and not a negative day count PASSED - -MeshLogRetentionTest > keep forever sentinel resolves to no window PASSED - -AwaitedSendResultTest > transportStoppedMayOccurBeforeOrAfterTransportDispatch PASSED - -AwaitedSendResultTest > radioRejectedAndTimedOutResultsAreNotAccepted PASSED - -> Task :screenshot-tests:extractDebugAnnotations -> Task :screenshot-tests:compileDebugKotlin NO-SOURCE -> Task :screenshot-tests:compileDebugJavaWithJavac NO-SOURCE -> Task :screenshot-tests:mergeDebugGeneratedProguardFiles -> Task :screenshot-tests:mergeDebugConsumerProguardFiles -> Task :screenshot-tests:processDebugJavaRes NO-SOURCE -> Task :feature:settings:compileKotlinJvm -> Task :screenshot-tests:mergeDebugJavaResource - -> Task :core:repository:testAndroidHostTest - -AwaitedSendResultTest > sendFailedStatusCannotClaimTransportDispatch PASSED - -AwaitedSendResultTest > validDispatchPairingPreservesAcceptedMapping PASSED - -AwaitedSendResultTest > radioRejectedStatusRequiresTransportDispatch PASSED - -AwaitedSendResultTest > rejectedNonDispatchedResultIsValidAndNotAccepted PASSED - -AwaitedSendResultTest > rejectedStatusCannotClaimTransportDispatch PASSED - -AwaitedSendResultTest > timedOutStatusRequiresTransportDispatch PASSED - -AwaitedSendResultTest > acceptedStatusRequiresDispatch PASSED - -ConnectionStateHolderTest > reset into disconnected records a canonical departure PASSED - -NodeRestartTrackerTest > onConnected closes the window PASSED - -NodeRestartTrackerTest > expectRestart opens the window PASSED - -NodeRestartTrackerTest > window expires if the node never comes back PASSED - -NodeRestartTrackerTest > a later expectRestart extends an open window PASSED - -ClientNotificationIdentityTest > identity is stable across reply_id and time on an otherwise identical repeat PASSED - -ClientNotificationIdentityTest > identity differs when the message differs PASSED - -ClientNotificationIdentityTest > identity differs when the payload variant differs PASSED - -NotificationTest > Notification creation works with defaults PASSED - -ConnectionStateHolderTest > constructor rejects initial departure evidence beyond completed handshakes PASSED - -ConnectionStateHolderTest > constructor rejects negative epoch counters PASSED - -> Task :screenshot-tests:syncDebugLibJars -> Task :screenshot-tests:bundleDebugAar -> Task :screenshot-tests:assembleDebug -> Task :feature:node:bundleAndroidMainClassesToRuntimeJar -> Task :feature:settings:bundleAndroidMainClassesToRuntimeJar -> Task :feature:map-maplibre:compileJvmMainJava NO-SOURCE -> Task :feature:map-maplibre:jvmMainClasses -> Task :feature:map-maplibre:jvmJar UP-TO-DATE -> Task :screenshot-tests:bundleLibRuntimeToJarDebug -> Task :screenshot-tests:bundleLibCompileToJarDebug -> Task :screenshot-tests:compileDebugUnitTestKotlin NO-SOURCE -> Task :screenshot-tests:compileDebugUnitTestJavaWithJavac NO-SOURCE -> Task :screenshot-tests:processDebugUnitTestJavaRes NO-SOURCE -> Task :screenshot-tests:testDebugUnitTest NO-SOURCE -> Task :screenshot-tests:test UP-TO-DATE -> Task :core:service:iosSimulatorArm64MainKlibrary - -> Task :core:repository:testAndroidHostTest - -ActiveConversationTrackerTest > clearing the current key clears it PASSED - -ActiveConversationTrackerTest > backgrounding alerts even while a key is still set PASSED - -ActiveConversationTrackerTest > suppresses only the conversation on screen PASSED - -ActiveConversationTrackerTest > defaults to alerting PASSED - -ActiveConversationTrackerTest > clearing a stale key does not erase the conversation that replaced it PASSED - -DataPairTest > DataPair with non-null value retains value PASSED - -DataPairTest > DataPair with null value becomes string null PASSED - -ConnectionStateHolderTest > concurrent mixed transitions publish correlated lifecycle snapshots while active PASSED - -ConnectionStateHolderTest > explicit reset baseline must include the requested lifecycle transition PASSED - -ConnectionStateHolderTest > concurrent duplicate transitions advance each lifecycle edge once PASSED - -ConnectionStateHolderTest > constructor rejects an initial epoch snapshot without its departure state PASSED - -ConnectionStateHolderTest > reset preserves monotonic epochs when no baseline is supplied PASSED - -ConnectionStateHolderTest > explicit reset baseline must retain its last departure state PASSED - -ConnectionStateHolderTest > reset rejects an explicit epoch baseline that rewinds monotonic counters PASSED - -ConnectionStateHolderTest > lifecycle flow publishes state and epochs as one correlated snapshot PASSED - -ConnectionStateHolderTest > device sleep departure records handshake evidence PASSED - -ConnectionStateHolderTest > transitions advance matching epochs exactly once PASSED - -ConnectionStateHolderTest > explicit reset baseline must preserve the canonical departure state PASSED - -ConnectionStateHolderTest > reset restores an explicit state and epoch baseline PASSED - -ConnectionStateHolderTest > initial epochs reject impossible departure evidence PASSED - -RadioTransportTest > RadioTransport can be implemented PASSED - -> Task :feature:settings:compileJvmMainJava NO-SOURCE -> Task :feature:settings:jvmMainClasses -> Task :feature:settings:jvmJar - -> Task :core:repository:testAndroidHostTest - -SendMessageUseCaseTest > invoke with broadcast message simply sends data packet PASSED - -SendMessageUseCaseTest > invoke with direct message to new firmware triggers sendSharedContact PASSED - -SendMessageUseCaseTest > invoke queues the stable id returned by persistence PASSED - -SendMessageUseCaseTest > invoke with PKI DM to older firmware does not trigger favorite PASSED - -SendMessageUseCaseTest > invoke with homoglyph enabled transforms text PASSED - -SendMessageUseCaseTest > invoke with direct message to older firmware triggers favoriteNode PASSED - -SendMessageUseCaseTest > invoke with PKI DM triggers sendSharedContact PASSED - -SendMessageUseCaseTest > invoke reports a message_send analytics action PASSED - -SendMessageUseCaseTest > invoke with channel DM does not trigger sendSharedContact or favorite PASSED - -> Task :core:repository:jvmTest - -ActiveConversationTrackerTest[jvm] > clearing the current key clears it()[jvm] PASSED - -ActiveConversationTrackerTest[jvm] > backgrounding alerts even while a key is still set()[jvm] PASSED - -ActiveConversationTrackerTest[jvm] > suppresses only the conversation on screen()[jvm] PASSED - -ActiveConversationTrackerTest[jvm] > defaults to alerting()[jvm] PASSED - -ActiveConversationTrackerTest[jvm] > clearing a stale key does not erase the conversation that replaced it()[jvm] PASSED - -DataPairTest[jvm] > DataPair with non-null value retains value()[jvm] PASSED - -DataPairTest[jvm] > DataPair with null value becomes string null()[jvm] PASSED - -> Task :core:repository:allTests - -> Task :core:barcode:testGoogleDebugUnitTest - -BarcodeScannerTest > testRememberBarcodeScanner PASSED - -> Task :core:barcode:test - -> Task :core:service:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:225:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:230:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:254:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:259:17 Expression is unused. - -> Task :core:service:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:service:iosSimulatorArm64Test SKIPPED -> Task :feature:node:compileKotlinJvm -> Task :androidApp:kspFdroidDebugKotlin -> Task :core:takserver:compileTestKotlinJvm -> Task :core:takserver:compileJvmTestJava NO-SOURCE -> Task :core:takserver:jvmTestClasses - -> Task :core:testing:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/testing/src/commonTest/kotlin/org/meshtastic/core/testing/FakeBleServiceFailureInjectionTest.kt:129:28 Unnecessary non-null assertion (!!) on a non-null receiver of type 'ByteArray'. - -> Task :core:takserver:compileAndroidHostTest - -> Task :core:testing:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/testing/src/commonTest/kotlin/org/meshtastic/core/testing/FakeBleServiceFailureInjectionTest.kt:129:28 Unnecessary non-null assertion (!!) on a non-null receiver of type 'ByteArray'. - -> Task :core:testing:compileJvmTestJava NO-SOURCE -> Task :core:testing:jvmTestClasses -> Task :androidApp:kspGoogleDebugKotlin - -> Task :core:service:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:225:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:230:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:254:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:259:17 Expression is unused. - -> Task :core:service:compileJvmTestJava NO-SOURCE -> Task :core:service:jvmTestClasses - -> Task :core:takserver:jvmTest - -CoTXmlParserTest[jvm] > parsedDetailXml is null for self-closed detail element()[jvm] PASSED - -CoTXmlParserTest[jvm] > sourceEventXml captures the complete original event verbatim()[jvm] PASSED - -CoTXmlParserTest[jvm] > parsedDetailXml preserves structural elements from unmapped types()[jvm] PASSED - -CoTXmlParserTest[jvm] > test successful CoT XML parsing()[jvm] PASSED - -CoTXmlParserTest[jvm] > test invalid CoT XML parsing falls back to failure()[jvm] PASSED - -CoTXmlParserTest[jvm] > test defaults applied when optional fields missing()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > own node is excluded()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > remarks carry the reported telemetry()[jvm] PASSED - -> Task :feature:node:compileJvmMainJava NO-SOURCE -> Task :feature:node:jvmMainClasses -> Task :feature:node:jvmJar UP-TO-DATE -> Task :androidApp:compileFdroidDebugKotlin - -> Task :core:takserver:testAndroidHostTest - -CoTDetailStripperTest > real_world_u_d_c_c_event_shrinks_dramatically PASSED - -CoTDetailStripperTest > handles_interleaved_strip_and_keep_elements PASSED - -CoTDetailStripperTest > empty_input_returns_empty PASSED - -CoTDetailStripperTest > strips_tog_and_flow_tags PASSED - -CoTDetailStripperTest > preserves_chat_related_elements PASSED - -CoTDetailStripperTest > preserves_contact_group_status_track PASSED - -CoTDetailStripperTest > strips_resource_references_and_flags PASSED - -CoTDetailStripperTest > strips_cosmetic_elements PASSED - -CoTDetailStripperTest > strips_geometric_detail_including_nested_content PASSED - -CoTDetailStripperTest > collapses_inter_element_whitespace PASSED - -MeshNodeCoTConversionTest > own node is excluded PASSED - -MeshNodeCoTConversionTest > remarks carry the reported telemetry PASSED - -MeshNodeCoTConversionTest > negative fractional readings keep their sign PASSED - -MeshNodeCoTConversionTest > cot event matches the cross-platform contract PASSED - -MeshNodeCoTConversionTest > node heard outside the window is excluded PASSED - -MeshNodeCoTConversionTest > node without user info is excluded PASSED - -MeshNodeCoTConversionTest > remarks omit unreported telemetry rather than reporting zero PASSED - -MeshNodeCoTConversionTest > zero is preserved as a real telemetry reading PASSED - -MeshNodeCoTConversionTest > node without a valid position is excluded PASSED - -MeshNodeCoTConversionTest > callsign falls back when a name is missing PASSED - -MeshNodeCoTConversionTest > uid is derived from the node number and stays stable PASSED - -MeshNodeCoTConversionTest > callsign is short and long name joined PASSED - -MeshNodeCoTConversionTest > uid hex is upper-case and zero-padded to match Apple PASSED - -MeshNodeCoTConversionTest > eligible node passes the filter PASSED - -TAKPacketV2RawDetailTest > cotMessageWithoutParsedDetailReturnsNull PASSED - -> Task :androidApp:compileFdroidDebugJavaWithJavac -> Task :androidApp:processFdroidDebugJavaRes - -> Task :core:takserver:jvmTest - -MeshNodeCoTConversionTest[jvm] > negative fractional readings keep their sign()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > cot event matches the cross-platform contract()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > node heard outside the window is excluded()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > node without user info is excluded()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > remarks omit unreported telemetry rather than reporting zero()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > zero is preserved as a real telemetry reading()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > node without a valid position is excluded()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > callsign falls back when a name is missing()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > uid is derived from the node number and stays stable()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > callsign is short and long name joined()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > uid hex is upper-case and zero-padded to match Apple()[jvm] PASSED - -MeshNodeCoTConversionTest[jvm] > eligible node passes the filter()[jvm] PASSED - -TAKPacketV2RawDetailTest[jvm] > cotMessageWithoutParsedDetailReturnsNull()[jvm] PASSED - -TAKPacketV2RawDetailTest[jvm] > raw_detail_path_emits_only_the_raw_bytes_inside_detail_no_duplicate_structured_elements()[jvm] PASSED - -TAKPacketV2RawDetailTest[jvm] > udcc_round_trips_via_raw_detail()[jvm] PASSED - -TakCertLegacyEncodingTest[jvm] > client p12 uses legacy encoding and loads()[jvm] PASSED - -TakCertLegacyEncodingTest[jvm] > server p12 uses legacy encoding and loads()[jvm] PASSED - -TakCertLegacyEncodingTest[jvm] > server ssl context builds from bundled certs()[jvm] PASSED - -CoTXmlFrameBufferTest[jvm] > extracts multiple concatenated events()[jvm] PASSED - -CoTXmlFrameBufferTest[jvm] > preserves partial event until completed()[jvm] PASSED - -CoTXmlFrameBufferTest[jvm] > drops oversized partial buffer()[jvm] PASSED - -CoTDetailStripperTest[jvm] > real_world_u_d_c_c_event_shrinks_dramatically()[jvm] PASSED - -CoTConversionTest[jvm] > testUserToCoTMessage()[jvm] PASSED - -CoTDetailStripperTest[jvm] > handles_interleaved_strip_and_keep_elements()[jvm] PASSED - -CoTDetailStripperTest[jvm] > empty_input_returns_empty()[jvm] PASSED - -CoTDetailStripperTest[jvm] > strips_tog_and_flow_tags()[jvm] PASSED - -CoTDetailStripperTest[jvm] > preserves_chat_related_elements()[jvm] PASSED - -CoTDetailStripperTest[jvm] > preserves_contact_group_status_track()[jvm] PASSED - -CoTDetailStripperTest[jvm] > strips_resource_references_and_flags()[jvm] PASSED - -CoTDetailStripperTest[jvm] > strips_cosmetic_elements()[jvm] PASSED - -CoTDetailStripperTest[jvm] > strips_geometric_detail_including_nested_content()[jvm] PASSED - -CoTDetailStripperTest[jvm] > collapses_inter_element_whitespace()[jvm] PASSED - -CoTConversionTest[jvm] > testPositionToCoTMessage()[jvm] PASSED - -CoTXmlTest[jvm] > toXml does not include XML declaration - CoT stream protocol()[jvm] PASSED - -CoTXmlTest[jvm] > toXml includes remarks when present()[jvm] PASSED - -CotDeliveryDedupTest[jvm] > same uid but changed content is not a duplicate()[jvm] PASSED - -CotDeliveryDedupTest[jvm] > duplicate is re-admitted once the TTL window elapses()[jvm] PASSED - -CotDeliveryDedupTest[jvm] > distinct events are all admitted()[jvm] PASSED - -CotDeliveryDedupTest[jvm] > cache is bounded by maxEntries and evicts oldest()[jvm] PASSED - -CotDeliveryDedupTest[jvm] > first sighting admitted then immediate exact repeat dropped()[jvm] PASSED - -CoTXmlTest[jvm] > toXml escapes special characters in UID()[jvm] PASSED - -CoTXmlTest[jvm] > toXml omits optional elements when null()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakRoleName returns default for TeamMember()[jvm] PASSED - -TAKDefaultsTest[jvm] > keepalive interval is below ATAK stale threshold()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakTeamName returns default for null()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakCallsign falls back to id when both names are blank()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakRoleName converts TeamLead()[jvm] PASSED - -TakV2CompressorTaktalkTest[jvm] > y- taktalk room broadcast round-trips with participant list()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakTeamName converts Red()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakTeamName replaces underscores with spaces()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakRoleName returns default for Unspecifed()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakRoleName returns default for null()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakTeamName converts Blue()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakCallsign falls back to long_name when short_name is blank()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakTeamName returns default for Unspecifed_Color()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakRoleName falls back to enum name for other roles()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakCallsign prefers short_name()[jvm] PASSED - -TAKDefaultsTest[jvm] > toTakRoleName converts ForwardObserver()[jvm] PASSED - -TakV2CompressorTaktalkTest[jvm] > m-t-t taktalk message round-trips with voice marker()[jvm] PASSED - -TakV2CompressorTaktalkTest[jvm] > b-t-f chat carries TAKTALK sidecars through compressor()[jvm] PASSED - -TakV2CompressorTaktalkTest[jvm] > m-t-t taktalk text-only message has from_voice false()[jvm] PASSED - -TakV2CompressorTaktalkTest[jvm] > b-t-f chat without TAKTALK sidecars leaves them null on the wire()[jvm] PASSED - -TakV2CompressorTaktalkTest[jvm] > m-t-t with marti round-trips dest callsigns and survives compression()[jvm] PASSED - -TAKPacketConversionTest[jvm] > testTAKPacketToCoTMessagePLI()[jvm] PASSED - -CoTLocaleInvarianceTest[jvm] > remarks keep dot decimals and no grouping on a comma locale()[jvm] PASSED - -TAKPacketConversionTest[jvm] > testChatSmugglesMessageId()[jvm] PASSED - -TAKPacketConversionTest[jvm] > testCoTToTAKPacketPLI()[jvm] PASSED - -TAKPacketConversionTest[jvm] > testCoTToTAKPacketChat()[jvm] PASSED - -TAKPacketConversionTest[jvm] > testParseSmuggledMessageId()[jvm] PASSED - -CoTXmlTest[jvm] > toXml produces parseable XML for a chat message()[jvm] PASSED - -CoTXmlTest[jvm] > toXml escapes special characters in callsign()[jvm] PASSED - -CoTXmlTest[jvm] > toXml produces parseable XML for a PLI message()[jvm] PASSED - -XmlUtilsTest[jvm] > geoChatSenderUid handles missing second segment gracefully()[jvm] PASSED - -XmlUtilsTest[jvm] > geoChatSenderUid returns original string for non-GeoChat UID()[jvm] PASSED - -XmlUtilsTest[jvm] > xmlEscaped leaves clean strings unchanged()[jvm] PASSED - -XmlUtilsTest[jvm] > xmlEscaped escapes less-than()[jvm] PASSED - -XmlUtilsTest[jvm] > xmlEscaped escapes all special chars in one string()[jvm] PASSED - -XmlUtilsTest[jvm] > xmlEscaped escapes ampersand()[jvm] PASSED - -XmlUtilsTest[jvm] > geoChatMessageId handles single-segment GeoChat UID gracefully()[jvm] PASSED - -XmlUtilsTest[jvm] > xmlEscaped escapes ampersand before other entities to avoid double-escaping()[jvm] PASSED - -XmlUtilsTest[jvm] > geoChatSenderUid extracts sender from GeoChat UID()[jvm] PASSED - -XmlUtilsTest[jvm] > xmlEscaped escapes double quote()[jvm] PASSED - -XmlUtilsTest[jvm] > geoChatMessageId extracts messageId from GeoChat UID()[jvm] PASSED - -XmlUtilsTest[jvm] > geoChatMessageId returns original string for non-GeoChat UID()[jvm] PASSED - -XmlUtilsTest[jvm] > xmlEscaped escapes single quote()[jvm] PASSED - -TAKServerManagerTest[jvm] > start failure due to port conflict reports an error state()[jvm] PASSED - -TAKServerManagerTest[jvm] > broadcastRawXml forwards to TAKServer when running()[jvm] PASSED - -TAKServerManagerTest[jvm] > offline queue replays messages in order on client reconnect()[jvm] PASSED - -TAKServerManagerTest[jvm] > offline queue expires messages after 5 minute TTL()[jvm] PASSED - -TAKServerManagerTest[jvm] > next start waits for stale start cleanup()[jvm] PASSED - -TAKServerManagerTest[jvm] > start failure clears onMessage callback()[jvm] PASSED - -TAKServerManagerTest[jvm] > broadcastRawXml is no-op when not running()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > publishes eligible nodes once enabled()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > stationary nodes are refreshed before their markers go stale()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > disabling the preference stops publishing()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > a connecting client gets a full replay()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > skips ineligible nodes()[jvm] PASSED - -TAKServerManagerTest[jvm] > offline queue caps at 50 messages with FIFO eviction()[jvm] PASSED - -TAKServerManagerTest[jvm] > broadcast is no-op after failed start()[jvm] PASSED - -TAKServerManagerTest[jvm] > broadcast goes directly to TAK server when clients connected()[jvm] PASSED - -TakV2CompressorBoundaryTest[jvm] > MAX_DECOMPRESSED_SIZE is bounded to prevent memory exhaustion()[jvm] PASSED - -TakV2CompressorBoundaryTest[jvm] > MAX_DECOMPRESSED_SIZE is greater than mesh MTU()[jvm] PASSED - -TakV2CompressorBoundaryTest[jvm] > uncompressed marker is 0xFF()[jvm] PASSED - -TakV2CompressorBoundaryTest[jvm] > dictionary IDs are correctly assigned()[jvm] PASSED - -TakV2CompressorBoundaryTest[jvm] > MAX_DECOMPRESSED_SIZE is 4096 bytes()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > stays silent while the preference is off()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > a moved node is rebroadcast()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > does not publish without a connected TAK client()[jvm] PASSED - -MeshToCotBroadcasterTest[jvm] > an unchanged node is not rebroadcast()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > inbound packet on unrelated port is ignored()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > configured takServerChannel is applied to V1 sends()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > unknown firmware uses V1 protocol()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > legacy firmware drops non-PLI non-GeoChat types()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > stripNonEssentialElements preserves TAK-Talk voice and marti()[jvm] PASSED - -> Task :core:service:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/androidHostTest/kotlin/org/meshtastic/core/service/MeshNotificationManagerImplConversationTest.kt:255:38 'fun getParcelableArray(p0: String?): Array<(out) Parcelable!>?' is deprecated. Deprecated in Java. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/androidHostTest/kotlin/org/meshtastic/core/service/MeshNotificationManagerImplConversationTest.kt:256:38 'fun getParcelableArray(p0: String?): Array<(out) Parcelable!>?' is deprecated. Deprecated in Java. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/androidHostTest/kotlin/org/meshtastic/core/service/MeshNotificationManagerImplConversationTest.kt:324:41 'fun getParcelableArray(p0: String?): Array<(out) Parcelable!>?' is deprecated. Deprecated in Java. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:225:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:230:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:254:17 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt:259:17 Expression is unused. - -> Task :core:takserver:testAndroidHostTest - -TAKPacketV2RawDetailTest > raw_detail_path_emits_only_the_raw_bytes_inside_detail_no_duplicate_structured_elements PASSED - -TAKPacketV2RawDetailTest > udcc_round_trips_via_raw_detail PASSED - -XmlUtilsTest > geoChatSenderUid handles missing second segment gracefully PASSED - -XmlUtilsTest > geoChatSenderUid returns original string for non-GeoChat UID PASSED - -XmlUtilsTest > xmlEscaped leaves clean strings unchanged PASSED - -XmlUtilsTest > xmlEscaped escapes less-than PASSED - -XmlUtilsTest > xmlEscaped escapes all special chars in one string PASSED - -XmlUtilsTest > xmlEscaped escapes ampersand PASSED - -XmlUtilsTest > geoChatMessageId handles single-segment GeoChat UID gracefully PASSED - -XmlUtilsTest > xmlEscaped escapes ampersand before other entities to avoid double-escaping PASSED - -XmlUtilsTest > geoChatSenderUid extracts sender from GeoChat UID PASSED - -XmlUtilsTest > xmlEscaped escapes double quote PASSED - -XmlUtilsTest > geoChatMessageId extracts messageId from GeoChat UID PASSED - -XmlUtilsTest > geoChatMessageId returns original string for non-GeoChat UID PASSED - -XmlUtilsTest > xmlEscaped escapes single quote PASSED - -> Task :androidApp:mergeFdroidDebugJavaResource - -> Task :core:takserver:jvmTest - -TAKMeshIntegrationTest[jvm] > configured takServerChannel is applied to V2 sends()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > stop cancels jobs and stops TAKServerManager()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > start launches TAKServerManager()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > legacy firmware sends on V1 port 72()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > compressed V1 packet is still broadcast on a V2 radio()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > double start is idempotent()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > inbound V1 PLI packet is broadcast to TAK clients()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > compressed V1 packet is dropped on a legacy radio()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > V2-capable firmware sends V2 protocol()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > default outbound channel is the primary channel()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > GeoChat without callsign is enriched from client info()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > v1 drop of an unsupported CoT type is schema-limited()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > stop then inbound TAK message does not forward to mesh()[jvm] PASSED - -TAKMeshIntegrationTest[jvm] > v1 drop of an oversize but schema-representable PLI is NOT schema-limited()[jvm] PASSED - -TakMeshTestRunnerTest[jvm] > v2 pass sends on ATAK_PLUGIN_V2 regardless of connected firmware()[jvm] PASSED - -> Task :androidApp:bundleFdroidDebugClassesToRuntimeJar -> Task :androidApp:bundleFdroidDebugClassesToCompileJar - -> Task :core:takserver:jvmTest - -TakMeshTestRunnerTest[jvm] > v1 pass sends on legacy ATAK_PLUGIN regardless of connected firmware()[jvm] PASSED - -TakMeshTestRunnerTest[jvm] > v1 pass reports non-PLI non-chat drops as expected not as failures()[jvm] PASSED - -TakMeshTestRunnerTest[jvm] > runAll exercises every fixture on both v1 and v2()[jvm] PASSED - -> Task :androidApp:kspFdroidDebugUnitTestKotlin - -> Task :core:testing:jvmTest - -FakeRadioInterfaceServiceSessionTest[jvm] > recorded radio writes are isolated from caller mutation()[jvm] PASSED - -FakeRadioInterfaceServiceSessionTest[jvm] > trySendToRadio records bytes only while a session is admitted()[jvm] PASSED - -FakeRadioInterfaceServiceSessionTest[jvm] > trySendToRadio can reject an admitted transport handoff without recording bytes()[jvm] PASSED - -FakeRadioInterfaceServiceSessionTest[jvm] > selection does not admit a session and every connected start advances generation()[jvm] PASSED - -FakeRadioInterfaceServiceSessionTest[jvm] > disconnect closes admission and waits for admitted fake session work()[jvm] PASSED - -> Task :desktopApp:compileKotlin -> Task :desktopApp:compileJava NO-SOURCE -> Task :desktopApp:classes - -> Task :core:takserver:jvmTest - -TakMeshTestRunnerTest[jvm] > v2 pass has no expected drops - v2 must support every fixture type()[jvm] PASSED - -> Task :desktopApp:jar - -> Task :core:service:jvmTest - -BootReconnectDecisionTest[jvm] > a BLE device is not reconnected without the Bluetooth permission()[jvm] PASSED - -BootReconnectDecisionTest[jvm] > no persisted device means nothing to reconnect()[jvm] PASSED - -BootReconnectDecisionTest[jvm] > a bonded BLE device reconnects when the permission is held()[jvm] PASSED - -BootReconnectDecisionTest[jvm] > TCP and USB devices reconnect regardless of the Bluetooth permission()[jvm] PASSED - -LockdownPassphraseStoreImplTest[jvm] > save get and clear passphrase round trips on jvm()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB replug of selected serial device restarts transport when zombie()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > setDeviceAddress with the same address preserves the pending gatt cache invalidation flag()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB disconnect before detach emission waits for absent to present replug()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB recovery arm clears across explicit disconnect before reconnect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport after connect closes old transport and creates fresh one()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > network available recovery does not restart transport after setDeviceAddress deselect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > inbound data resets liveness timer so timeout does not fire()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport is a no-op after explicit disconnect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > transport teardown drains a synchronously admitted send before close()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport is a no-op after setDeviceAddress null()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > ordered session lane serializes handshake work while independent leases remain concurrent()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport is a no-op after setDeviceAddress n()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > wedged session handler is cancelled at the timeout and the pipeline continues()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsCommitsAfterWriteFailureAndRethrowsOriginal()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport is a no-op when transport is environmentally stopped but connection remains requested()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > network available recovery does not restart transport after explicit disconnect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE state recovery does not restart transport after explicit disconnect()[jvm] PASSED - -RadioControllerImplTest[jvm] > connectionStateAndClientNotificationDelegateToServiceRepository()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > transport factory failure revokes admitted session and retry uses a fresh generation()[jvm] PASSED - -RadioControllerImplTest[jvm] > stopProvideLocationDelegatesToLocationManager()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > transport admission is closed after disconnect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE liveness restart does not emit permanent Disconnected()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE liveness restart does not emit user-facing connection error()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testRepeatedStartStopDoesNotAccumulateCollectors()[jvm] PASSED - -RadioControllerImplTest[jvm] > setFavoriteSendsAdminAndUpdatesState()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsDoesNotSuppressCommitFailureCausedByBlockFailure()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE liveness timeout closes old transport and creates fresh one()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsSuppressesCommitFailureOnBlockFailure()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE repeated liveness checks do not stack restarts()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > setDeviceAddress contains factory failure and same-address repair can retry()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testStartIsIdempotent()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB replug of unrelated serial device does not restart transport()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testStartCallsSwitchActiveDatabase()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport does not emit user-facing connection error()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > frames dropped by a full receive queue do not reset the liveness timer()[jvm] PASSED - -RadioControllerImplTest[jvm] > collectorStartupDoesNotMissFirstSessionGenerationBoundary()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport coordinates with in-flight liveness restart via isRestarting()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE in-flight liveness restart prevents overlapping restart via isRestarting()[jvm] PASSED - -RadioControllerImplTest[jvm] > fixedPositionPropagatesQueueRejection()[jvm] PASSED - -RadioControllerImplTest[jvm] > importContactPreservesEncodedVerificationState()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsReportsFailedCommitAfterOrderedWrites()[jvm] PASSED - -RadioControllerImplTest[jvm] > nodedbResetSendsAdminMessage()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsRejectsTransportStopBeforeCommitTransmission()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsDoesNotTreatDestinationZeroAsLocalWhenNodeIdentityIsUnknown()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > setDeviceAddress after deselect preserves pending gatt cache invalidation flag()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > transport session diagnostic redacts its address()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB replug recovers when presence arrives before DeviceSleep()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport preserves selected device address()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE liveness does not fire when connection state is not Connected()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAcceptsCapturedDisconnectAfterFastReconnect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB replug does not restart transport after explicit disconnect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > transport teardown remains cancellation safe while draining existing session leases()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > gatt cache invalidation flag is consumed once and cleared on disconnect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > non-BLE transport liveness timeout does not close transport or change state()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testTakServerCanRetryAfterFailedStart()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testStopStopsTakServerWhileStarting()[jvm] PASSED - -RadioControllerImplTest[jvm] > staleAddressIdentityCannotAssociateSelectedTransport()[jvm] PASSED - -RadioControllerImplTest[jvm] > setIgnoredSendsAdminUpdatesStateAndFiltersPackets()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE environmental recovery restarts transport while connection is still desired()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE state recovery does not restart transport after setDeviceAddress deselect()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE liveness restart contains factory failure and a later connect can retry()[jvm] PASSED - -RadioControllerImplTest[jvm] > concurrentDeviceSelectionsAreSerialized()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > transport rejection is reported to the caller()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > heartbeat cannot bypass transport admission while teardown drains a session lease()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAcceptsDeviceSleepAsPostDispatchDeparture()[jvm] PASSED - -RadioControllerImplTest[jvm] > sendSharedContactRejectsNodeWithNoPublicKey()[jvm] PASSED - -RadioControllerImplTest[jvm] > setDeviceAddressDoesNotPersistOrReportSuccessWhenPreferenceMatchesButTransportRejects()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB replug duplicate same-key emissions produce exactly one restart()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > restartTransport does not emit permanent Disconnected()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsCommitsWhenCallerIsCancelled()[jvm] PASSED - -RadioControllerImplTest[jvm] > sendReactionFallsBackToQueuedWhenSenderLeavesStatusNull()[jvm] PASSED - -RadioControllerImplTest[jvm] > editLocalSettingsFailsBeforeBeginWhenNodeIdentityIsUnknown()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsDoesNotTreatLocalDepartureAsRemoteCommitAcceptance()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > disconnect completes after a wedged handler is timed out()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > BLE liveness restart does not send polite disconnect into zombie transport()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB replug does not restart transport when already Connected()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > setDeviceAddress with a different address clears the pending gatt cache invalidation flag()[jvm] PASSED - -RadioControllerImplTest[jvm] > setDeviceAddressSwitchesDatabaseAndTransport()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB initial empty presence does not arm recovery()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > tcpReconnectWarnsAndStillConnectsWhenLocalNetworkAccessIsMissing()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testConnectedWhileStoppedDoesNotRestartWithoutExplicitStart()[jvm] PASSED - -SharedRadioInterfaceServiceLivenessTest[jvm] > USB permission denial emits error and permanent disconnected state()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testStartDrainsReceivedBufferBeforeAttachingCollector()[jvm] PASSED - -RadioControllerImplTest[jvm] > setDeviceAddressRestoresPreviousSelectionWhenTransportRejectsNewAddress()[jvm] PASSED - -RadioControllerImplTest[jvm] > sendReactionDoesNotPersistWhenQueueRejects()[jvm] PASSED - -RadioControllerImplTest[jvm] > sessionChangeCancelsInFlightAssociation()[jvm] PASSED - -RadioControllerImplTest[jvm] > factoryResetSendsAdminMessage()[jvm] PASSED - -RadioControllerImplTest[jvm] > samePhysicalIdentityAssociatesEachAddressBoundSession()[jvm] PASSED - -RadioControllerImplTest[jvm] > setDeviceAddressUsesTransportSnapshotWhenPreferenceFlowLags()[jvm] PASSED - -RadioControllerRestoreTest[jvm] > restoreLocalConfigurationWaitsForDeviceSelectionAndRejectsThePreviousDevice()[jvm] PASSED - -RadioControllerRestoreTest[jvm] > restoreLocalConfigurationRejectsStaleDeviceOwnershipBeforeWriting()[jvm] PASSED - -RadioControllerRestoreTest[jvm] > restoreLocalConfigurationRejectsMissingDeviceOwnershipBeforeWriting()[jvm] PASSED - -RadioControllerImplTest[jvm] > setHamModeSendsAdminWithEchoedLoraValuesAndUpdatesUser()[jvm] PASSED - -RadioControllerRestoreTest[jvm] > restoreLocalConfigurationUsesOneEditTransactionInChannelThenConfigOrder()[jvm] PASSED - -ServiceRepositoryImplTest[jvm] > duplicateConnectionStatesDoNotAdvanceEpochs()[jvm] PASSED - -ServiceRepositoryImplTest[jvm] > initialStateExposesDefaultsAndNoBufferedEvents()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > queuedMyNodeInfoFromOldSessionIsDiscardedAfterSameAddressReconnect()[jvm] PASSED - -ServiceRepositoryImplTest[jvm] > setConnectionStateUpdatesStateFlow()[jvm] PASSED - -ServiceRepositoryImplTest[jvm] > setTracerouteResponseEmitsAndCanBeCleared()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testTakServerStartsAndStopsWithPreference()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > tcpReconnectConnectsWithoutAWarningWhenLocalNetworkAccessIsHeld()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsRetainsInterleavedStagedLocalProjections()[jvm] PASSED - -ServiceRepositoryImplTest[jvm] > setErrorMessageEmitsAndCanBeCleared()[jvm] PASSED - -RadioControllerImplTest[jvm] > setDeviceAddressSkipsSwitchWhenAddressUnchanged()[jvm] PASSED - -ServiceRepositoryImplTest[jvm] > connectionEpochsPreserveRapidDepartureAndHandshakeTransitions()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > nonTcpReconnectIsUnaffectedByLocalNetworkAccess()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsRejectsDepartureThatArrivesAfterCommitDepartureTimeout()[jvm] PASSED - -RadioControllerImplTest[jvm] > toggleMutedSendsAdminAndUpdatesState()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testFromRadioCollectorsTornDownOnStopAndRestartedCleanlyOnStart()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testConnectionErrorForwardedToServiceRepository()[jvm] PASSED - -RadioControllerImplTest[jvm] > setDeviceAddressRestoresPreviousSelectionWhenInitializationFails()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testStartWiresComponents()[jvm] PASSED - -RadioControllerImplTest[jvm] > removeByNodenumRetainsLocalRemovalWhenAdminQueueRejects()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > frameIsDiscardedAfterAdmissionClosesEvenWhileLifecycleTokenIsDraining()[jvm] PASSED - -MeshServiceOrchestratorTest[jvm] > testCurrentDeviceAddressChangeSwitchesActiveDatabaseAfterStart()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAcceptsConnectingAsPostDispatchDeparture()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsSuppressesDistinctCommitFailureWithSameSignature()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsRejectsTransportStopWithoutObservedDeparture()[jvm] PASSED - -RadioControllerImplTest[jvm] > removeByNodenumAlwaysRemovesLocallyAndSendsAdminWhenConnected()[jvm] PASSED - -RadioControllerImplTest[jvm] > removeByNodenumRemovesLocallyEvenWhenDisconnected()[jvm] PASSED - -RadioControllerImplTest[jvm] > editLocalSettingsChannelWritesDoNotMirrorToLocalCache()[jvm] PASSED - -RadioControllerImplTest[jvm] > nodeManagementReturnsEarlyWhenMyNodeNumIsNull()[jvm] PASSED - -RadioControllerImplTest[jvm] > sendMessageDoesNotPersistWhenQueueRejects()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAwaitsBoundariesAroundOrderedWrites()[jvm] PASSED - -RadioControllerImplTest[jvm] > setHamModeWithNoCachedLoraConfigSendsProtoDefaults()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsDiscardsStagedLocalProjectionsWhenCommitFails()[jvm] PASSED - -RadioControllerImplTest[jvm] > setFavoriteIsNoOpWhenAlreadyInRequestedState()[jvm] PASSED - -RadioControllerImplTest[jvm] > setDeviceAddressFailsClosedWhenDatabaseRollbackFails()[jvm] PASSED - -RadioControllerImplTest[jvm] > rebootSendsAdminMessageWithDelay()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAcceptsDispatchedCommitWhenLocalTransportDeparts()[jvm] PASSED - -RadioControllerImplTest[jvm] > importContactReturnsEarlyWhenDisconnected()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsWaitsForCanonicalDepartureAfterTransportStops()[jvm] PASSED - -RadioControllerImplTest[jvm] > freshIdentityPublishedBeforeBoundaryCollectorRunsIsPreserved()[jvm] PASSED - -RadioControllerImplTest[jvm] > requestConfigOperationsDelegateToCommandSender()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsRejectsFailedBeginBeforeRunningWrites()[jvm] PASSED - -RadioControllerImplTest[jvm] > sameAddressReconnectRejectsOldGenerationUntilFreshIdentityArrives()[jvm] PASSED - -RadioControllerImplTest[jvm] > localChannelDoesNotPersistWhenQueueRejects()[jvm] PASSED - -RadioControllerImplTest[jvm] > freshAddressBoundIdentityAssociatesExactlyOnceWithNodeFallback()[jvm] PASSED - -RadioControllerImplTest[jvm] > setHamModeWithoutALongNameNamesTheNodeAfterTheCallSignAlone()[jvm] PASSED - -RadioControllerImplTest[jvm] > shutdownSendsAdminMessage()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAcceptsDepartureThatArrivesWithinCommitDepartureTimeout()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsRejectsTimedOutCommitWithoutObservedDeparture()[jvm] PASSED - -RadioControllerImplTest[jvm] > setTimeSendsAdminMessageWithCurrentEpochSeconds()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsContinuesLocalProjectionReconciliationAfterProjectionFailure()[jvm] PASSED - -RadioControllerImplTest[jvm] > sendSharedContactCallsCommandSenderAdminAwait()[jvm] PASSED - -RadioControllerImplTest[jvm] > sendMessageDelegatesToCommandSender()[jvm] PASSED - -RadioControllerImplTest[jvm] > sendReactionPersistsToDatabase()[jvm] PASSED - -RadioControllerImplTest[jvm] > delayedOldIdentityCannotPairWithNewAddress()[jvm] PASSED - -RadioControllerImplTest[jvm] > importContactSendsAdminAndUpdatesNodeManager()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsDoesNotAcceptDepartureFromQueuedPredecessorAsCommitEvidence()[jvm] PASSED - -RadioControllerImplTest[jvm] > setHamModeIgnoresRemoteDestinations()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsDiscardsStagedLocalProjectionsWhenBlockFails()[jvm] PASSED - -RadioControllerImplTest[jvm] > refreshMetadataSendsAdminWithWantResponse()[jvm] PASSED - -RadioControllerImplTest[jvm] > importContactRejectsEmptyPublicKey()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAppliesStagedLocalProjectionsOnlyAfterCommitAcceptance()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsAcceptsTimedOutCommitWhenLocalTransportDeparts()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsRejectsFixedPositionWriteBeforeDeviceMutationWhenLocalNodeIsUnavailable()[jvm] PASSED - -RadioControllerImplTest[jvm] > editSettingsDoesNotProjectZeroPositionWhenRemovingFixedPosition()[jvm] PASSED - -ServiceStayAliveDecisionTest[jvm] > selectedDeviceKeepsServiceAlive()[jvm] PASSED - -ServiceStayAliveDecisionTest[jvm] > noAddressDuringAnOperationStaysAlive()[jvm] PASSED - -ServiceStayAliveDecisionTest[jvm] > blankAddressWithNothingRunningStops()[jvm] PASSED - -ServiceStayAliveDecisionTest[jvm] > selectedDeviceWinsOverOperation()[jvm] PASSED - -ServiceStayAliveDecisionTest[jvm] > deselectedWithNothingRunningStops()[jvm] PASSED - -ServiceStayAliveDecisionTest[jvm] > deselectedDuringAnOperationStaysAlive()[jvm] PASSED - -> Task :androidApp:mergeLibDexFdroidDebug -> Task :androidApp:mergeLibDexGoogleDebug -> Task :androidApp:jacocoFdroidDebug - -> Task :core:takserver:testAndroidHostTest - -CoTXmlFrameBufferTest > extracts multiple concatenated events PASSED - -CoTXmlFrameBufferTest > preserves partial event until completed PASSED - -CoTXmlFrameBufferTest > drops oversized partial buffer PASSED - -CoTXmlParserTest > parsedDetailXml is null for self-closed detail element PASSED - -MeshToCotBroadcasterTest > publishes eligible nodes once enabled PASSED - -MeshToCotBroadcasterTest > stationary nodes are refreshed before their markers go stale PASSED - -MeshToCotBroadcasterTest > disabling the preference stops publishing PASSED - -MeshToCotBroadcasterTest > a connecting client gets a full replay PASSED - -MeshToCotBroadcasterTest > skips ineligible nodes PASSED - -MeshToCotBroadcasterTest > stays silent while the preference is off PASSED - -MeshToCotBroadcasterTest > a moved node is rebroadcast PASSED - -MeshToCotBroadcasterTest > does not publish without a connected TAK client PASSED - -MeshToCotBroadcasterTest > an unchanged node is not rebroadcast PASSED - -TAKServerManagerTest > start failure due to port conflict reports an error state PASSED - -TAKServerManagerTest > broadcastRawXml forwards to TAKServer when running PASSED - -TAKServerManagerTest > offline queue replays messages in order on client reconnect PASSED - -TAKServerManagerTest > offline queue expires messages after 5 minute TTL PASSED - -TAKServerManagerTest > next start waits for stale start cleanup PASSED - -TAKServerManagerTest > start failure clears onMessage callback PASSED - -TAKServerManagerTest > broadcastRawXml is no-op when not running PASSED - -TAKServerManagerTest > offline queue caps at 50 messages with FIFO eviction PASSED - -TAKServerManagerTest > broadcast is no-op after failed start PASSED - -TAKServerManagerTest > broadcast goes directly to TAK server when clients connected PASSED - -CoTXmlParserTest > sourceEventXml captures the complete original event verbatim PASSED - -CoTXmlParserTest > parsedDetailXml preserves structural elements from unmapped types PASSED - -CoTXmlParserTest > test successful CoT XML parsing PASSED - -CoTXmlParserTest > test invalid CoT XML parsing falls back to failure PASSED - -CoTXmlParserTest > test defaults applied when optional fields missing PASSED - -TAKDefaultsTest > toTakRoleName returns default for TeamMember PASSED - -TAKDefaultsTest > keepalive interval is below ATAK stale threshold PASSED - -TAKDefaultsTest > toTakTeamName returns default for null PASSED - -TAKDefaultsTest > toTakCallsign falls back to id when both names are blank PASSED - -TAKDefaultsTest > toTakRoleName converts TeamLead PASSED - -TAKDefaultsTest > toTakTeamName converts Red PASSED - -TAKDefaultsTest > toTakTeamName replaces underscores with spaces PASSED - -TAKDefaultsTest > toTakRoleName returns default for Unspecifed PASSED - -TAKDefaultsTest > toTakRoleName returns default for null PASSED - -TAKDefaultsTest > toTakTeamName converts Blue PASSED - -TAKDefaultsTest > toTakCallsign falls back to long_name when short_name is blank PASSED - -TAKDefaultsTest > toTakTeamName returns default for Unspecifed_Color PASSED - -TAKDefaultsTest > toTakRoleName falls back to enum name for other roles PASSED - -TAKDefaultsTest > toTakCallsign prefers short_name PASSED - -TAKDefaultsTest > toTakRoleName converts ForwardObserver PASSED - -CoTXmlTest > toXml does not include XML declaration - CoT stream protocol PASSED - -CoTXmlTest > toXml includes remarks when present PASSED - -CoTXmlTest > toXml escapes special characters in UID PASSED - -CoTXmlTest > toXml omits optional elements when null PASSED - -CoTXmlTest > toXml produces parseable XML for a chat message PASSED - -CoTXmlTest > toXml escapes special characters in callsign PASSED - -CoTXmlTest > toXml produces parseable XML for a PLI message PASSED - -TakMeshTestRunnerTest > v2 pass sends on ATAK_PLUGIN_V2 regardless of connected firmware PASSED - -TakMeshTestRunnerTest > v1 pass sends on legacy ATAK_PLUGIN regardless of connected firmware PASSED - -TAKMeshIntegrationTest > inbound packet on unrelated port is ignored PASSED - -TakMeshTestRunnerTest > v1 pass reports non-PLI non-chat drops as expected not as failures PASSED - -TAKMeshIntegrationTest > configured takServerChannel is applied to V1 sends PASSED - -TAKMeshIntegrationTest > unknown firmware uses V1 protocol PASSED - -TAKMeshIntegrationTest > legacy firmware drops non-PLI non-GeoChat types PASSED - -TAKMeshIntegrationTest > stripNonEssentialElements preserves TAK-Talk voice and marti PASSED - -> Task :androidApp:compileGoogleDebugKotlin -> Task :androidApp:compileFdroidDebugUnitTestKotlin -> Task :androidApp:compileFdroidDebugUnitTestJavaWithJavac NO-SOURCE -> Task :androidApp:processFdroidDebugUnitTestJavaRes - -> Task :core:testing:jvmTest - -RepositoryFakesTest[jvm] > FakeCommandSender accepts local-node failures on command paths()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeCommandSender mirrors rejected data admission()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioConfigRepository tracks channel set and module config()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeQuickChatActionRepository delete compacts positions()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController rejects edit settings before running writes when begin fails()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController preserves configuration and fixed-position evidence until reset()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeCommandSender records retryable admin and telemetry requests and clears them on reset()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController records owner destinations consistently()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeTracerouteSnapshotRepository roundtrips positions keyed by log uuid()[jvm] PASSED - -RepositoryFakesTest[jvm] > service repository fake preserves connection epoch semantics()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeDeviceHardwareRepository returns seeded hardware and records calls()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController uses null destination consistently for local config writes()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeDatabaseManager associates only the active address()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeCommandSender applies command failure before immediate command mutation()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController reset clears begin-boundary failure hook()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeFirmwareReleaseRepository emits stable and alpha releases()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController does not suppress a recovered copy of the block failure()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeCommandSender applies command failure before data mutation()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController preserves a distinct same-looking commit failure()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController commits after block failure and preserves failure precedence()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioTransport is terminal after close()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeCommandSender records connection ownership on post-handshake requests()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeCommandSender mirrors queued status after successful admission()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeRadioController scopes standalone hooks per write()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeCommandSender rejects data packets without a port number before assigning an id()[jvm] PASSED - -RepositoryFakesTest[jvm] > FakeQuickChatActionRepository upsert delete and reorder()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > observeNeverSubscribeStillExposesNotifications()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > observeNeverSubscribeDoesNotInvokeOnSubscription()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > observeExceptionCausesFlowException()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > readExceptionIsThrownAndReset()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > observeExceptionByCharacteristicInTwoArgAlsoThrowsBeforeSubscription()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > observeExceptionByCharacteristicOnlyFailsTargetCharacteristic()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > writeExceptionIsPersistent()[jvm] PASSED - -FakeBleServiceFailureInjectionTest[jvm] > observeBeforeSubscriptionExceptionDoesNotInvokeOnSubscription()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > clearNodeDB preserves favorites()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > getUnknownNodes returns nodes with UNSET hw_model()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > getNodes filtering by onlyDirect()[jvm] PASSED - -FakeRadioControllerRestoreTest[jvm] > restoreRejectsMissingSelectedDeviceOwnership()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > getNodes sorting by name()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > deleteNodes removes multiple nodes()[jvm] PASSED - -FakeRadioControllerRestoreTest[jvm] > restoreSerializesWithDeviceSelection()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > getNodes filtering by onlyOnline()[jvm] PASSED - -FakeRadioControllerRestoreTest[jvm] > restorePropagatesConfigFailureAfterChannelWrite()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > setNodeNotes persists notes()[jvm] PASSED - -FakeRadioControllerRestoreTest[jvm] > restoreRequiresSelectedDeviceOwnership()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > getNodes filtering by onlyDirect drops an mqtt node at zero hops()[jvm] PASSED - -FakeRadioControllerRestoreTest[jvm] > resetClearsRestoreSessionState()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > insertMetadata updates node metadata()[jvm] PASSED - -FakeNodeRepositoryTest[jvm] > reset clears all state()[jvm] PASSED - -> Task :desktopApp:compileTestKotlin -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/desktopApp/src/test/kotlin/org/meshtastic/desktop/notification/DesktopNotificationManagerTest.kt:97:42 Unnecessary non-null assertion (!!) on a non-null receiver of type 'Notification'. - -> Task :desktopApp:compileTestJava NO-SOURCE -> Task :desktopApp:testClasses UP-TO-DATE - -> Task :core:takserver:testAndroidHostTest - -TakMeshTestRunnerTest > runAll exercises every fixture on both v1 and v2 PASSED - -TAKMeshIntegrationTest > configured takServerChannel is applied to V2 sends PASSED - -TAKMeshIntegrationTest > stop cancels jobs and stops TAKServerManager PASSED - -TAKMeshIntegrationTest > start launches TAKServerManager PASSED - -TAKMeshIntegrationTest > legacy firmware sends on V1 port 72 PASSED - -TAKMeshIntegrationTest > compressed V1 packet is still broadcast on a V2 radio PASSED - -TAKMeshIntegrationTest > double start is idempotent PASSED - -TAKMeshIntegrationTest > inbound V1 PLI packet is broadcast to TAK clients PASSED - -TAKMeshIntegrationTest > compressed V1 packet is dropped on a legacy radio PASSED - -TakMeshTestRunnerTest > v2 pass has no expected drops - v2 must support every fixture type PASSED - -TAKMeshIntegrationTest > V2-capable firmware sends V2 protocol PASSED - -TAKMeshIntegrationTest > default outbound channel is the primary channel PASSED - -TAKMeshIntegrationTest > GeoChat without callsign is enriched from client info PASSED - -TAKMeshIntegrationTest > v1 drop of an unsupported CoT type is schema-limited PASSED - -TAKMeshIntegrationTest > stop then inbound TAK message does not forward to mesh PASSED - -TAKMeshIntegrationTest > v1 drop of an oversize but schema-representable PLI is NOT schema-limited PASSED - -TakV2CompressorBoundaryTest > MAX_DECOMPRESSED_SIZE is bounded to prevent memory exhaustion PASSED - -TakV2CompressorBoundaryTest > MAX_DECOMPRESSED_SIZE is greater than mesh MTU PASSED - -TakV2CompressorBoundaryTest > uncompressed marker is 0xFF PASSED - -TakV2CompressorBoundaryTest > dictionary IDs are correctly assigned PASSED - -TakV2CompressorBoundaryTest > MAX_DECOMPRESSED_SIZE is 4096 bytes PASSED - -CoTConversionTest > testUserToCoTMessage PASSED - -CoTConversionTest > testPositionToCoTMessage PASSED - -CotDeliveryDedupTest > same uid but changed content is not a duplicate PASSED - -CotDeliveryDedupTest > duplicate is re-admitted once the TTL window elapses PASSED - -CotDeliveryDedupTest > distinct events are all admitted PASSED - -CotDeliveryDedupTest > cache is bounded by maxEntries and evicts oldest PASSED - -CotDeliveryDedupTest > first sighting admitted then immediate exact repeat dropped PASSED - -TAKPacketConversionTest > testTAKPacketToCoTMessagePLI PASSED - -TAKPacketConversionTest > testChatSmugglesMessageId PASSED - -TAKPacketConversionTest > testCoTToTAKPacketPLI PASSED - -TAKPacketConversionTest > testCoTToTAKPacketChat PASSED - -TAKPacketConversionTest > testParseSmuggledMessageId PASSED - -TakV2CompressorTaktalkTest > y- taktalk room broadcast round-trips with participant list PASSED - -TakV2CompressorTaktalkTest > m-t-t taktalk message round-trips with voice marker PASSED - -TakV2CompressorTaktalkTest > b-t-f chat carries TAKTALK sidecars through compressor PASSED - -TakV2CompressorTaktalkTest > m-t-t taktalk text-only message has from_voice false PASSED - -TakV2CompressorTaktalkTest > b-t-f chat without TAKTALK sidecars leaves them null on the wire PASSED - -TakV2CompressorTaktalkTest > m-t-t with marti round-trips dest callsigns and survives compression PASSED - -> Task :androidApp:dexBuilderFdroidDebug -> Task :core:takserver:allTests -> Task :marketing-screenshots:compileKotlin -> Task :marketing-screenshots:compileJava NO-SOURCE -> Task :marketing-screenshots:classes UP-TO-DATE -> Task :marketing-screenshots:jar UP-TO-DATE -> Task :marketing-screenshots:compileTestKotlin NO-SOURCE -> Task :marketing-screenshots:compileTestJava NO-SOURCE -> Task :marketing-screenshots:testClasses UP-TO-DATE -> Task :marketing-screenshots:test NO-SOURCE -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testFdroidDebugUnitTest - -SoftDeviceQuirkCoverageTest > every nrf52840 model in the hardware catalog has a softdevice mapping PASSED - -SoftDeviceQuirkCoverageTest > every mapped target exists in the hardware catalog PASSED - -SoftDeviceQuirkCoverageTest > known-unmapped models are present but deliberately carry no softdevice PASSED - -SoftDeviceQuirkCoverageTest > every nrf52840 catalog target is covered by its model's row PASSED - -SoftDeviceQuirkCoverageTest > every softdevice value is one the app ships an erase image for PASSED - -SoftDeviceQuirkCoverageTest > mesh tracker x1 is mapped, since the web flasher omits it PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:compileGoogleDebugKotlin -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/component/WaypointMarkers.kt:91:13 Calling a Google Map Composable composable function where a UI Composable composable was expected -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:33:33 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:37:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:38:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:39:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:40:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:41:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:42:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:47:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:48:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:49:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:50:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:56:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:57:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:58:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:59:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:60:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:61:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/androidApp/src/google/kotlin/org/meshtastic/app/map/offline/pmtiles/VectorTile.kt:62:10 This declaration needs opt-in. Its usage should be marked with '@kotlinx.serialization.ExperimentalSerializationApi' or '@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)' - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by com.sun.jna.Native in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/5.19.1/ca303052cd617c1af2e2c8d344c98a706fb63143/jna-5.19.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testFdroidDebugUnitTest - -KoinVerificationTest > verifyKoinConfiguration PASSED - -KoinVerificationTest > verifyTypedBootstrapLoadsModuleGraph PASSED - -EnvironmentMetricsTest > temperature and soil temperature are converted to Fahrenheit when isFahrenheit is true PASSED - -> Task :core:ui:compileTestKotlinJvm -> Task :core:ui:compileJvmTestJava NO-SOURCE -> Task :core:ui:jvmTestClasses -> Task :androidApp:compileGoogleDebugJavaWithJavac -> Task :androidApp:processGoogleDebugJavaRes -> Task :core:service:testAndroidHostTest -> Task :desktopApp:test - -> Task :core:service:testAndroidHostTest - -AndroidFileServiceTest > testInitialization PASSED - -BootReconnectDecisionTest > a BLE device is not reconnected without the Bluetooth permission PASSED - -BootReconnectDecisionTest > no persisted device means nothing to reconnect PASSED - -BootReconnectDecisionTest > a bonded BLE device reconnects when the permission is held PASSED - -BootReconnectDecisionTest > TCP and USB devices reconnect regardless of the Bluetooth permission PASSED - -AndroidLocationServiceTest > testInitialization PASSED - -MeshNotificationManagerImplTest > service state rendering is deferred from the caller PASSED - -> Task :feature:connections:compileTestKotlinJvm -> Task :feature:connections:compileAndroidHostTest - -> Task :core:testing:testAndroidHostTest - -RepositoryFakesTest > FakeCommandSender accepts local-node failures on command paths PASSED - -RepositoryFakesTest > FakeCommandSender mirrors rejected data admission PASSED - -RepositoryFakesTest > FakeRadioConfigRepository tracks channel set and module config PASSED - -RepositoryFakesTest > FakeQuickChatActionRepository delete compacts positions PASSED - -RepositoryFakesTest > FakeRadioController rejects edit settings before running writes when begin fails PASSED - -RepositoryFakesTest > FakeRadioController preserves configuration and fixed-position evidence until reset PASSED - -RepositoryFakesTest > FakeCommandSender records retryable admin and telemetry requests and clears them on reset PASSED - -RepositoryFakesTest > FakeRadioController records owner destinations consistently PASSED - -RepositoryFakesTest > FakeTracerouteSnapshotRepository roundtrips positions keyed by log uuid PASSED - -RepositoryFakesTest > service repository fake preserves connection epoch semantics PASSED - -RepositoryFakesTest > FakeDeviceHardwareRepository returns seeded hardware and records calls PASSED - -RepositoryFakesTest > FakeRadioController uses null destination consistently for local config writes PASSED - -RepositoryFakesTest > FakeDatabaseManager associates only the active address PASSED - -RepositoryFakesTest > FakeCommandSender applies command failure before immediate command mutation PASSED - -RepositoryFakesTest > FakeRadioController reset clears begin-boundary failure hook PASSED - -RepositoryFakesTest > FakeFirmwareReleaseRepository emits stable and alpha releases PASSED - -RepositoryFakesTest > FakeRadioController does not suppress a recovered copy of the block failure PASSED - -RepositoryFakesTest > FakeCommandSender applies command failure before data mutation PASSED - -RepositoryFakesTest > FakeRadioController preserves a distinct same-looking commit failure PASSED - -RepositoryFakesTest > FakeRadioController commits after block failure and preserves failure precedence PASSED - -RepositoryFakesTest > FakeRadioTransport is terminal after close PASSED - -RepositoryFakesTest > FakeCommandSender records connection ownership on post-handshake requests PASSED - -RepositoryFakesTest > FakeCommandSender mirrors queued status after successful admission PASSED - -RepositoryFakesTest > FakeRadioController scopes standalone hooks per write PASSED - -RepositoryFakesTest > FakeCommandSender rejects data packets without a port number before assigning an id PASSED - -RepositoryFakesTest > FakeQuickChatActionRepository upsert delete and reorder PASSED - -> Task :core:ui:compileKotlinIosSimulatorArm64 -> Task :androidApp:mergeProjectDexFdroidDebug - -> Task :core:ui:compileKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/ContactSharing.kt:50:32 Unnecessary safe call on a non-null receiver of type 'User'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/QrDialog.kt:196:60 'fun rememberPlainTooltipPositionProvider(spacingBetweenTooltipAndAnchor: Dp = ...): PopupPositionProvider' is deprecated. Deprecated in favor of rememberTooltipPositionProvider API. - -> Task :core:ui:iosSimulatorArm64MainKlibrary - -> Task :core:service:testAndroidHostTest - -MeshNotificationManagerImplTest > service state seeds local stats before the local node row is available PASSED - -MeshNotificationManagerImplTest > initChannels removes legacy categories and creates canonical channels PASSED - -MeshNotificationManagerImplTest > identical service state can repost after notifications are cleared PASSED - -MeshNotificationManagerImplTest > newer service state cancels a pending render PASSED - -MeshNotificationManagerImplTest > initial foreground notification uses an immediate Android label fallback PASSED - -ReplyReceiverTest > reply goes through SendMessageUseCase, marks read, and refreshes the notification in place PASSED - -ConversationShortcutPublisherTest > on-demand shortcut with a blank display name falls back instead of throwing PASSED - -ReplyReceiverTest > missing RemoteInput results does not send PASSED - -ReplyReceiverTest > notification is cancelled even when the send fails PASSED - -ConversationShortcutPublisherTest > shortcuts are ranked by recency across dms and channels PASSED - -ConversationShortcutPublisherTest > dm shortcuts carry node labels and the empty primary resolves to its preset name PASSED - -ConversationShortcutPublisherTest > stale shortcuts are removed when no longer part of the conversation set PASSED - -ConversationShortcutPublisherTest > on-demand shortcuts survive pruning until a snapshot includes their conversation PASSED - -MeshServiceOrchestratorTest > testRepeatedStartStopDoesNotAccumulateCollectors PASSED - -MeshServiceOrchestratorTest > testStartIsIdempotent PASSED - -MeshServiceOrchestratorTest > testStartCallsSwitchActiveDatabase PASSED - -MeshServiceOrchestratorTest > testTakServerCanRetryAfterFailedStart PASSED - -MeshServiceOrchestratorTest > testStopStopsTakServerWhileStarting PASSED - -MeshServiceOrchestratorTest > tcpReconnectWarnsAndStillConnectsWhenLocalNetworkAccessIsMissing PASSED - -MeshServiceOrchestratorTest > testConnectedWhileStoppedDoesNotRestartWithoutExplicitStart PASSED - -MeshServiceOrchestratorTest > testStartDrainsReceivedBufferBeforeAttachingCollector PASSED - -MeshServiceOrchestratorTest > queuedMyNodeInfoFromOldSessionIsDiscardedAfterSameAddressReconnect PASSED - -MeshServiceOrchestratorTest > testTakServerStartsAndStopsWithPreference PASSED - -MeshServiceOrchestratorTest > tcpReconnectConnectsWithoutAWarningWhenLocalNetworkAccessIsHeld PASSED - -MeshServiceOrchestratorTest > nonTcpReconnectIsUnaffectedByLocalNetworkAccess PASSED - -MeshServiceOrchestratorTest > testFromRadioCollectorsTornDownOnStopAndRestartedCleanlyOnStart PASSED - -MeshServiceOrchestratorTest > testConnectionErrorForwardedToServiceRepository PASSED - -MeshServiceOrchestratorTest > testStartWiresComponents PASSED - -MeshServiceOrchestratorTest > frameIsDiscardedAfterAdmissionClosesEvenWhileLifecycleTokenIsDraining PASSED - -MeshServiceOrchestratorTest > testCurrentDeviceAddressChangeSwitchesActiveDatabaseAfterStart PASSED - -SendMessageWorkerTest > a stalled radio send does not block an unrelated claimed row PASSED - -SendMessageWorkerTest > doWork returns success when packet is sent successfully PASSED - -SendMessageWorkerTest > doWork returns failure when packet id is missing PASSED - -SendMessageWorkerTest > doWork returns retry when radio is disconnected PASSED - -SendMessageWorkerTest > two queued rows with the same mesh packet id both survive and send PASSED - -SendMessageWorkerTest > legacy job fails without sending when packet id is ambiguous PASSED - -SendMessageWorkerTest > doWork returns retry and marks queued when send throws PASSED - -SendMessageWorkerTest > legacy and UUID jobs coexist without duplicate send PASSED - -AndroidMeshWorkerManagerTest > repeated persisted row scheduling keeps the active unique worker PASSED - -ForegroundStartPolicyTest > a device-address change while the app is visible is allowed PASSED - -ForegroundStartPolicyTest > connectedDevice alone is claimed without location permission PASSED - -ForegroundStartPolicyTest > a permitted background start never asks for a while-in-use restricted type PASSED - -ForegroundStartPolicyTest > a user-visible start is allowed on every platform PASSED - -ForegroundStartPolicyTest > boot completed keeps its exemption even though the process is not yet visible PASSED - -ForegroundStartPolicyTest > the fallback never claims a while-in-use restricted type PASSED - -ForegroundStartPolicyTest > before Android 12 every trigger may start in the background PASSED - -ForegroundStartPolicyTest > the fallback type is connectedDevice only PASSED - -ForegroundStartPolicyTest > connectedDevice is always claimed when types are supported PASSED - -ForegroundStartPolicyTest > a backgrounded device-address change is refused PASSED - -ForegroundStartPolicyTest > location is claimed for a foreground start on Android 14 and later PASSED - -ForegroundStartPolicyTest > location is claimed in the background before Android 14 PASSED - -ForegroundStartPolicyTest > no service type is claimed before Android 10 PASSED - -ForegroundStartPolicyTest > location is dropped for a background start from Android 14 PASSED - -NotificationTitleResourceTest > firmwareWorkOutranksAScan PASSED - -NotificationTitleResourceTest > firmwareMaintenanceIsReportedAsAFirmwareUpdate PASSED - -NotificationTitleResourceTest > noOperationLeavesTheConnectionStateTitleAlone PASSED - -NotificationTitleResourceTest > firmwareUpdateIsReported PASSED - -NotificationTitleResourceTest > discoveryScanIsReported PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testFdroidDebugUnitTest - -SitePlannerWebViewRecoveryTest > resources redirect race is recoverable PASSED - -ShareMessageDeepLinkTest > shared text round trips through the deep link query PASSED - -SitePlannerWebViewRecoveryTest > webview provider load failure wrapper is recoverable PASSED - -SitePlannerWebViewRecoveryTest > unrelated AndroidRuntimeException is not swallowed PASSED - -SitePlannerWebViewRecoveryTest > unrelated RuntimeException is not swallowed PASSED - -DeepLinkManifestConsistencyTest > every canonical segment is actually routed by DeepLinkRouter PASSED - -DeepLinkManifestConsistencyTest > app links intent filter declares a pathPrefix for every routed segment PASSED - -ShareMessageDeepLinkTest > share callback pending intent carries the encoded message deep link PASSED - -GlanceTrampolineManifestTest > invisible trampoline Glance actually uses is still declared and not exported PASSED - -GlanceTrampolineManifestTest > crash-on-launch activity trampoline is absent from the merged manifest PASSED - -KmlImportTest > a comma-decimal locale still emits valid json PASSED - -KmlImportTest > a kmz whose kml is not named doc is still found PASSED - -KmlImportTest > a kmz is unzipped and read PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:service:testAndroidHostTest - -ServiceRepositoryImplTest > duplicateConnectionStatesDoNotAdvanceEpochs PASSED - -ServiceRepositoryImplTest > initialStateExposesDefaultsAndNoBufferedEvents PASSED - -ServiceRepositoryImplTest > setConnectionStateUpdatesStateFlow PASSED - -ServiceRepositoryImplTest > setTracerouteResponseEmitsAndCanBeCleared PASSED - -ServiceRepositoryImplTest > setErrorMessageEmitsAndCanBeCleared PASSED - -ServiceRepositoryImplTest > connectionEpochsPreserveRapidDepartureAndHandshakeTransitions PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testFdroidDebugUnitTest - -FdroidBindingWinnerTest > flavor bindings win over the shared graph PASSED - -NavigationAssemblyTest > verifyNavigationGraphsAssembleWithoutCrashing PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:testing:testAndroidHostTest - -FakeBleServiceFailureInjectionTest > observeNeverSubscribeStillExposesNotifications PASSED - -FakeBleServiceFailureInjectionTest > observeNeverSubscribeDoesNotInvokeOnSubscription PASSED - -FakeBleServiceFailureInjectionTest > observeExceptionCausesFlowException PASSED - -FakeBleServiceFailureInjectionTest > readExceptionIsThrownAndReset PASSED - -FakeBleServiceFailureInjectionTest > observeExceptionByCharacteristicInTwoArgAlsoThrowsBeforeSubscription PASSED - -FakeBleServiceFailureInjectionTest > observeExceptionByCharacteristicOnlyFailsTargetCharacteristic PASSED - -FakeBleServiceFailureInjectionTest > writeExceptionIsPersistent PASSED - -FakeBleServiceFailureInjectionTest > observeBeforeSubscriptionExceptionDoesNotInvokeOnSubscription PASSED - -FakeNodeRepositoryTest > clearNodeDB preserves favorites PASSED - -FakeNodeRepositoryTest > getUnknownNodes returns nodes with UNSET hw_model PASSED - -FakeNodeRepositoryTest > getNodes filtering by onlyDirect PASSED - -FakeNodeRepositoryTest > getNodes sorting by name PASSED - -FakeNodeRepositoryTest > deleteNodes removes multiple nodes PASSED - -FakeNodeRepositoryTest > getNodes filtering by onlyOnline PASSED - -FakeNodeRepositoryTest > setNodeNotes persists notes PASSED - -FakeNodeRepositoryTest > getNodes filtering by onlyDirect drops an mqtt node at zero hops PASSED - -FakeNodeRepositoryTest > insertMetadata updates node metadata PASSED - -FakeNodeRepositoryTest > reset clears all state PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:ui:compileTestKotlinIosSimulatorArm64 -> Task :core:ui:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :core:ui:iosSimulatorArm64Test SKIPPED - -> Task :core:service:testAndroidHostTest - -AndroidNotificationManagerTest > protected position advisory predicate rejects every near miss PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testFdroidDebugUnitTest - -NavigationAssemblyTest > mapRouteEffectRestartsWhenEntryReturnsFromBackStack PASSED - -NavigationAssemblyTest > mapRouteForwardsWaypointAndSitePlannerNode PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:service:testAndroidHostTest - -AndroidNotificationManagerTest > removeLegacyCategoryChannels removes all known legacy category channels PASSED - -AndroidNotificationManagerTest > dispatch routes all categories to canonical channels PASSED - -AndroidNotificationManagerTest > repeated generic client notifications with the same message coalesce into one tray entry PASSED - -AndroidNotificationManagerTest > dispatch attaches deep-link PendingIntent when deepLinkUri is set PASSED - -AndroidNotificationManagerTest > dispatch leaves contentIntent unset when deepLinkUri is null PASSED - -AndroidNotificationManagerTest > dispatch uses provided notification id as system id PASSED - -AndroidNotificationManagerTest > exact protected position advisory is recognized PASSED - -AndroidNotificationManagerTest > removeLegacyCategoryChannels deletes legacy channels and keeps canonical channels PASSED - -AndroidNotificationManagerTest > dispatch removes legacy node channel and creates canonical node channel PASSED - -AndroidNotificationManagerTest > dispatch reports false when its notification channel is disabled PASSED - -AndroidNotificationManagerTest > dispatch routes node event notifications to canonical new nodes channel PASSED - -AndroidNotificationManagerTest > removeLegacyCategoryChannels is idempotent PASSED - -AndroidNotificationManagerTest > client notification identity cancels the notification posted with that identity PASSED - -AndroidNotificationManagerTest > generic client notification does not enable only-alert-once PASSED - -AndroidNotificationManagerTest > protected position advisories replace one stable only-alert-once system notification PASSED - -BootCompleteReceiverTest > pending result finishes when persistence load times out PASSED - -MeshLogCleanupWorkerTest > persisted zero retention never deletes after a delayed cold load PASSED - -MeshLogCleanupWorkerTest > persisted positive retention deletes once with the loaded policy PASSED - -> Task :core:ui:jvmTest - -AutoLinkTextRenderTest[jvm] > markdown_link_and_bare_url_both_link_without_double_linking()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > mention_inside_bold_resolves_and_keeps_offsets()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > mention_without_resolver_is_left_untouched()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > unpaired_delimiter_renders_literally()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > bare_url_is_autolinked()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > markdown_link_is_tappable_and_syntax_removed()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > plain_text_falls_back_to_autolinked_text_only()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > bold_renders_without_delimiters()[jvm] PASSED - -AutoLinkTextRenderTest[jvm] > emoji_only_short_circuits_and_renders_unchanged()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > omits_battery_when_over_100()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > omits_incomplete_for_known_user()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > includes_favorite_when_flagged()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > omits_battery_when_null()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > omits_battery_when_zero()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > signal_hidden_when_via_mqtt()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > omits_hops_when_zero()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > signal_hidden_when_hops_greater_than_zero()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > includes_name_and_online_status()[jvm] PASSED - -AdaptiveTwoPaneUiTest[jvm] > splitPaneInsideLazyColumnItemRendersBothPanes()[jvm] PASSED - -AdaptiveTwoPaneUiTest[jvm] > splitPaneInBoundedHostRendersBothPanes()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > signal_shown_when_direct_and_valid_values()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > signal_shown_for_a_zero_snr_reading()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > includes_incomplete_when_unknown_user()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > signal_hidden_when_snr_is_absent()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > omits_favorite_when_not_flagged()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > includes_hops_when_positive()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > includes_battery_when_in_valid_range()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > includes_distance_when_provided()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > omits_last_heard_when_zero()[jvm] PASSED - -BuildNodeDescriptionTest[jvm] > includes_offline_when_not_online()[jvm] PASSED - -ImportFabTest[jvm] > normalizeImportContents_preservesValidUrlAfterTrim()[jvm] PASSED - -ImportFabTest[jvm] > normalizeImportContents_returnsNullForBlank()[jvm] PASSED - -ImportFabTest[jvm] > normalizeImportContents_returnsNullForNull()[jvm] PASSED - -ImportFabTest[jvm] > normalizeImportContents_trimsSurroundingWhitespace()[jvm] PASSED - -AdaptiveTwoPaneUiTest[jvm] > dividerPositionSurvivesBoundedUnboundedRoundTrip()[jvm] PASSED - -> Task :feature:connections:compileKotlinIosSimulatorArm64 -> Task :feature:connections:iosSimulatorArm64MainKlibrary -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:testing:testAndroidHostTest - -FakeRadioControllerRestoreTest > restoreRejectsMissingSelectedDeviceOwnership PASSED - -FakeRadioControllerRestoreTest > restoreSerializesWithDeviceSelection PASSED - -FakeRadioControllerRestoreTest > restorePropagatesConfigFailureAfterChannelWrite PASSED - -FakeRadioControllerRestoreTest > restoreRequiresSelectedDeviceOwnership PASSED - -FakeRadioControllerRestoreTest > resetClearsRestoreSessionState PASSED - -> Task :androidApp:mergeGoogleDebugJavaResource -> Task :androidApp:jacocoGoogleDebug -> Task :feature:connections:compileTestKotlinIosSimulatorArm64 -> Task :feature:connections:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:connections:iosSimulatorArm64Test SKIPPED -> Task :feature:connections:compileJvmTestJava NO-SOURCE -> Task :feature:connections:jvmTestClasses - -> Task :core:service:testAndroidHostTest - -BootCompleteReceiverTest > pending result finishes when persistence load fails PASSED - -MeshLogCleanupWorkerTest > persisted disabled policy never deletes after a delayed cold load PASSED - -MeshLogCleanupWorkerTest > cancellation while loading persisted policy propagates PASSED - -BootCompleteReceiverTest > a TCP device still reconnects without the Bluetooth permission PASSED - -BootCompleteReceiverTest > persisted selected address starts service exactly once after load PASSED - -BootCompleteReceiverTest > persisted no-device sentinel does not start service after load PASSED - -BootCompleteReceiverTest > a BLE device is not reconnected without the Bluetooth permission, and the user is told PASSED - -BootCompleteReceiverTest > timeout includes time queued for IO dispatcher PASSED - -RadioControllerImplTest > editSettingsCommitsAfterWriteFailureAndRethrowsOriginal PASSED - -RadioControllerImplTest > connectionStateAndClientNotificationDelegateToServiceRepository PASSED - -RadioControllerImplTest > stopProvideLocationDelegatesToLocationManager PASSED - -RadioControllerImplTest > setFavoriteSendsAdminAndUpdatesState PASSED - -RadioControllerImplTest > editSettingsDoesNotSuppressCommitFailureCausedByBlockFailure PASSED - -RadioControllerImplTest > editSettingsSuppressesCommitFailureOnBlockFailure PASSED - -RadioControllerImplTest > collectorStartupDoesNotMissFirstSessionGenerationBoundary PASSED - -RadioControllerImplTest > fixedPositionPropagatesQueueRejection PASSED - -RadioControllerImplTest > importContactPreservesEncodedVerificationState PASSED - -RadioControllerImplTest > editSettingsReportsFailedCommitAfterOrderedWrites PASSED - -RadioControllerImplTest > nodedbResetSendsAdminMessage PASSED - -RadioControllerImplTest > editSettingsRejectsTransportStopBeforeCommitTransmission PASSED - -RadioControllerImplTest > editSettingsDoesNotTreatDestinationZeroAsLocalWhenNodeIdentityIsUnknown PASSED - -RadioControllerImplTest > editSettingsAcceptsCapturedDisconnectAfterFastReconnect PASSED - -RadioControllerImplTest > staleAddressIdentityCannotAssociateSelectedTransport PASSED - -RadioControllerImplTest > setIgnoredSendsAdminUpdatesStateAndFiltersPackets PASSED - -RadioControllerImplTest > concurrentDeviceSelectionsAreSerialized PASSED - -RadioControllerImplTest > editSettingsAcceptsDeviceSleepAsPostDispatchDeparture PASSED - -RadioControllerImplTest > sendSharedContactRejectsNodeWithNoPublicKey PASSED - -RadioControllerImplTest > setDeviceAddressDoesNotPersistOrReportSuccessWhenPreferenceMatchesButTransportRejects PASSED - -RadioControllerImplTest > editSettingsCommitsWhenCallerIsCancelled PASSED - -RadioControllerImplTest > sendReactionFallsBackToQueuedWhenSenderLeavesStatusNull PASSED - -RadioControllerImplTest > editLocalSettingsFailsBeforeBeginWhenNodeIdentityIsUnknown PASSED - -RadioControllerImplTest > editSettingsDoesNotTreatLocalDepartureAsRemoteCommitAcceptance PASSED - -RadioControllerImplTest > setDeviceAddressSwitchesDatabaseAndTransport PASSED - -RadioControllerImplTest > setDeviceAddressRestoresPreviousSelectionWhenTransportRejectsNewAddress PASSED - -RadioControllerImplTest > sendReactionDoesNotPersistWhenQueueRejects PASSED - -RadioControllerImplTest > sessionChangeCancelsInFlightAssociation PASSED - -RadioControllerImplTest > factoryResetSendsAdminMessage PASSED - -RadioControllerImplTest > samePhysicalIdentityAssociatesEachAddressBoundSession PASSED - -RadioControllerImplTest > setDeviceAddressUsesTransportSnapshotWhenPreferenceFlowLags PASSED - -RadioControllerImplTest > setHamModeSendsAdminWithEchoedLoraValuesAndUpdatesUser PASSED - -RadioControllerImplTest > editSettingsRetainsInterleavedStagedLocalProjections PASSED - -RadioControllerImplTest > setDeviceAddressSkipsSwitchWhenAddressUnchanged PASSED - -RadioControllerImplTest > editSettingsRejectsDepartureThatArrivesAfterCommitDepartureTimeout PASSED - -RadioControllerImplTest > toggleMutedSendsAdminAndUpdatesState PASSED - -RadioControllerImplTest > setDeviceAddressRestoresPreviousSelectionWhenInitializationFails PASSED - -RadioControllerImplTest > removeByNodenumRetainsLocalRemovalWhenAdminQueueRejects PASSED - -RadioControllerImplTest > editSettingsAcceptsConnectingAsPostDispatchDeparture PASSED - -RadioControllerImplTest > editSettingsSuppressesDistinctCommitFailureWithSameSignature PASSED - -RadioControllerImplTest > editSettingsRejectsTransportStopWithoutObservedDeparture PASSED - -RadioControllerImplTest > removeByNodenumAlwaysRemovesLocallyAndSendsAdminWhenConnected PASSED - -RadioControllerImplTest > removeByNodenumRemovesLocallyEvenWhenDisconnected PASSED - -RadioControllerImplTest > editLocalSettingsChannelWritesDoNotMirrorToLocalCache PASSED - -RadioControllerImplTest > nodeManagementReturnsEarlyWhenMyNodeNumIsNull PASSED - -RadioControllerImplTest > sendMessageDoesNotPersistWhenQueueRejects PASSED - -RadioControllerImplTest > editSettingsAwaitsBoundariesAroundOrderedWrites PASSED - -RadioControllerImplTest > setHamModeWithNoCachedLoraConfigSendsProtoDefaults PASSED - -RadioControllerImplTest > editSettingsDiscardsStagedLocalProjectionsWhenCommitFails PASSED - -RadioControllerImplTest > setFavoriteIsNoOpWhenAlreadyInRequestedState PASSED - -RadioControllerImplTest > setDeviceAddressFailsClosedWhenDatabaseRollbackFails PASSED - -RadioControllerImplTest > rebootSendsAdminMessageWithDelay PASSED - -RadioControllerImplTest > editSettingsAcceptsDispatchedCommitWhenLocalTransportDeparts PASSED - -RadioControllerImplTest > importContactReturnsEarlyWhenDisconnected PASSED - -RadioControllerImplTest > editSettingsWaitsForCanonicalDepartureAfterTransportStops PASSED - -RadioControllerImplTest > freshIdentityPublishedBeforeBoundaryCollectorRunsIsPreserved PASSED - -RadioControllerImplTest > requestConfigOperationsDelegateToCommandSender PASSED - -RadioControllerImplTest > editSettingsRejectsFailedBeginBeforeRunningWrites PASSED - -RadioControllerImplTest > sameAddressReconnectRejectsOldGenerationUntilFreshIdentityArrives PASSED - -RadioControllerImplTest > localChannelDoesNotPersistWhenQueueRejects PASSED - -RadioControllerImplTest > freshAddressBoundIdentityAssociatesExactlyOnceWithNodeFallback PASSED - -RadioControllerImplTest > setHamModeWithoutALongNameNamesTheNodeAfterTheCallSignAlone PASSED - -RadioControllerImplTest > shutdownSendsAdminMessage PASSED - -RadioControllerImplTest > editSettingsAcceptsDepartureThatArrivesWithinCommitDepartureTimeout PASSED - -RadioControllerImplTest > editSettingsRejectsTimedOutCommitWithoutObservedDeparture PASSED - -RadioControllerImplTest > setTimeSendsAdminMessageWithCurrentEpochSeconds PASSED - -RadioControllerImplTest > editSettingsContinuesLocalProjectionReconciliationAfterProjectionFailure PASSED - -RadioControllerImplTest > sendSharedContactCallsCommandSenderAdminAwait PASSED - -RadioControllerImplTest > sendMessageDelegatesToCommandSender PASSED - -RadioControllerImplTest > sendReactionPersistsToDatabase PASSED - -RadioControllerImplTest > delayedOldIdentityCannotPairWithNewAddress PASSED - -RadioControllerImplTest > importContactSendsAdminAndUpdatesNodeManager PASSED - -RadioControllerImplTest > editSettingsDoesNotAcceptDepartureFromQueuedPredecessorAsCommitEvidence PASSED - -RadioControllerImplTest > setHamModeIgnoresRemoteDestinations PASSED - -RadioControllerImplTest > editSettingsDiscardsStagedLocalProjectionsWhenBlockFails PASSED - -RadioControllerImplTest > refreshMetadataSendsAdminWithWantResponse PASSED - -RadioControllerImplTest > importContactRejectsEmptyPublicKey PASSED - -RadioControllerImplTest > editSettingsAppliesStagedLocalProjectionsOnlyAfterCommitAcceptance PASSED - -RadioControllerImplTest > editSettingsAcceptsTimedOutCommitWhenLocalTransportDeparts PASSED - -RadioControllerImplTest > editSettingsRejectsFixedPositionWriteBeforeDeviceMutationWhenLocalNodeIsUnavailable PASSED - -RadioControllerImplTest > editSettingsDoesNotProjectZeroPositionWhenRemovingFixedPosition PASSED - -ServiceStayAliveDecisionTest > selectedDeviceKeepsServiceAlive PASSED - -ServiceStayAliveDecisionTest > noAddressDuringAnOperationStaysAlive PASSED - -ServiceStayAliveDecisionTest > blankAddressWithNothingRunningStops PASSED - -ServiceStayAliveDecisionTest > selectedDeviceWinsOverOperation PASSED - -ServiceStayAliveDecisionTest > deselectedWithNothingRunningStops PASSED - -ServiceStayAliveDecisionTest > deselectedDuringAnOperationStaysAlive PASSED - -MeshNotificationManagerImplConversationTest > read messages become historic context and unread messages stay alerting PASSED - -MeshNotificationManagerImplConversationTest > refreshConversationAfterReply resolves a dm peer name for the shortcut label PASSED - -MeshNotificationManagerImplConversationTest > conversation notifications carry bubble metadata the platform will accept PASSED - -MeshNotificationManagerImplConversationTest > notification ids are namespaced per type so a node num cannot clobber the service notification PASSED - -MeshNotificationManagerImplConversationTest > refreshConversationAfterReply reposts the conversation with the effective channel name PASSED - -MeshNotificationManagerImplConversationTest > group summary alerts via children only and is dropped with the last conversation PASSED - -> Task :androidApp:bundleGoogleDebugClassesToCompileJar -> Task :androidApp:bundleGoogleDebugClassesToRuntimeJar - -> Task :core:testing:testAndroidHostTest - -FakeRadioInterfaceServiceSessionTest > recorded radio writes are isolated from caller mutation PASSED - -FakeRadioInterfaceServiceSessionTest > trySendToRadio records bytes only while a session is admitted PASSED - -FakeRadioInterfaceServiceSessionTest > trySendToRadio can reject an admitted transport handoff without recording bytes PASSED - -FakeRadioInterfaceServiceSessionTest > selection does not admit a session and every connected start advances generation PASSED - -FakeRadioInterfaceServiceSessionTest > disconnect closes admission and waits for admitted fake session work PASSED - -> Task :core:testing:allTests - -> Task :core:service:testAndroidHostTest - -RadioControllerRestoreTest > restoreLocalConfigurationWaitsForDeviceSelectionAndRejectsThePreviousDevice PASSED - -RadioControllerRestoreTest > restoreLocalConfigurationRejectsStaleDeviceOwnershipBeforeWriting PASSED - -RadioControllerRestoreTest > restoreLocalConfigurationRejectsMissingDeviceOwnershipBeforeWriting PASSED - -RadioControllerRestoreTest > restoreLocalConfigurationUsesOneEditTransactionInChannelThenConfigOrder PASSED - -SharedRadioInterfaceServiceLivenessTest > USB replug of selected serial device restarts transport when zombie PASSED - -SharedRadioInterfaceServiceLivenessTest > setDeviceAddress with the same address preserves the pending gatt cache invalidation flag PASSED - -SharedRadioInterfaceServiceLivenessTest > USB disconnect before detach emission waits for absent to present replug PASSED - -SharedRadioInterfaceServiceLivenessTest > USB recovery arm clears across explicit disconnect before reconnect PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport after connect closes old transport and creates fresh one PASSED - -SharedRadioInterfaceServiceLivenessTest > network available recovery does not restart transport after setDeviceAddress deselect PASSED - -SharedRadioInterfaceServiceLivenessTest > inbound data resets liveness timer so timeout does not fire PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport is a no-op after explicit disconnect PASSED - -SharedRadioInterfaceServiceLivenessTest > transport teardown drains a synchronously admitted send before close PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport is a no-op after setDeviceAddress null PASSED - -SharedRadioInterfaceServiceLivenessTest > ordered session lane serializes handshake work while independent leases remain concurrent PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport is a no-op after setDeviceAddress n PASSED - -SharedRadioInterfaceServiceLivenessTest > wedged session handler is cancelled at the timeout and the pipeline continues PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport is a no-op when transport is environmentally stopped but connection remains requested PASSED - -SharedRadioInterfaceServiceLivenessTest > network available recovery does not restart transport after explicit disconnect PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE state recovery does not restart transport after explicit disconnect PASSED - -SharedRadioInterfaceServiceLivenessTest > transport factory failure revokes admitted session and retry uses a fresh generation PASSED - -SharedRadioInterfaceServiceLivenessTest > transport admission is closed after disconnect PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE liveness restart does not emit permanent Disconnected PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE liveness restart does not emit user-facing connection error PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE liveness timeout closes old transport and creates fresh one PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE repeated liveness checks do not stack restarts PASSED - -SharedRadioInterfaceServiceLivenessTest > setDeviceAddress contains factory failure and same-address repair can retry PASSED - -SharedRadioInterfaceServiceLivenessTest > USB replug of unrelated serial device does not restart transport PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport does not emit user-facing connection error PASSED - -SharedRadioInterfaceServiceLivenessTest > frames dropped by a full receive queue do not reset the liveness timer PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport coordinates with in-flight liveness restart via isRestarting PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE in-flight liveness restart prevents overlapping restart via isRestarting PASSED - -SharedRadioInterfaceServiceLivenessTest > setDeviceAddress after deselect preserves pending gatt cache invalidation flag PASSED - -SharedRadioInterfaceServiceLivenessTest > transport session diagnostic redacts its address PASSED - -SharedRadioInterfaceServiceLivenessTest > USB replug recovers when presence arrives before DeviceSleep PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport preserves selected device address PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE liveness does not fire when connection state is not Connected PASSED - -SharedRadioInterfaceServiceLivenessTest > USB replug does not restart transport after explicit disconnect PASSED - -SharedRadioInterfaceServiceLivenessTest > transport teardown remains cancellation safe while draining existing session leases PASSED - -SharedRadioInterfaceServiceLivenessTest > gatt cache invalidation flag is consumed once and cleared on disconnect PASSED - -SharedRadioInterfaceServiceLivenessTest > non-BLE transport liveness timeout does not close transport or change state PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE environmental recovery restarts transport while connection is still desired PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE state recovery does not restart transport after setDeviceAddress deselect PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE liveness restart contains factory failure and a later connect can retry PASSED - -SharedRadioInterfaceServiceLivenessTest > transport rejection is reported to the caller PASSED - -SharedRadioInterfaceServiceLivenessTest > heartbeat cannot bypass transport admission while teardown drains a session lease PASSED - -SharedRadioInterfaceServiceLivenessTest > USB replug duplicate same-key emissions produce exactly one restart PASSED - -SharedRadioInterfaceServiceLivenessTest > restartTransport does not emit permanent Disconnected PASSED - -SharedRadioInterfaceServiceLivenessTest > disconnect completes after a wedged handler is timed out PASSED - -SharedRadioInterfaceServiceLivenessTest > BLE liveness restart does not send polite disconnect into zombie transport PASSED - -SharedRadioInterfaceServiceLivenessTest > USB replug does not restart transport when already Connected PASSED - -SharedRadioInterfaceServiceLivenessTest > setDeviceAddress with a different address clears the pending gatt cache invalidation flag PASSED - -SharedRadioInterfaceServiceLivenessTest > USB initial empty presence does not arm recovery PASSED - -SharedRadioInterfaceServiceLivenessTest > USB permission denial emits error and permanent disconnected state PASSED - -> Task :core:service:allTests - -> Task :androidApp:testFdroidDebugUnitTest - -MapViewModelSitePlannerRequestTest > pending request follows the live node and stops after consumption PASSED - -MapViewModelSitePlannerRequestTest > new route request replaces pending request and stale consumption cannot clear it PASSED - -MapViewModelSitePlannerRequestTest > consumed site planner request is not rearmed by entry recomposition PASSED - -UIUnitTest > initialsGood PASSED - -UIUnitTest > ignoreEmojisWhenCreatingInitials PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:ui:jvmTest - -AlertHostTest[jvm] > alertHost_showsDialog_whenAlertIsTriggered()[jvm] PASSED - -LoraSignalIndicatorUiTest[jvm] > snrRendersNothingWhenAbsent()[jvm] PASSED - -EditTextPreferenceFocusTest[jvm] > a focus requester focuses the text field rather than its wrapping column()[jvm] PASSED - -EditTextPreferenceFocusTest[jvm] > a field with no focus requester is left alone()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > the issue's example minus 10 dB SNR rates GOOD on LongFast()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > the same SNR is rated relative to the preset()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > presets sharing a spreading factor share a floor regardless of bandwidth()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > every ModemPreset is covered by the firmware spreading-factor table()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > same SNR rates differently depending on the RSSI margin alone()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > LONG_SLOW uses physically-correct SF12 floor()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > a zero SNR reading is rated rather than treated as missing()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > noise floor alone does not influence the rating()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > LongTurbo is rated at its SF11 floor rather than SF9()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > RSSI alone does not influence the rating()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > null preset falls back to the LongFast default limit()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > every preset's snrLimit is its spreading factor's demod floor()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > noise-floor blend picks the worse tier when RSSI margin is worse than SNR margin()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > absent SNR is not a quality band()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > quality bands around the LongFast floor()[jvm] PASSED - -LoraSignalIndicatorTest[jvm] > noise-floor blend can downgrade a good SNR reading all the way to NONE()[jvm] PASSED - -EmojiCellSizeTest[jvm] > cell always fits the glyph()[jvm] PASSED - -EmojiCellSizeTest[jvm] > cell never drops below the minimum touch target()[jvm] PASSED - -EmojiCellSizeTest[jvm] > cell grows once the glyph outgrows the minimum()[jvm] PASSED - -EmojiCellSizeTest[jvm] > default font scale keeps the original cell size()[jvm] PASSED - -EventBrandingTest[jvm] > hasEndedFallsBackToSystemZoneWhenTimeZoneUnparseable()[jvm] PASSED - -EventBrandingTest[jvm] > brandPaletteDeDupesAuthoredEntriesPreservingOrder()[jvm] PASSED - -EventBrandingTest[jvm] > safeBrandUrlRejectsNonHttpSchemesAndUserinfo()[jvm] PASSED - -EventBrandingTest[jvm] > hasEndedFalseWhenEndDateMissingOrUnparseable()[jvm] PASSED - -EventBrandingTest[jvm] > hasEndedFalseForFutureDate()[jvm] PASSED - -EventBrandingTest[jvm] > safeLinksDropsUnsafeEntriesAndKeepsOrder()[jvm] PASSED - -EventBrandingTest[jvm] > brandHighlightPrefersAccentThenSecondary()[jvm] PASSED - -EventBrandingTest[jvm] > safeBrandUrlReturnsTheValidatedFormNotTheOriginal()[jvm] PASSED - -EventBrandingTest[jvm] > parsesRrggbbWithHash()[jvm] PASSED - -EventBrandingTest[jvm] > safeBrandUrlRejectsMalformedAuthorities()[jvm] PASSED - -EventBrandingTest[jvm] > brandPaletteFallsBackToNamedColorsThenAccent()[jvm] PASSED - -EventBrandingTest[jvm] > parsesWithoutHashAndCaseInsensitively()[jvm] PASSED - -EventBrandingTest[jvm] > brandPalettePrefersAuthoredPaletteAndDropsMalformedEntries()[jvm] PASSED - -EventBrandingTest[jvm] > safeBrandUrlAcceptsOnlyAbsoluteHttps()[jvm] PASSED - -EventBrandingTest[jvm] > nullForMissingOrMalformed()[jvm] PASSED - -EventBrandingTest[jvm] > brandPaletteEmptyWhenEditionPublishesNoColors()[jvm] PASSED - -EventBrandingTest[jvm] > hasEndedTrueForPastDate()[jvm] PASSED - -EventBrandingTest[jvm] > safeLinksNormalizesTheUrlItKeeps()[jvm] PASSED - -DropDownPreferenceUiTest[jvm] > deprecatedValueTheRadioHoldsStaysOnTheList()[jvm] PASSED - -SnackbarManagerTest[jvm] > showSnackbar_with_action_defaults_to_long_duration()[jvm] PASSED - -SnackbarManagerTest[jvm] > multiple_events_are_queued_and_consumed_in_order()[jvm] PASSED - -SnackbarManagerTest[jvm] > showSnackbar_with_explicit_duration_overrides_default()[jvm] PASSED - -SnackbarManagerTest[jvm] > onAction_callback_is_preserved_in_event()[jvm] PASSED - -SnackbarManagerTest[jvm] > withDismissAction_is_passed_through()[jvm] PASSED - -SnackbarManagerTest[jvm] > showSnackbar_emits_event_with_message()[jvm] PASSED - -DropDownPreferenceUiTest[jvm] > valueTheSchemaNamesIsShownByItsLabel()[jvm] PASSED - -UIViewModelImportSummaryTest[jvm] > sanitized_import_summary_treats_blank_fragment_as_absent()[jvm] PASSED - -InlineMarkdownTest[jvm] > empty_input_yields_empty_result()[jvm] PASSED - -UIViewModelImportSummaryTest[jvm] > ota_status_notifications_are_suppressed()[jvm] PASSED - -UIViewModelImportSummaryTest[jvm] > sanitized_import_summary_omits_sensitive_uri_contents()[jvm] PASSED - -InlineMarkdownTest[jvm] > mixed_message_strips_all_delimiters()[jvm] PASSED - -InlineMarkdownTest[jvm] > triple_asterisk_is_bold_and_italic()[jvm] PASSED - -InlineMarkdownTest[jvm] > emoji_only_is_unchanged()[jvm] PASSED - -InlineMarkdownTest[jvm] > block_syntax_renders_literally()[jvm] PASSED - -UIViewModelImportSummaryTest[jvm] > non_ota_status_notifications_are_not_suppressed()[jvm] PASSED - -InlineMarkdownTest[jvm] > newlines_are_preserved()[jvm] PASSED - -InlineMarkdownTest[jvm] > unpaired_delimiter_is_literal_and_does_not_throw()[jvm] PASSED - -InlineMarkdownTest[jvm] > strikethrough_strips_and_styles()[jvm] PASSED - -InlineMarkdownTest[jvm] > single_asterisk_is_italic_not_bold()[jvm] PASSED - -InlineMarkdownTest[jvm] > inline_link_strips_syntax_and_records_url()[jvm] PASSED - -InlineMarkdownTest[jvm] > code_span_does_not_reinterpret_inner_markup()[jvm] PASSED - -InlineMarkdownTest[jvm] > bold_strips_delimiters_and_styles_content()[jvm] PASSED - -InlineMarkdownTest[jvm] > loose_asterisks_render_literally()[jvm] PASSED - -LoraSignalIndicatorUiTest[jvm] > snrRendersAZeroReading()[jvm] PASSED - -LoraSignalIndicatorUiTest[jvm] > rssiUsesCallerProvidedLabel()[jvm] PASSED - -LoraSignalIndicatorUiTest[jvm] > loraSignalIndicatorShowsUnknownWhenSnrIsAbsent()[jvm] PASSED - -LoraSignalIndicatorUiTest[jvm] > batteryUsesCallerProvidedUnknownLabel()[jvm] PASSED - -RoleLabelTest[jvm] > no two roles share a label()[jvm] PASSED - -EmojiPickerViewModelTest[jvm] > customEmojiFrequency property delegates to prefs()[jvm] PASSED - -EmojiPickerViewModelTest[jvm] > testInitialization()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_showsZeroVoltageAndCurrent()[jvm] PASSED - -ActiveWhileStartedTest[jvm] > effectFollowsLifecycleEnablementRestartKeysAndDisposal()[jvm] PASSED - -ImportUriTest[jvm] > parseDeepLinkOrInvalid_dispatches_valid_uri()[jvm] PASSED - -ImportUriTest[jvm] > parseDeepLinkOrInvalid_invokes_invalid_on_parse_failure()[jvm] PASSED - -WifiUnavailableBannerTest[jvm] > scan_active_permission_granted_cellular_only_then_banner_shows()[jvm] PASSED - -WifiUnavailableBannerTest[jvm] > scan_active_permission_granted_wifi_unavailable_results_found_then_banner_hidden()[jvm] PASSED - -WifiUnavailableBannerTest[jvm] > vpn_only_then_banner_hidden_even_when_scanning()[jvm] PASSED - -WifiUnavailableBannerTest[jvm] > wifi_present_then_banner_hidden_even_when_scanning()[jvm] PASSED - -WifiUnavailableBannerTest[jvm] > scan_inactive_permission_granted_cellular_only_then_banner_hidden()[jvm] PASSED - -WifiUnavailableBannerTest[jvm] > permission_denied_then_banner_hidden_even_when_scanning()[jvm] PASSED - -WifiUnavailableBannerTest[jvm] > scan_active_permission_granted_wifi_unavailable_then_banner_shows()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_hidesAbsentSoilReadings()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_hidesOutOfRangeSoilMoisture()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_showsZeroTemperature()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItemCompact_showsZeroTemperature()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_hidesAbsentTemperature()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItemCompact_hidesAbsentTemperature()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_showsSoilMoistureWithoutSoilTemperature()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_showsZeroSoilReadings()[jvm] PASSED - -NodeItemZeroMetricsTest[jvm] > nodeItem_hidesAbsentVoltageAndCurrent()[jvm] PASSED - -PickLegibleTest[jvm] > fallsBackWhenNoCandidateReads()[jvm] PASSED - -PickLegibleTest[jvm] > honoursACustomMinimumRatio()[jvm] PASSED - -PickLegibleTest[jvm] > picksFirstCandidateThatClearsTheThreshold()[jvm] PASSED - -PickLegibleTest[jvm] > picksDifferentColorsForLightAndDarkBackgrounds()[jvm] PASSED - -AnnotatedStringsTest[jvm] > neighbor info uses the preset and the lowest quality band()[jvm] PASSED - -AnnotatedStringsTest[jvm] > traceroute colors the same SNR differently for different presets()[jvm] PASSED - -AnnotatedStringsTest[jvm] > unknown traceroute SNR remains unstyled while zero is a measurement()[jvm] PASSED - -ProtoExtensionsTest[jvm] > import_writes_all_eight_slots_with_replacement_roles()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_null_lora_falls_back_to_defaults_without_crashing()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_compacts_valid_secondaries_into_sequential_slots()[jvm] PASSED - -NodeItemDistanceUnitsTest[jvm] > nodeItemCompact_updatesDistanceWhenUnitsChange()[jvm] PASSED - -ProtoExtensionsTest[jvm] > import_leaves_cache_untouched_when_a_channel_write_fails_mid_session()[jvm] PASSED - -ProtoExtensionsTest[jvm] > empty_new_with_non_empty_current_emits_disabled_for_every_current_index()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_existing_at_max_omits_nothing_but_all_incoming_unchecked()[jvm] PASSED - -ProtoExtensionsTest[jvm] > replacement_apply_uses_current_local_lora_preset_when_imported_lora_is_absent()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_empty_list_passes_through()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_drops_semantic_duplicate_secondary()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_same_name_different_psk_remains_visible()[jvm] PASSED - -ProtoExtensionsTest[jvm] > imported_lora_config_is_not_written_when_absent_or_unchanged()[jvm] PASSED - -ProtoExtensionsTest[jvm] > import_rejects_imported_settings_beyond_slot_count_before_writing()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_keeps_same_psk_different_name()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_incoming_duplicate_of_existing_is_omitted()[jvm] PASSED - -ProtoExtensionsTest[jvm] > new_larger_than_old_emits_primary_plus_secondaries_for_every_new_index()[jvm] PASSED - -ProtoExtensionsTest[jvm] > replacement_list_rejects_minimum_slot_count_above_maximum_slot_count()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_omitted_duplicates_do_not_consume_capacity()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_preserves_blank_primary()[jvm] PASSED - -ProtoExtensionsTest[jvm] > secondary_indices_emit_secondary_with_new_settings_even_when_unchanged_from_old()[jvm] PASSED - -ProtoExtensionsTest[jvm] > replacement_apply_rejects_settings_still_oversized_after_normalization_drops_placeholders()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_single_element_passes_through()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_psk_marker_matches_expanded_default_key_and_is_omitted()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_non_long_fast_preset_default_duplicate_is_omitted()[jvm] PASSED - -ProtoExtensionsTest[jvm] > imported_lora_config_is_written_inside_the_same_transaction_when_it_differs()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_empty_name_default_matches_explicit_preset_name_and_is_omitted()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_duplicate_inside_incoming_keeps_first_and_omits_later()[jvm] PASSED - -ProtoExtensionsTest[jvm] > replacement_apply_normalizes_oversized_raw_import_under_limit_before_writing()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_settings_and_selections_are_always_size_matched()[jvm] PASSED - -ProtoExtensionsTest[jvm] > old_trailing_indices_beyond_new_are_emitted_as_disabled_with_empty_settings()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_same_psk_different_name_remains_visible()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_existing_channels_are_always_shown_and_selected()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_both_empty_produces_empty_preview()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_over_capacity_unique_incoming_remains_visible_but_unchecked()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_all_blank_input_preserves_only_primary()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_blank_primary_does_not_seed_duplicate_tracking()[jvm] PASSED - -ProtoExtensionsTest[jvm] > empty_new_and_empty_old_produces_empty_list()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_keeps_same_name_different_psk()[jvm] PASSED - -ProtoExtensionsTest[jvm] > single_entry_new_with_multi_entry_current_emits_primary_then_disabled_trailing()[jvm] PASSED - -ProtoExtensionsTest[jvm] > index_zero_emits_primary_with_new_settings_even_when_unchanged_from_old()[jvm] PASSED - -ProtoExtensionsTest[jvm] > replacement_apply_ignores_cached_settings_beyond_slot_count()[jvm] PASSED - -ProtoExtensionsTest[jvm] > normalize_drops_blank_placeholder_secondary()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_unique_incoming_channels_are_shown_and_selected()[jvm] PASSED - -ProtoExtensionsTest[jvm] > preview_explicit_preset_name_matches_empty_name_default_and_is_omitted()[jvm] PASSED - -NodeItemDistanceUnitsTest[jvm] > nodeItem_updatesDistanceWhenUnitsChange()[jvm] PASSED - -ScreenViewTrackerTest[jvm] > re-emitting the same route does not duplicate datadog view events()[jvm] PASSED - -ScreenViewTrackerTest[jvm] > clearing the current route stops the active view without starting a null replacement()[jvm] PASSED - -ScreenViewTrackerTest[jvm] > disposing stops the active view once()[jvm] PASSED - -ScreenViewTrackerTest[jvm] > switching screens stops the old view before starting the new one()[jvm] PASSED - -SharedContactViewModelTest[jvm] > testInitialization()[jvm] PASSED - -SharedContactViewModelTest[jvm] > unfilteredNodes reflects repository updates()[jvm] PASSED - -SharedContactViewModelTest[jvm] > addSharedContact delegates to serviceRepository()[jvm] PASSED - -AlertManagerTest[jvm] > dismissAlert_clears_currentAlert_flow()[jvm] PASSED - -AlertManagerTest[jvm] > showAlert_inside_onConfirm_is_dismissed_by_wrapping_dismissAlert()[jvm] PASSED - -AlertManagerTest[jvm] > onDismiss_triggers_and_dismisses_alert()[jvm] PASSED - -AlertManagerTest[jvm] > onConfirm_triggers_and_dismisses_alert()[jvm] PASSED - -AlertManagerTest[jvm] > showAlert_updates_currentAlert_flow()[jvm] PASSED - -NetworkTransportTest[jvm] > vpn_lost_leaving_cellular_only_then_local_unavailable()[jvm] PASSED - -NetworkTransportTest[jvm] > vpn_only_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > cellular_and_vpn_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > wifi_lost_leaving_vpn_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > wifi_network_present_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > wifi_and_vpn_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > wifi_present_as_non_default_alongside_cellular_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > no_networks_then_local_unavailable()[jvm] PASSED - -NetworkTransportTest[jvm] > vpn_disabled_leaving_cellular_only_then_local_unavailable()[jvm] PASSED - -NetworkTransportTest[jvm] > ethernet_and_vpn_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > only_cellular_network_then_local_unavailable()[jvm] PASSED - -NetworkTransportTest[jvm] > wifi_lost_across_all_networks_then_local_unavailable()[jvm] PASSED - -NetworkTransportTest[jvm] > ethernet_network_present_then_local_available()[jvm] PASSED - -NetworkTransportTest[jvm] > wifi_restored_as_non_default_after_loss_then_local_available()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > stable manifest missing the connected target does not expose a notice()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > connected older known node exposes Android firmware update notice()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > txDisabled follows the LoRa tx_enabled flag and stays false before config arrives()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > Connecting state maps to CONNECTING regardless of progress text()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > Disconnected without Reconnecting progress stays NOT_CONNECTED()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > stale firmware catalog does not expose a notice()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > connection status stays lifecycle-only when region is unset()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > suppressNoPairedWarning updates state and prefs()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > RECONNECTING_PROGRESS_TEXT pins the cross-track literal value()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > active node readiness is withdrawn when the identity is cleared or replaced()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > same-node reconnect readiness does not rewrite the connecting lifecycle()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > testInitialization()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > Disconnected with Reconnecting progress maps to RECONNECTING()[jvm] PASSED - -ConnectionsViewModelTest[jvm] > does not persist firmware notification dedupe when scheduling is unavailable()[jvm] PASSED - -> Task :androidApp:kspGoogleDebugUnitTestKotlin - -> Task :feature:connections:jvmTest - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings show when lockdown is explicitly disabled()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings stay hidden without a connected node()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings stay hidden while lockdown response is pending()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings stay hidden for managed devices after lockdown unlock()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings stay hidden for virtual devices()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings stay hidden while config writes are locked()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings wait for the active node handshake()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings show when lockdown is absent and managed mode allows local config()[jvm] PASSED - -ConnectionsScreenWarningPolicyTest[jvm] > config warnings show once the active node is ready and policy allows writes()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:discovery:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:774:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:790:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:812:74 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:931:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:1005:74 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:1165:75 Cast is redundant. - -> Task :feature:discovery:compileJvmTestJava NO-SOURCE -> Task :feature:discovery:jvmTestClasses - -> Task :androidApp:testFdroidDebugUnitTest - -CoilImageLoaderLifecycleTest > productionApplicationProvidesConfiguredKoinImageLoader PASSED - -> Task :feature:discovery:compileKotlinIosSimulatorArm64 -> Task :feature:discovery:iosSimulatorArm64MainKlibrary - -> Task :feature:connections:jvmTest - -ScannerViewModelTest[jvm] > startBleScan succeeds while Connecting()[jvm] PASSED - -ScannerViewModelTest[jvm] > startBleScan updates isBleScanning()[jvm] PASSED - -ScannerViewModelTest[jvm] > selecting USB stops all active scans()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:discovery:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:774:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:790:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:812:74 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:931:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:1005:74 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:1165:75 Cast is redundant. -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :core:ui:jvmTest - -ImportFabUiTest[jvm] > importFab_showsShareChannels_whenCallbackProvided()[jvm] PASSED - -ImportFabUiTest[jvm] > importFab_showsUrlDialog_whenUrlItemClicked()[jvm] PASSED - -> Task :androidApp:compileGoogleDebugUnitTestKotlin -> Task :androidApp:compileGoogleDebugUnitTestJavaWithJavac NO-SOURCE -> Task :androidApp:processGoogleDebugUnitTestJavaRes - -> Task :feature:connections:jvmTest - -ScannerViewModelTest[jvm] > discoveredTcpDevicesForUi is empty when not scanning()[jvm] PASSED - -ScannerViewModelTest[jvm] > bleDevicesForUi keeps the selected device visible even when not seen via scan()[jvm] PASSED - -ScannerViewModelTest[jvm] > connectionProgressText reflects connectionProgress()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > findNodeByNameSuffix returns null when no database()[jvm] PASSED - -ScannerViewModelTest[jvm] > isNetworkScanning defaults to false()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > buildRecentTcpEntries dedupes repeated addresses()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > findNodeByNameSuffix matches by last underscore segment()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > buildRecentTcpEntries results are sorted by name()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > buildRecentTcpEntries matches node by suffix()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > processTcpServices results are sorted by name()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > processTcpServices uses default shortname when missing()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > matchDiscoveredTcpNodes matches node by device id()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > matchDiscoveredTcpNodes returns null node when no database()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > processTcpServices dedupes services resolving to the same address()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > findNodeByNameSuffix returns null when suffix is too short()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > processTcpServices uses recent name over shortname()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > buildRecentTcpEntries filters out discovered addresses()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > processTcpServices does not duplicate id in display name()[jvm] PASSED - -TcpDiscoveryHelpersTest[jvm] > processTcpServices maps services to DeviceListEntry with shortname and id()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testShowReplayAddsReplayAlongsideDemo()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testHideMockNoDemo()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testDiscoveredTcpDeviceMatchesNode()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testRecentAddressesAreSortedByName()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testEmptyResolvedListReturnsNoDiscoveredDevices()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testNodeNotMatchedWhenNoDatabaseExists()[jvm] PASSED - -ScannerViewModelTest[jvm] > a scan that starts clears a stale permission refusal()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testShowMockAddsDemoOnly()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testEmptyRecentAddresses()[jvm] PASSED - -ScannerViewModelTest[jvm] > connectionState transition to Connected cancels active network scan()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testNodeMatchingWithSuffix()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testEmptyResolvedListIncludesMock()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testReactiveNodeUpdates()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testDiscoveredTcpDevices()[jvm] PASSED - -ScannerViewModelTest[jvm] > replay is requested only when the transport reports the capture asset()[jvm] PASSED - -CommonGetDiscoveredDevicesUseCaseTest[jvm] > testShowReplayIgnoredWhenMockHidden()[jvm] PASSED - -ScannerViewModelTest[jvm] > persistNetworkAutoScanIntent true clears bleAutoScan()[jvm] PASSED - -LocalNetworkGateTest[jvm] > a first denial warns and runs the stashed connect anyway()[jvm] PASSED - -LocalNetworkGateTest[jvm] > retryable denial explains before prompting again()[jvm] PASSED - -LocalNetworkGateTest[jvm] > never requested prompts in-context()[jvm] PASSED - -LocalNetworkGateTest[jvm] > granted proceeds silently()[jvm] PASSED - -LocalNetworkGateTest[jvm] > permanent denial warns but still proceeds because the system will not prompt again()[jvm] PASSED - -LocalNetworkGateTest[jvm] > an unchanged status keeps waiting for the request to resolve()[jvm] PASSED - -LocalNetworkGateTest[jvm] > a denial that becomes permanent warns and runs the stashed connect anyway()[jvm] PASSED - -LocalNetworkGateTest[jvm] > a grant runs the stashed connect()[jvm] PASSED - -ScannerViewModelTest[jvm] > selecting TCP stops active ble scan()[jvm] PASSED - -ScannerViewModelTest[jvm] > scan startup failure clears scanning state disables auto-scan and surfaces error()[jvm] PASSED - -ScannerViewModelTest[jvm] > bleDevicesForUi shows bonded devices only once they are visible via scan()[jvm] PASSED - -ScannerViewModelTest[jvm] > stopBleScan does not clear scanned devices()[jvm] PASSED - -ScannerViewModelTest[jvm] > showMockTransport follows the transport gate after construction()[jvm] PASSED - -ScannerViewModelTest[jvm] > scan startup failure cooldown prevents immediate retry and allows later manual retry()[jvm] PASSED - -ScannerViewModelTest[jvm] > toggleBleScan enabling scan clears networkAutoScan()[jvm] PASSED - -ScannerViewModelTest[jvm] > startBleAutoScan starts when no device selected()[jvm] PASSED - -ScannerViewModelTest[jvm] > scan quota failure honors retry-after cooldown()[jvm] PASSED - -ScannerViewModelTest[jvm] > startBleScan cancels active network scan()[jvm] PASSED - -ScannerViewModelTest[jvm] > location-services-disabled failure allows an immediate retry()[jvm] PASSED - -ScannerViewModelTest[jvm] > startBleAutoScan skips when device already selected()[jvm] PASSED - -ScannerViewModelTest[jvm] > startBleAutoScan starts only when active transport is BLE()[jvm] PASSED - -ScannerViewModelTest[jvm] > connectToManualAddress stops active network scan and changes device address()[jvm] PASSED - -ScannerViewModelTest[jvm] > onSelected TCP stops active network scan before changing device()[jvm] PASSED - -ScannerViewModelTest[jvm] > active transport defaults to BLE when no selected device or preference exists()[jvm] PASSED - -ScannerViewModelTest[jvm] > startNetworkScan updates isNetworkScanning()[jvm] PASSED - -ScannerViewModelTest[jvm] > replay is not requested when the capture asset is absent()[jvm] PASSED - -ScannerViewModelTest[jvm] > explicit active transport preference wins over selected device type()[jvm] PASSED - -ScannerViewModelTest[jvm] > testInitialization()[jvm] PASSED - -ScannerViewModelTest[jvm] > connectionState transition to Connected cancels active ble scan()[jvm] PASSED - -ScannerViewModelTest[jvm] > stopBleScan is idempotent after failed startup()[jvm] PASSED - -ScannerViewModelTest[jvm] > dismissRecovery clears the pending recovery record()[jvm] PASSED - -ScannerViewModelTest[jvm] > missing scan permission raises no modal but flags a refusal()[jvm] PASSED - -ScannerViewModelTest[jvm] > onSelected bonded BLE stops active scan before changing device()[jvm] PASSED - -ScannerViewModelTest[jvm] > a mid-session unlock re-queries the device list()[jvm] PASSED - -ScannerViewModelTest[jvm] > startNetworkScan cancels active ble scan()[jvm] PASSED - -ScannerViewModelTest[jvm] > toggleNetworkScan enabling scan clears bleAutoScan()[jvm] PASSED - -ScannerViewModelTest[jvm] > changeDeviceAddress calls radioController()[jvm] PASSED - -ScannerViewModelTest[jvm] > bluetooth-disabled failure allows an immediate retry once the user re-enables it()[jvm] PASSED - -ScannerViewModelTest[jvm] > selecting BLE stops active network scan()[jvm] PASSED - -ScannerViewModelTest[jvm] > usbDevicesForUi emits updates()[jvm] PASSED - -ScannerViewModelTest[jvm] > startNetworkAutoScan starts only when active transport is TCP()[jvm] PASSED - -ScannerViewModelTest[jvm] > startBleScan succeeds while DeviceSleep()[jvm] PASSED - -ScannerViewModelTest[jvm] > startNetworkScan succeeds while Connected()[jvm] PASSED - -ScannerViewModelTest[jvm] > startBleScan succeeds while Connected()[jvm] PASSED - -ScannerViewModelTest[jvm] > active transport defaults to selected device type when no explicit preference exists()[jvm] PASSED - -ScannerViewModelTest[jvm] > onSelected records active transport for BLE TCP and USB entries()[jvm] PASSED - -ScannerViewModelTest[jvm] > discoveredTcpDevicesForUi populates when scanning is active()[jvm] PASSED - -> Task :feature:discovery:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:774:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:790:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:812:74 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:931:75 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:1005:74 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/discovery/src/commonTest/kotlin/org/meshtastic/feature/discovery/DiscoveryScanEngineTest.kt:1165:75 Cast is redundant. - -> Task :feature:discovery:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:discovery:iosSimulatorArm64Test SKIPPED - -> Task :core:ui:jvmTest - -ImportFabUiTest[jvm] > importFab_expands_onButtonClick_whenSupported()[jvm] PASSED - -ImportFabUiTest[jvm] > importFab_describesClose_whenExpanded()[jvm] PASSED - -ImportFabUiTest[jvm] > importFab_hidesNfcAndQr_whenNotSupported()[jvm] PASSED - -ImportFabUiTest[jvm] > importFab_describesImport_whenNoShareCallbacks()[jvm] PASSED - -ImportFabUiTest[jvm] > importFab_describesImportExport_whenShareCallbackProvided()[jvm] PASSED - -ImportFabUiTest[jvm] > importFab_showsShareContact_whenCallbackProvided()[jvm] PASSED - -ImportFabUiTest[jvm] > importFab_showsSharedContactDialog_whenProvided()[jvm] PASSED - -NodeItemUnheardMarkerTest[jvm] > nodeItemCompact_withholdsTheMarkerFromAnMqttNode()[jvm] PASSED - -NodeItemUnheardMarkerTest[jvm] > nodeItem_withholdsTheMarkerFromAnMqttNode()[jvm] PASSED - -NodeItemUnheardMarkerTest[jvm] > nodeItemCompact_marksANodeNotHeardOnTheConfigInForceNow()[jvm] PASSED - -NodeItemUnheardMarkerTest[jvm] > nodeItem_marksANodeNotHeardOnTheConfigInForceNow()[jvm] PASSED - -SignalInfoUiTest[jvm] > signalInfoStaysSnrOnlyWithoutANoiseFloor()[jvm] PASSED - -SignalInfoUiTest[jvm] > signalInfoBlendsInTheNoiseFloorWhenKnown()[jvm] PASSED - -AqiSeverityColorsTest[jvm] > everyAqiCategoryToneMeetsAaTextContrastInBothThemes()[jvm] PASSED - -AqiSeverityColorsTest[jvm] > everyCategoryHasItsOwnTonePair()[jvm] PASSED - -AqiSeverityColorsTest[jvm] > forcedThemeSelectsThatThemesTone()[jvm] PASSED - -AqiSeverityColorsTest[jvm] > staticSurfacesFallOnTheExpectedSideOfTheDarkThresholdColorUses()[jvm] PASSED - -AqiSeverityColorsTest[jvm] > lightAndDarkTonesDifferSoNeitherThemeReusesTheOther()[jvm] PASSED - -AlertManagerUiTest[jvm] > alertManager_confirmButton_triggersCallbackAndDismisses()[jvm] PASSED - -AlertManagerUiTest[jvm] > alertManager_showsAlert_whenRequested()[jvm] PASSED - -PermissionStatusTest[jvm] > a first request skips the rationale()[jvm] PASSED - -PermissionStatusTest[jvm] > permanently denied only when requested and rationale suppressed()[jvm] PASSED - -PermissionStatusTest[jvm] > requireAll false accepts a coarse-only grant()[jvm] PASSED - -PermissionStatusTest[jvm] > a re-request must be preceded by a rationale()[jvm] PASSED - -PermissionStatusTest[jvm] > not requested when the user has never been prompted()[jvm] PASSED - -PermissionStatusTest[jvm] > every status maps to a distinct gate action()[jvm] PASSED - -PermissionStatusTest[jvm] > requireAll true demands every permission()[jvm] PASSED - -PermissionStatusTest[jvm] > a permanent denial offers settings rather than a silent no-op request()[jvm] PASSED - -PermissionStatusTest[jvm] > denied can retry when requested and rationale should still show()[jvm] PASSED - -PermissionStatusTest[jvm] > granted always wins regardless of other inputs()[jvm] PASSED - -PermissionStatusTest[jvm] > a held permission proceeds()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:connections:jvmTest - -DeviceListEntryTest[jvm] > replay_uses_interface_id_prefix()[jvm] PASSED - -DeviceListEntryTest[jvm] > mock_uses_interface_id_prefix()[jvm] PASSED - -CurrentlyConnectedInfoRssiLifecycleTest[jvm] > pollingFollowsLifecycleAndConnectionState()[jvm] PASSED - -DeviceListItemRssiTest[jvm] > zeroRssi_rendersAsZeroDbm()[jvm] PASSED - -DeviceListItemRssiTest[jvm] > absentRssi_rendersNoReadingAtAll()[jvm] PASSED - -DeviceListItemRssiTest[jvm] > negativeRssi_rendersTheReading()[jvm] PASSED - -ConfigurationWarningCardsTest[jvm] > transmit card renders only when region is already configured()[jvm] PASSED - -ConfigurationWarningCardsTest[jvm] > managed policy suppresses configuration warning cards even after lockdown unlock()[jvm] PASSED - -ConfigurationWarningCardsTest[jvm] > pending lockdown response suppresses configuration warning cards()[jvm] PASSED - -ConfigurationWarningCardsTest[jvm] > region card renders when connected policy allows local writes()[jvm] PASSED - -ConfigurationWarningCardsTest[jvm] > virtual device suppresses configuration warning cards()[jvm] PASSED - -ConfigurationWarningCardsTest[jvm] > pending node readiness suppresses configuration warning cards()[jvm] PASSED - -> Task :feature:docs:compileKotlinIosSimulatorArm64 -> Task :feature:docs:iosSimulatorArm64MainKlibrary - -> Task :feature:connections:testAndroidHostTest - -ScannerViewModelTest > startBleScan succeeds while Connecting PASSED - -ScannerViewModelTest > startBleScan updates isBleScanning PASSED - -ScannerViewModelTest > selecting USB stops all active scans PASSED - -ScannerViewModelTest > discoveredTcpDevicesForUi is empty when not scanning PASSED - -ScannerViewModelTest > bleDevicesForUi keeps the selected device visible even when not seen via scan PASSED - -ScannerViewModelTest > connectionProgressText reflects connectionProgress PASSED - -ScannerViewModelTest > isNetworkScanning defaults to false PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testShowReplayAddsReplayAlongsideDemo PASSED - -ScannerViewModelTest > a scan that starts clears a stale permission refusal PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testHideMockNoDemo PASSED - -ScannerViewModelTest > connectionState transition to Connected cancels active network scan PASSED - -ScannerViewModelTest > replay is requested only when the transport reports the capture asset PASSED - -ScannerViewModelTest > persistNetworkAutoScanIntent true clears bleAutoScan PASSED - -ScannerViewModelTest > selecting TCP stops active ble scan PASSED - -ScannerViewModelTest > scan startup failure clears scanning state disables auto-scan and surfaces error PASSED - -ScannerViewModelTest > bleDevicesForUi shows bonded devices only once they are visible via scan PASSED - -ScannerViewModelTest > stopBleScan does not clear scanned devices PASSED - -ScannerViewModelTest > showMockTransport follows the transport gate after construction PASSED - -ScannerViewModelTest > scan startup failure cooldown prevents immediate retry and allows later manual retry PASSED - -ScannerViewModelTest > toggleBleScan enabling scan clears networkAutoScan PASSED - -ScannerViewModelTest > startBleAutoScan starts when no device selected PASSED - -ScannerViewModelTest > scan quota failure honors retry-after cooldown PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testDiscoveredTcpDeviceMatchesNode PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testRecentAddressesAreSortedByName PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testEmptyResolvedListReturnsNoDiscoveredDevices PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testNodeNotMatchedWhenNoDatabaseExists PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testShowMockAddsDemoOnly PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testEmptyRecentAddresses PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testNodeMatchingWithSuffix PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testEmptyResolvedListIncludesMock PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testReactiveNodeUpdates PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testDiscoveredTcpDevices PASSED - -CommonGetDiscoveredDevicesUseCaseTest > testShowReplayIgnoredWhenMockHidden PASSED - -ScannerViewModelTest > startBleScan cancels active network scan PASSED - -ScannerViewModelTest > location-services-disabled failure allows an immediate retry PASSED - -ScannerViewModelTest > startBleAutoScan skips when device already selected PASSED - -ScannerViewModelTest > startBleAutoScan starts only when active transport is BLE PASSED - -ScannerViewModelTest > connectToManualAddress stops active network scan and changes device address PASSED - -ScannerViewModelTest > onSelected TCP stops active network scan before changing device PASSED - -ScannerViewModelTest > active transport defaults to BLE when no selected device or preference exists PASSED - -ScannerViewModelTest > startNetworkScan updates isNetworkScanning PASSED - -ScannerViewModelTest > replay is not requested when the capture asset is absent PASSED - -ScannerViewModelTest > explicit active transport preference wins over selected device type PASSED - -ScannerViewModelTest > testInitialization PASSED - -ScannerViewModelTest > connectionState transition to Connected cancels active ble scan PASSED - -ScannerViewModelTest > stopBleScan is idempotent after failed startup PASSED - -ScannerViewModelTest > dismissRecovery clears the pending recovery record PASSED - -ScannerViewModelTest > missing scan permission raises no modal but flags a refusal PASSED - -ScannerViewModelTest > onSelected bonded BLE stops active scan before changing device PASSED - -ScannerViewModelTest > a mid-session unlock re-queries the device list PASSED - -ScannerViewModelTest > startNetworkScan cancels active ble scan PASSED - -ScannerViewModelTest > toggleNetworkScan enabling scan clears bleAutoScan PASSED - -ScannerViewModelTest > changeDeviceAddress calls radioController PASSED - -ScannerViewModelTest > bluetooth-disabled failure allows an immediate retry once the user re-enables it PASSED - -ScannerViewModelTest > selecting BLE stops active network scan PASSED - -ScannerViewModelTest > usbDevicesForUi emits updates PASSED - -ScannerViewModelTest > startNetworkAutoScan starts only when active transport is TCP PASSED - -ScannerViewModelTest > startBleScan succeeds while DeviceSleep PASSED - -ScannerViewModelTest > startNetworkScan succeeds while Connected PASSED - -ScannerViewModelTest > startBleScan succeeds while Connected PASSED - -ScannerViewModelTest > active transport defaults to selected device type when no explicit preference exists PASSED - -ScannerViewModelTest > onSelected records active transport for BLE TCP and USB entries PASSED - -ScannerViewModelTest > discoveredTcpDevicesForUi populates when scanning is active PASSED - -LocalNetworkGateTest > a first denial warns and runs the stashed connect anyway PASSED - -LocalNetworkGateTest > retryable denial explains before prompting again PASSED - -LocalNetworkGateTest > never requested prompts in-context PASSED - -LocalNetworkGateTest > granted proceeds silently PASSED - -LocalNetworkGateTest > permanent denial warns but still proceeds because the system will not prompt again PASSED - -LocalNetworkGateTest > an unchanged status keeps waiting for the request to resolve PASSED - -LocalNetworkGateTest > a denial that becomes permanent warns and runs the stashed connect anyway PASSED - -LocalNetworkGateTest > a grant runs the stashed connect PASSED - -> Task :core:ui:allTests -> Task :androidApp:dexBuilderGoogleDebug - -> Task :feature:docs:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/docs/src/commonTest/kotlin/org/meshtastic/feature/docs/translation/TranslationCascadeTest.kt:99:38 Cast is redundant. - -> Task :feature:docs:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:docs:iosSimulatorArm64Test SKIPPED - -> Task :feature:discovery:jvmTest - -DiscoveryHomeRestorerTest[jvm] > unrestorablePersistenceFailureKeepsSameDeviceBarrierRecoverable()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > schedulingDifferentSessionCancelsAndReplacesPendingRestore()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > unsatisfiablePrimaryChannelRestoreStopsWithoutRetrying()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > transientDisconnectFailuresDoNotConsumeTheActiveRetryBudget()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > discoveryTestRadioControllerRejectsStaleDeviceBeforeWriting()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > interruptedRecoverySwitchesActiveWatcherToNewlySelectedDevice()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > selectPresetFilter_null_resetsToAll()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > topologyOverlay_defaultOff()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > ownershipRejectionDoesNotConsumeTheRestoreRetryBudget()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > selectedDeviceChangeWakesDisconnectedRestoreWaiter()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > sameSessionIdOnDifferentDeviceReplacesPendingRestore()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > selectPresetFilter_updatesState()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > supersededRestoreReturnsFalseToForegroundWaiterWithoutCancellingIt()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > toggleTopologyOverlay_turnsOff()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > repeatedScheduleForSameActiveSessionIsIdempotent()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > finalStatusMappingPreservesTerminalIntentAndDefaultsRecoveredStates()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > toggleTopologyOverlay_turnsOn()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > discoveryMapStats_dataClass_equality()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > permanentWriteFailureStopsAfterBoundedAttemptsAndMarksSessionUnrestorable()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > updateFinalStatusChangesAndCorrectsTheTerminalStatusPublishedByARestore()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > transientWriteFailuresRetryWithBackoffWhileTheSameDeviceRemainsConnected()[jvm] PASSED - -DiscoveryHomeRestorerTest[jvm] > persistentOwnershipRejectionStopsWithoutMarkingTheSessionUnrestorable()[jvm] PASSED - -> Task :feature:docs:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/docs/src/commonTest/kotlin/org/meshtastic/feature/docs/translation/TranslationCascadeTest.kt:99:38 Cast is redundant. - -> Task :feature:docs:compileJvmTestJava NO-SOURCE -> Task :feature:docs:jvmTestClasses - -> Task :feature:connections:testAndroidHostTest - -DeviceListEntryTest > replay_uses_interface_id_prefix PASSED - -DeviceListEntryTest > mock_uses_interface_id_prefix PASSED - -TcpDiscoveryHelpersTest > findNodeByNameSuffix returns null when no database PASSED - -TcpDiscoveryHelpersTest > buildRecentTcpEntries dedupes repeated addresses PASSED - -TcpDiscoveryHelpersTest > findNodeByNameSuffix matches by last underscore segment PASSED - -TcpDiscoveryHelpersTest > buildRecentTcpEntries results are sorted by name PASSED - -TcpDiscoveryHelpersTest > buildRecentTcpEntries matches node by suffix PASSED - -TcpDiscoveryHelpersTest > processTcpServices results are sorted by name PASSED - -TcpDiscoveryHelpersTest > processTcpServices uses default shortname when missing PASSED - -TcpDiscoveryHelpersTest > matchDiscoveredTcpNodes matches node by device id PASSED - -TcpDiscoveryHelpersTest > matchDiscoveredTcpNodes returns null node when no database PASSED - -TcpDiscoveryHelpersTest > processTcpServices dedupes services resolving to the same address PASSED - -TcpDiscoveryHelpersTest > findNodeByNameSuffix returns null when suffix is too short PASSED - -TcpDiscoveryHelpersTest > processTcpServices uses recent name over shortname PASSED - -TcpDiscoveryHelpersTest > buildRecentTcpEntries filters out discovered addresses PASSED - -TcpDiscoveryHelpersTest > processTcpServices does not duplicate id in display name PASSED - -TcpDiscoveryHelpersTest > processTcpServices maps services to DeviceListEntry with shortname and id PASSED - -AndroidScannerViewModelBondingTest > CancellationException from bond propagates without arming transport PASSED - -AndroidScannerViewModelBondingTest > bond failure after Android records bond still arms the transport PASSED - -AndroidScannerViewModelBondingTest > successful bond arms the transport PASSED - -AndroidScannerViewModelBondingTest > generic bond failure does not arm the transport and surfaces an error PASSED - -AndroidScannerViewModelBondingTest > security exception does not arm the transport and flags a permission refusal PASSED - -AndroidScannerViewModelBondingTest > already bonded entry arms the transport without bonding PASSED - -ConnectionsScreenWarningPolicyTest > config warnings show when lockdown is explicitly disabled PASSED - -ConnectionsScreenWarningPolicyTest > config warnings stay hidden without a connected node PASSED - -ConnectionsScreenWarningPolicyTest > config warnings stay hidden while lockdown response is pending PASSED - -ConnectionsScreenWarningPolicyTest > config warnings stay hidden for managed devices after lockdown unlock PASSED - -ConnectionsScreenWarningPolicyTest > config warnings stay hidden for virtual devices PASSED - -ConnectionsScreenWarningPolicyTest > config warnings stay hidden while config writes are locked PASSED - -ConnectionsScreenWarningPolicyTest > config warnings wait for the active node handshake PASSED - -ConnectionsScreenWarningPolicyTest > config warnings show when lockdown is absent and managed mode allows local config PASSED - -ConnectionsScreenWarningPolicyTest > config warnings show once the active node is ready and policy allows writes PASSED - -> Task :feature:firmware:compileKotlinIosSimulatorArm64 -> Task :feature:firmware:iosSimulatorArm64MainKlibrary - -> Task :feature:discovery:jvmTest - -DiscoveryMapFilterTest[jvm] > sharedDaoFlowsObserveWritesAfterSubscription()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > defaultFilter_isNull_showsAllPresets()[jvm] PASSED - -DiscoveryMapFilterTest[jvm] > mapStats_initiallyZero()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_supported_when_tag_contains_2_4ghz()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_supported_when_slug_contains_2400()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_unsupported_when_tag_contains_sx1262()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_unknown_when_no_evidence_available()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_tag_matching_is_case_insensitive()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_unsupported_when_tag_contains_sub_ghz_only()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_unknown_when_tags_are_null()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_supported_when_tag_contains_lora24()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_supported_when_tag_contains_sx1280()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_supported_tag_takes_precedence_when_both_present()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_supported_when_target_contains_lora24()[jvm] PASSED - -Check24GhzCapabilityTest[jvm] > evaluate_returns_supported_when_target_contains_sx1280()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > sessionLoadById_returnsStoredSession()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > sessionLoadById_returnsNullForMissing()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > getAllSessions_emptyListWhenNoSessions()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > deleteSession_doesNotAffectOtherSessions()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > getAllSessions_returnsNewestFirst()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > deleteAllSessions_leavesEmptyHistory()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > deleteSession_removesFromHistory()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > getAllSessions_singleSession()[jvm] PASSED - -DiscoveryHistoryBehaviorTest[jvm] > deleteSession_cascadesPresetResultsAndNodes()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > criterion5BestKnownDistanceBreaksTie()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > criterion2NeighborDiversityBreaksTie()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > noNodesProducesZeroMediansAndDistance()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > criterion4MedianSnrBreaksTie()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > emptyInputReturnsEmptyOutput()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > threePresetsWithOneFailedStillRanked()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > allCriteriaTiedMarkedAsTied()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > criterion6LowestFailurePenaltyBreaksTie()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > singlePresetAlwaysRank1NotTied()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > nodesWithoutDistanceYieldZeroBestDistance()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > presetWithNoRssiReadingsDoesNotOutrankMeasuredPreset()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > negativeDupeCountClampedToZero()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > criterion4MedianRssiBreaksTieOnSnr()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > criterion1UniqueNodeCountDecides()[jvm] PASSED - -DiscoveryRankingEngineTest[jvm] > criterion3NonDupePacketCountBreaksTie()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > absentRssiPersistsAsNullRatherThanZero()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > newScanWaitsForPendingHomeRestoreBeforeRetuning()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > stopScanRetriesHomeRestoreAfterTransientWriteFailure()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > completeScanCreatesSessionWithInProgressStatus()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > scanIsRefusedWhenHomeLoraConfigCannotBeCaptured()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > resetAndNewScanCannotDisplaceActiveTerminalCleanup()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > normalCompletionRestoresHomePreset()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > stopScanRestoresHomePreset()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > stopScanPersistsResultsAndTransitionsToIdle()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > transportRestartDuringSessionInsertAbortsScanBeforePublication()[jvm] PASSED - -DiscoveryTerminalCoordinatorTest[jvm] > joinedOutcomeDoesNotOverwriteStateAfterTerminalReset()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > distanceFromUserCalculatedForDiscoveredNodes()[jvm] PASSED - -DiscoveryPacketCollectionTest[jvm] > neighborInfoOnlyNodeIsMarkedAsMesh()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > userPositionCapturedAtScanStart()[jvm] PASSED - -DiscoveryPacketCollectionTest[jvm] > neighborInfoDoesNotOverrideDirectType()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > unsupported_provider_returns_null_for_preset_summary()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > failing_provider_returns_null_on_session_error()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > targetShiftFailureFailsScanAndStillRestoresHomePreset()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > algorithmic_generator_handles_empty_presets()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > terminalPersistenceFailureCannotSuppressHomeRestoration()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > failing_provider_returns_null_on_preset_error()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > unsupported_provider_returns_null_for_session_summary()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > packetCollectionPopulatesNodeData()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > supported_provider_returns_preset_summary()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > unsupported_provider_reports_not_available()[jvm] PASSED - -DiscoveryPacketCollectionTest[jvm] > duplicatePacketsCountMessagesAccumulatively()[jvm] PASSED - -DiscoveryPacketCollectionTest[jvm] > nodeWithZeroPositionTreatedAsNoPosition()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > dwellFailurePersistsNodesCollectedBeforeTheAbort()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > algorithmic_generator_produces_non_null_summary()[jvm] PASSED - -DiscoverySummaryAiProviderTest[jvm] > supported_provider_returns_session_summary()[jvm] PASSED - -DiscoveryPacketCollectionTest[jvm] > duplicatePacketsFromSameNodeDeduplicateByNodeNum()[jvm] PASSED - -DiscoveryPacketCollectionTest[jvm] > neighborInfoMultipleNeighborsAllRecorded()[jvm] PASSED - -DiscoveryPacketCollectionTest[jvm] > nodeWithoutPositionHasNullLatLon()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > equalTrafficMixNoNote()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > singlePresetSessionMentionsPresetName()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummaryLowCongestionNotMarked()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetPromptContainsPresetName()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > multiPresetSessionRanksByNodeCount()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummaryHighCongestionMarked()[jvm] PASSED - -DiscoveryViewModelTest[jvm] > offer for an unconfigured channel passes through both filters()[jvm] PASSED - -DiscoveryViewModelTest[jvm] > offer matching a configured channel is dropped from both filters()[jvm] PASSED - -DiscoveryViewModelTest[jvm] > reactively combining offers with a later-changing channel set brings a filtered invitation back()[jvm] PASSED - -DiscoveryViewModelTest[jvm] > filtering never mutates the offers list it is given()[jvm] PASSED - -DiscoveryViewModelTest[jvm] > beacon channels filter still deduplicates by id once already-joined entries are removed()[jvm] PASSED - -DiscoveryTerminalCoordinatorTest[jvm] > joinedRestoreFailurePublishesTheDowngradedOutcome()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > restoreWatcherPublishesASingleNotificationWhenRestoreCompletesAfterForegroundTimeout()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > dwellPersistenceIsSkippedWhenTheSessionLeavesTheActiveDatabase()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > deviceSwitchCancelsOldProcessRestoreWithoutApplyingItToReplacement()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > restoreInterruptedSessionsOnReconnectSkipsWhileScanActive()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > neighborRequestQueueRejectionKeepsBestEffortScanRunning()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > scanIsRefusedWithoutSelectedDeviceOwnership()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > deviceSwitchDuringSessionInsertAbortsScanBeforePublication()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > stopRacingLastDwellPersistenceDoesNotInsertTheResultTwice()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > localIdentityLossDuringNeighborRequestKeepsBestEffortScanRunning()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > reportedZeroRssiIsRecordedRatherThanDiscarded()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > stopDuringNaturalTerminalCleanupDoesNotReplaceSuccessfulCompletion()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > highCongestionGeneratesWarning()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummarySensorDominated()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > sensorDominatedTrafficNoted()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > chatDominatedTrafficNoted()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > lowCongestionNoWarning()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummaryChatDominated()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > concurrentStopsShareOneTerminalCleanupAndHomeRestore()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > reconnectTimeoutAbortsRestoresHomePresetAndFinalizesSession()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > sessionPromptContainsSessionMetadata()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > completedSessionRecommendationSaysCompleted()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > stoppedSessionRecommendationSaysPartial()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetPromptContainsMetrics()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > sessionPromptContainsCongestionGuidance()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummaryIncludesChannelUtilization()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > sessionPromptContainsPresetData()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > multiPresetSessionMentionsAlternativePresets()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummaryIncludesNodeCounts()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > restoreWatcherSurvivesWriteFailureAndRetriesOnNextReconnect()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > restoreInterruptedSessionsOnReconnectIgnoresDifferentDevice()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > emptyPresetDwellPersistsZeroResultEntry()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > restoreInterruptedSessionsOnReconnectFinalizesPendingCompleteWithoutLegacyRestorePlan()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > restoreInterruptedSessionsOnReconnectTerminalizesUnrestorableSession()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > recommendationIncludesBestPresetName()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > sessionPromptContainsChannelUtilization()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > sessionPromptContainsInstructions()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetPromptContainsGuidanceContext()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > emptyPresetsReturnsNoPresetsMessage()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummaryIncludesPresetName()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > lowTrafficCountsNoMixNote()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > presetSummaryKnownPresetIncludesDataRate()[jvm] PASSED - -DiscoverySummaryGeneratorTest[jvm] > singlePresetSessionIncludesChannelUtilization()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > restoreInterruptedSessionsOnReconnectRestoresMatchingDevice()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > telemetryWithLocalStatsPopulatesRfHealth()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > startScanCreatesSessionAndRegistersCollector()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > startScanCapturesDeviceAddressAndHomeConfigForLaterRestore()[jvm] PASSED - -DiscoveryScanEngineTest[jvm] > terminalAggregateWriteDoesNotOverwriteAConcurrentRestoreStatus()[jvm] PASSED - -DiscoveryTestRadioControllerTest[jvm] > restoreLocalConfigurationSerializesDeviceSelection()[jvm] PASSED - -DiscoveryTestRadioControllerTest[jvm] > requestNeighborInfoPropagatesConfiguredFailure()[jvm] PASSED - -DiscoveryTestRadioControllerTest[jvm] > restoreLocalConfigurationRejectsMissingExpectedDeviceOwnership()[jvm] PASSED - -> Task :feature:connections:allTests -> Task :androidApp:packageFdroidDebug -> Task :feature:intro:compileTestKotlinJvm -> Task :androidApp:assembleFdroidDebug -> Task :feature:intro:compileJvmTestJava NO-SOURCE -> Task :feature:intro:jvmTestClasses -> Task :androidApp:createFdroidDebugApkListingFileRedirect -> Task :feature:discovery:testAndroidHostTest -> Task :feature:intro:compileKotlinIosSimulatorArm64 -> Task :feature:intro:iosSimulatorArm64MainKlibrary - -> Task :androidApp:testGoogleDebugUnitTest - -SoftDeviceQuirkCoverageTest > every nrf52840 model in the hardware catalog has a softdevice mapping PASSED - -SoftDeviceQuirkCoverageTest > every mapped target exists in the hardware catalog PASSED - -SoftDeviceQuirkCoverageTest > known-unmapped models are present but deliberately carry no softdevice PASSED - -SoftDeviceQuirkCoverageTest > every nrf52840 catalog target is covered by its model's row PASSED - -SoftDeviceQuirkCoverageTest > every softdevice value is one the app ships an erase image for PASSED - -SoftDeviceQuirkCoverageTest > mesh tracker x1 is mapped, since the web flasher omits it PASSED - -> Task :feature:intro:compileTestKotlinIosSimulatorArm64 -> Task :feature:intro:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:intro:iosSimulatorArm64Test SKIPPED - -> Task :feature:discovery:testAndroidHostTest - -DiscoveryHistoryBehaviorTest > sessionLoadById_returnsStoredSession PASSED - -DiscoveryHistoryBehaviorTest > sessionLoadById_returnsNullForMissing PASSED - -DiscoveryHistoryBehaviorTest > getAllSessions_emptyListWhenNoSessions PASSED - -DiscoveryHistoryBehaviorTest > deleteSession_doesNotAffectOtherSessions PASSED - -DiscoveryHistoryBehaviorTest > getAllSessions_returnsNewestFirst PASSED - -DiscoveryHistoryBehaviorTest > deleteAllSessions_leavesEmptyHistory PASSED - -DiscoveryHistoryBehaviorTest > deleteSession_removesFromHistory PASSED - -DiscoveryHistoryBehaviorTest > getAllSessions_singleSession PASSED - -DiscoveryHistoryBehaviorTest > deleteSession_cascadesPresetResultsAndNodes PASSED - -DiscoveryScanEngineTest > absentRssiPersistsAsNullRatherThanZero PASSED - -DiscoveryScanEngineTest > newScanWaitsForPendingHomeRestoreBeforeRetuning PASSED - -DiscoveryScanEngineTest > stopScanRetriesHomeRestoreAfterTransientWriteFailure PASSED - -DiscoveryScanEngineTest > completeScanCreatesSessionWithInProgressStatus PASSED - -DiscoveryScanEngineTest > scanIsRefusedWhenHomeLoraConfigCannotBeCaptured PASSED - -DiscoveryScanEngineTest > resetAndNewScanCannotDisplaceActiveTerminalCleanup PASSED - -DiscoveryScanEngineTest > normalCompletionRestoresHomePreset PASSED - -DiscoveryScanEngineTest > stopScanRestoresHomePreset PASSED - -DiscoveryScanEngineTest > stopScanPersistsResultsAndTransitionsToIdle PASSED - -DiscoveryScanEngineTest > transportRestartDuringSessionInsertAbortsScanBeforePublication PASSED - -DiscoveryScanEngineTest > distanceFromUserCalculatedForDiscoveredNodes PASSED - -DiscoveryScanEngineTest > userPositionCapturedAtScanStart PASSED - -DiscoveryScanEngineTest > targetShiftFailureFailsScanAndStillRestoresHomePreset PASSED - -DiscoveryScanEngineTest > terminalPersistenceFailureCannotSuppressHomeRestoration PASSED - -DiscoveryScanEngineTest > packetCollectionPopulatesNodeData PASSED - -DiscoveryScanEngineTest > dwellFailurePersistsNodesCollectedBeforeTheAbort PASSED - -DiscoveryScanEngineTest > restoreWatcherPublishesASingleNotificationWhenRestoreCompletesAfterForegroundTimeout PASSED - -DiscoveryScanEngineTest > dwellPersistenceIsSkippedWhenTheSessionLeavesTheActiveDatabase PASSED - -DiscoveryScanEngineTest > deviceSwitchCancelsOldProcessRestoreWithoutApplyingItToReplacement PASSED - -DiscoveryScanEngineTest > restoreInterruptedSessionsOnReconnectSkipsWhileScanActive PASSED - -DiscoveryScanEngineTest > neighborRequestQueueRejectionKeepsBestEffortScanRunning PASSED - -DiscoveryScanEngineTest > scanIsRefusedWithoutSelectedDeviceOwnership PASSED - -DiscoveryScanEngineTest > deviceSwitchDuringSessionInsertAbortsScanBeforePublication PASSED - -DiscoveryScanEngineTest > stopRacingLastDwellPersistenceDoesNotInsertTheResultTwice PASSED - -DiscoveryScanEngineTest > localIdentityLossDuringNeighborRequestKeepsBestEffortScanRunning PASSED - -DiscoveryScanEngineTest > reportedZeroRssiIsRecordedRatherThanDiscarded PASSED - -DiscoveryScanEngineTest > stopDuringNaturalTerminalCleanupDoesNotReplaceSuccessfulCompletion PASSED - -DiscoveryScanEngineTest > concurrentStopsShareOneTerminalCleanupAndHomeRestore PASSED - -DiscoveryScanEngineTest > reconnectTimeoutAbortsRestoresHomePresetAndFinalizesSession PASSED - -DiscoveryScanEngineTest > restoreWatcherSurvivesWriteFailureAndRetriesOnNextReconnect PASSED - -DiscoveryScanEngineTest > restoreInterruptedSessionsOnReconnectIgnoresDifferentDevice PASSED - -DiscoveryScanEngineTest > emptyPresetDwellPersistsZeroResultEntry PASSED - -DiscoveryScanEngineTest > restoreInterruptedSessionsOnReconnectFinalizesPendingCompleteWithoutLegacyRestorePlan PASSED - -DiscoveryScanEngineTest > restoreInterruptedSessionsOnReconnectTerminalizesUnrestorableSession PASSED - -DiscoveryScanEngineTest > restoreInterruptedSessionsOnReconnectRestoresMatchingDevice PASSED - -DiscoveryScanEngineTest > telemetryWithLocalStatsPopulatesRfHealth PASSED - -DiscoveryScanEngineTest > startScanCreatesSessionAndRegistersCollector PASSED - -DiscoveryScanEngineTest > startScanCapturesDeviceAddressAndHomeConfigForLaterRestore PASSED - -DiscoveryScanEngineTest > terminalAggregateWriteDoesNotOverwriteAConcurrentRestoreStatus PASSED - -DiscoveryViewModelTest > offer for an unconfigured channel passes through both filters PASSED - -DiscoveryViewModelTest > offer matching a configured channel is dropped from both filters PASSED - -DiscoveryViewModelTest > reactively combining offers with a later-changing channel set brings a filtered invitation back PASSED - -DiscoveryViewModelTest > filtering never mutates the offers list it is given PASSED - -DiscoveryViewModelTest > beacon channels filter still deduplicates by id once already-joined entries are removed PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:firmware:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/CommonMaintenanceVolumeTest.kt:40:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/CommonUsbPassWriterTest.kt:42:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:48:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:214:13 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:240:13 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/Esp32OtaUpdateHandlerTest.kt:377:13 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/Esp32OtaUpdateHandlerTest.kt:411:13 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:432:40 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:434:30 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:436:35 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:438:41 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:440:36 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:648:9 This class or interface requires opt-in to be implemented: Inheriting from this kotlinx.coroutines API is unstable. Either new methods may be added in the future, which would break the inheritance, or correctly inheriting from it requires fulfilling contracts that may change in the future. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:974:29 'fun CoroutineScope.async(context: Job, start: CoroutineStart = ..., block: suspend CoroutineScope.() -> T): Deferred' is deprecated. Passing a Job to coroutine builders breaks structured concurrency, leading to hard-to-diagnose errors. This pattern should be avoided. This overload will be deprecated with an error in the future. - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:firmware:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/CommonMaintenanceVolumeTest.kt:40:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/CommonUsbPassWriterTest.kt:42:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:48:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:214:13 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:240:13 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/Esp32OtaUpdateHandlerTest.kt:377:13 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/Esp32OtaUpdateHandlerTest.kt:411:13 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:432:40 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:434:30 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:436:35 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:438:41 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:440:36 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:648:9 This class or interface requires opt-in to be implemented: Inheriting from this kotlinx.coroutines API is unstable. Either new methods may be added in the future, which would break the inheritance, or correctly inheriting from it requires fulfilling contracts that may change in the future. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:974:29 'fun CoroutineScope.async(context: Job, start: CoroutineStart = ..., block: suspend CoroutineScope.() -> T): Deferred' is deprecated. Passing a Job to coroutine builders breaks structured concurrency, leading to hard-to-diagnose errors. This pattern should be avoided. This overload will be deprecated with an error in the future. - -> Task :feature:firmware:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:firmware:iosSimulatorArm64Test SKIPPED -> Task :feature:firmware:compileJvmTestJava NO-SOURCE -> Task :feature:firmware:jvmTestClasses -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.conscrypt.NativeLibraryUtil in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.conscrypt/conscrypt-openjdk-uber/2.6.2/65c5977595ee9cc12e6017b9d43b1d2e3d1bab63/conscrypt-openjdk-uber-2.6.2.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:discovery:testAndroidHostTest - -Check24GhzCapabilityTest > evaluate_returns_supported_when_tag_contains_2_4ghz PASSED - -Check24GhzCapabilityTest > evaluate_returns_supported_when_slug_contains_2400 PASSED - -Check24GhzCapabilityTest > evaluate_returns_unsupported_when_tag_contains_sx1262 PASSED - -Check24GhzCapabilityTest > evaluate_returns_unknown_when_no_evidence_available PASSED - -Check24GhzCapabilityTest > evaluate_tag_matching_is_case_insensitive PASSED - -Check24GhzCapabilityTest > evaluate_returns_unsupported_when_tag_contains_sub_ghz_only PASSED - -Check24GhzCapabilityTest > evaluate_returns_unknown_when_tags_are_null PASSED - -Check24GhzCapabilityTest > evaluate_returns_supported_when_tag_contains_lora24 PASSED - -Check24GhzCapabilityTest > evaluate_returns_supported_when_tag_contains_sx1280 PASSED - -Check24GhzCapabilityTest > evaluate_supported_tag_takes_precedence_when_both_present PASSED - -Check24GhzCapabilityTest > evaluate_returns_supported_when_target_contains_lora24 PASSED - -Check24GhzCapabilityTest > evaluate_returns_supported_when_target_contains_sx1280 PASSED - -DiscoveryRankingEngineTest > criterion5BestKnownDistanceBreaksTie PASSED - -DiscoveryRankingEngineTest > criterion2NeighborDiversityBreaksTie PASSED - -DiscoveryRankingEngineTest > noNodesProducesZeroMediansAndDistance PASSED - -DiscoveryRankingEngineTest > criterion4MedianSnrBreaksTie PASSED - -DiscoveryRankingEngineTest > emptyInputReturnsEmptyOutput PASSED - -DiscoveryRankingEngineTest > threePresetsWithOneFailedStillRanked PASSED - -DiscoveryRankingEngineTest > allCriteriaTiedMarkedAsTied PASSED - -DiscoveryRankingEngineTest > criterion6LowestFailurePenaltyBreaksTie PASSED - -DiscoveryRankingEngineTest > singlePresetAlwaysRank1NotTied PASSED - -DiscoveryRankingEngineTest > nodesWithoutDistanceYieldZeroBestDistance PASSED - -DiscoveryRankingEngineTest > presetWithNoRssiReadingsDoesNotOutrankMeasuredPreset PASSED - -DiscoveryRankingEngineTest > negativeDupeCountClampedToZero PASSED - -DiscoveryRankingEngineTest > criterion4MedianRssiBreaksTieOnSnr PASSED - -DiscoveryRankingEngineTest > criterion1UniqueNodeCountDecides PASSED - -DiscoveryRankingEngineTest > criterion3NonDupePacketCountBreaksTie PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.robolectric.nativeruntime.DefaultNativeRuntimeLoader in an unnamed module -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:firmware:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/CommonMaintenanceVolumeTest.kt:40:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/CommonUsbPassWriterTest.kt:42:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:48:9 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:214:13 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/UsbMaintenanceGateTest.kt:240:13 Redundant creation of Json format. Creating instances for each use can be slow. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/Esp32OtaUpdateHandlerTest.kt:377:13 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/Esp32OtaUpdateHandlerTest.kt:411:13 Expression is unused. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:432:40 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:434:30 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:436:35 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:438:41 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:440:36 The corresponding parameter in the supertype 'BleService' is named 'characteristic'. This may cause problems when calling this function with named arguments. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:648:9 This class or interface requires opt-in to be implemented: Inheriting from this kotlinx.coroutines API is unstable. Either new methods may be added in the future, which would break the inheritance, or correctly inheriting from it requires fulfilling contracts that may change in the future. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuTransportTest.kt:974:29 'fun CoroutineScope.async(context: Job, start: CoroutineStart = ..., block: suspend CoroutineScope.() -> T): Deferred' is deprecated. Passing a Job to coroutine builders breaks structured concurrency, leading to hard-to-diagnose errors. This pattern should be avoided. This overload will be deprecated with an error in the future. - -> Task :feature:discovery:testAndroidHostTest - -DiscoveryTestRadioControllerTest > restoreLocalConfigurationSerializesDeviceSelection PASSED - -DiscoveryTestRadioControllerTest > requestNeighborInfoPropagatesConfiguredFailure PASSED - -DiscoveryTestRadioControllerTest > restoreLocalConfigurationRejectsMissingExpectedDeviceOwnership PASSED - -> Task :androidApp:mergeProjectDexGoogleDebug - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.robolectric.nativeruntime.DefaultNativeRuntimeLoader in an unnamed module -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:intro:jvmTest - -IntroPermissionActionTest[jvm] > granted advances()[jvm] PASSED - -IntroPermissionActionTest[jvm] > permanent denial routes to app settings rather than a no-op request()[jvm] PASSED - -IntroPermissionActionTest[jvm] > a single denial still requests because the system will still prompt()[jvm] PASSED - -IntroPermissionActionTest[jvm] > never asked requests()[jvm] PASSED - -> Task :feature:map:compileKotlinIosSimulatorArm64 -> Task :feature:map:iosSimulatorArm64MainKlibrary -> Task :feature:intro:compileAndroidHostTest - -> Task :androidApp:testGoogleDebugUnitTest - -GoogleMapImportedIconStyleTest > relative icon url is preserved for imported geojson points PASSED - -GoogleMapImportedIconStyleTest > remote icon url is stripped from imported geojson points PASSED - -ShareMessageDeepLinkTest > shared text round trips through the deep link query PASSED - -> Task :feature:intro:jvmTest - -IntroViewModelTest[jvm] > testWelcomeNavigatesNextToBluetooth()[jvm] PASSED - -IntroViewModelTest[jvm] > testLocationNavigatesToNotifications()[jvm] PASSED - -IntroViewModelTest[jvm] > testNotificationsWithPermissionNavigatesToCriticalAlerts()[jvm] PASSED - -IntroViewModelTest[jvm] > testNotificationsWithoutPermissionNavigatesToNull()[jvm] PASSED - -IntroViewModelTest[jvm] > testBluetoothSkipsLocationWhenItAlreadyAskedForIt()[jvm] PASSED - -IntroViewModelTest[jvm] > testBluetoothNavigatesToLocation()[jvm] PASSED - -IntroViewModelTest[jvm] > testCriticalAlertsIsTerminal()[jvm] PASSED - -> Task :feature:map:compileTestKotlinIosSimulatorArm64 -> Task :feature:map:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:map:iosSimulatorArm64Test SKIPPED - -> Task :feature:firmware:jvmTest - -DefaultFirmwareUpdateManagerTest[jvm] > Unknown connection type throws error()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > bootloader erase image skips the family check when the asset declares no expected family()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > bootloader erase image without the family flag is rejected when a family is expected()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware rejects manifest artifact on md5 mismatch and falls back()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > nightly release without zip skips the zip fallback entirely()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > the bootloader erase image rebuilt from its contract matches the shipped digest and family()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > maintenance uf2 with wrong target address is rejected even when the digest matches()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveUsbFirmware constructs correct filename for RP2040()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware prefers update bin over plain bin when both exist()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware uses platformioTarget over hwModelSlug()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > maintenance uf2 skips the address check when the asset declares no expected address()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware accepts manifest artifact when md5 and size match()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > bootloader erase image with matching digest and family id is returned()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware falls back to current naming when manifest unavailable()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware strips v prefix from version for URLs()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > stable release resolves from a per-version directory on the release host()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveOtaFirmware constructs correct filename for nRF52()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > bootloader erase image with the wrong family id is rejected even when the digest matches()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware uses manifest when available()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware falls back to zip extraction when all direct downloads fail()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware rejects manifest artifact on size mismatch and falls back()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > maintenance uf2 with matching digest and target address is returned()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > nightly ota zip resolves from the nightly host root()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware returns null when the zip download throws()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware skips manifest when no app0 entry()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware uses hwModelSlug when platformioTarget is empty()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > maintenance uf2 digest mismatch is terminal and deletes the download()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > nightly release resolves from the nightly host root()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware skips manifest when JSON is malformed()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware returns null when all strategies fail()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveOtaFirmware uses platformioTarget for variant()[jvm] PASSED - -FirmwareRetrieverTest[jvm] > retrieveEsp32Firmware resolves update bin when no manifest and no plain bin()[jvm] PASSED - -> Task :feature:docs:jvmTest - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testGoogleDebugUnitTest - -ShareMessageDeepLinkTest > share callback pending intent carries the encoded message deep link PASSED - -GoogleCustomTileSelectionTest > local provider accepts blank URL while remote provider does not PASSED - -WARNING: A restricted method in -> Task :feature:docs:jvmTest - -KeywordSearchEngineTest[jvm] > token budget selection limits pages()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > search for bluetooth returns connections page()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > title matches score higher than keyword matches()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > empty query returns no results()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > stop words are filtered()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > search for messages returns messages-and-channels page()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > results are sorted by score descending()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > search is case insensitive()[jvm] PASSED - -KeywordSearchEngineTest[jvm] > alias matches produce results()[jvm] PASSED - -java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:firmware:jvmTest - -DefaultFirmwareUpdateManagerTest[jvm] > TCP + ESP32 routes to OTA handler()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > BLE + ESP32 routes to OTA handler()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > Serial + nRF52 routes to USB handler()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > TCP target is the passed address()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > Null address throws error()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > BLE target is the passed address()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > BLE + nRF52 routes to Secure DFU handler()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > TCP + nRF52 throws error()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > Serial + ESP32 throws error()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > Serial target is empty string()[jvm] PASSED - -DefaultFirmwareUpdateManagerTest[jvm] > Unknown connection target is empty string()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase falls back to every existing refusal when the volume advertises no family()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > an rp2040 bootsel volume is accepted with no softdevice()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase uses the volume's softdevice when it agrees with the map()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase on rp2040 ignores a factory erase family()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase on rp2040 resolves without consulting a softdevice()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > internal storage is rejected before INFO_UF2 is even read()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase refuses when the volume and the map disagree()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase falls back to the softdevice sketch when the volume advertises a different family()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase prefers the bootloader image when the volume advertises the manifest family()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase uses the bootloader image over a softdevice conflict()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > a removable volume exposing INFO_UF2 is accepted with its reported identity()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > an INFO_UF2 without a board id is not a bootloader drive()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > bootloader upgrade refuses an unrecognized board id()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > a removable volume without INFO_UF2 is not a bootloader drive()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > a volume without the factory erase line reports no family()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > a volume advertising a factory erase family reports it alongside its softdevice()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase refuses when neither the volume nor the map knows the softdevice()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase uses the bootloader image even when no softdevice can be resolved()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > erase falls back to the map when the volume reports no softdevice()[jvm] PASSED - -MaintenanceVolumeTest[jvm] > bootloader upgrade resolves from the volume board id rather than the build target()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > Unknown falls back from Legacy to Secure on pre-engagement failure()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > SecureObserved tries Secure first()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > LegacyObserved gives Legacy 3 upload attempts()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > SecureObserved throws Secure error with Legacy suppressed when both fail()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > LegacyObserved gives Secure fallback budget of 1 upload attempt after Legacy engages()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > LegacyObserved tries Legacy first()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > Unknown tries Legacy first()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > SecureObserved skips Legacy fallback when Secure never engages()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > Unknown gives Legacy primary a pre-engagement probe budget of 1 with engaged promotion to 3()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > LegacyObserved skips Secure fallback when Legacy never engages()[jvm] PASSED - -DfuFallbackCoordinatorTest[jvm] > protocolEngaged prevents fallback()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > RECOVERY profile writes PRN request value 5()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > mid-stream disconnect returns typed MidStreamDisconnect with correct byte counts()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > acknowledged RESET completes after response()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > failed write with active connection is not reclassified()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > NORMAL profile does not await a PRN for a sub-interval upload()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferInitPacket rejects oversized init packet looks like Secure-shaped dat()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > RECOVERY profile awaits packet receipts at the smaller interval()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > abort swallows operational Exception from the RESET write()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > checkForUpdates enters recovery mode when disconnected with a saved record()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > abort propagates parent cancellation rather than reporting success()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > abort returns within RESET_WRITE_TIMEOUT when the RESET write hangs()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware fails with ProtocolError when device rejects VALIDATE()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > checkForUpdates sets error when hardware lookup fails()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware maps START_DFU INVALID_STATE to StaleSessionReset for recovery restart()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware happy path writes correct opcode and packet sequence()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > connectToDfuMode succeeds when bootloader exposes 1530 service()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferInitPacket accepts typical 14 byte legacy init()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > BLE post-update reconnect requests GATT cache invalidation()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware uses high-MTU packets when the link negotiates a larger MTU()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > NORMAL profile writes PRN request value 10()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware fails with ProtocolError when device rejects INIT_DFU_PARAMS()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > connectToDfuMode accepts missing DFU Version characteristic()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware fails with ProtocolError when device rejects START_DFU()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > RESET is written WITH_RESPONSE()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > abort writes RESET opcode through control point()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > startUpdate sets error if battery is too low()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > connectToDfuMode fails fast on unsupported old DFU Version lt 5()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware fails with PacketReceiptMismatch when device under-reports()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware floors the packet size to a 4-byte boundary()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > initialization checks for updates and transitions to Ready()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > startUpdate with wipe factory-resets only after verification succeeds()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > startUpdate with wipe never factory-resets when verification fails()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > transferFirmware tolerates ACTIVATE_AND_RESET write failure - disconnect race()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > abort does not swallow Error subtypes from the RESET write()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > connectToDfuMode accepts modern DFU Version 8()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > setReleaseType updates release flow()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > stream-level tripwire classifies a drop during a PRN wait as MidStreamDisconnect()[jvm] PASSED - -LegacyDfuTransportTest[jvm] > failed write with disconnected connection classifies as MidStreamDisconnect()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > update method is Unknown for TCP nrf52()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > startUpdate without wipe never factory-resets()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > update method is BLE for BLE-prefixed address()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > TCP post-update reconnect does not request GATT cache invalidation()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > cancelUpdate goes back to Ready()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > BLE-prefixed post-update reconnect requests GATT cache invalidation()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > update method is Usb for serial-prefixed nrf52 address()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > checkForUpdates sets error when myNodeInfo is null()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > update method is Wifi for TCP-prefixed address()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > startUpdate reports a firmware_update_start action with the release version()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > dismissBootloaderWarningForCurrentDevice updates state()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > checkForUpdates sets error when address is null()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > nightly recovery record re-asserts the hidden-features unlock()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > setReleaseType LOCAL produces null release in Ready()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > bootloader warning not shown for non-BLE connections()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > update method is Unknown for serial ESP32()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > startUpdate transitions to Success if manager returns Success()[jvm] PASSED - -FirmwareUpdateViewModelTest[jvm] > recovery hardware lookup failure clears stale device metadata()[jvm] PASSED - -UsbPassWriterTest[jvm] > a failed cdc unblock is only reported for the sketch()[jvm] PASSED - -UsbPassWriterTest[jvm] > the bootloader erase image never has its cdc port opened()[jvm] PASSED - -UsbPassWriterTest[jvm] > a bootloader self-update never has its cdc port opened()[jvm] PASSED - -UsbPassWriterTest[jvm] > the softdevice erase sketch is unblocked over cdc after it is written()[jvm] PASSED - -BleScanSupportTest[jvm] > calculateMacPlusOneInvalidCharacter()[jvm] PASSED - -BleScanSupportTest[jvm] > calculateMacPlusOneInvalidLength()[jvm] PASSED - -BleScanSupportTest[jvm] > scanForBleDevice returns matching device()[jvm] PASSED - -BleScanSupportTest[jvm] > calculateMacPlusOneNormal()[jvm] PASSED - -BleScanSupportTest[jvm] > calculateMacPlusOneWrapAround()[jvm] PASSED - -BleScanSupportTest[jvm] > scanForBleDevice ignores non-matching devices()[jvm] PASSED - -DfuCrc32Test[jvm] > testChecksumCalculation()[jvm] PASSED - -DfuCrc32Test[jvm] > testChecksumCalculationWithSeed()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse Unknown for too-short packet receipt()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse Unknown for unrecognised prefix()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse Unknown for too-short response()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse Success response()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse Unknown for empty bytes()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > legacyImageSizesPayload is 12 bytes LE - app only()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > legacyPrnRequestPayload over 256 spans both bytes()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse PacketReceipt - little endian uint32()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > legacyImageSizesPayload with all three components()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse PacketReceipt with high bit set treats value as unsigned()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > legacyPrnRequestPayload is opcode plus uint16 LE()[jvm] PASSED - -LegacyDfuProtocolTest[jvm] > parse Failure response()[jvm] PASSED - -> Task :feature:map-maplibre:compileKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonMain/kotlin/org/meshtastic/feature/map/maplibre/NodeTrackMap.kt:194:74 Elvis operator (?:) always returns the left operand of non-nullable type 'Int'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonMain/kotlin/org/meshtastic/feature/map/maplibre/geojson/WaypointFeatures.kt:68:76 Elvis operator (?:) always returns the left operand of non-nullable type 'Int'. - -> Task :feature:map-maplibre:iosSimulatorArm64MainKlibrary - -> Task :androidApp:testGoogleDebugUnitTest - -KoinVerificationTest > verifyKoinConfiguration PASSED - -KoinVerificationTest > verifyTypedBootstrapLoadsModuleGraph PASSED - -MapLayerOpacityTest > scaling alpha leaves the colour itself alone PASSED - -MapLayerOpacityTest > a fully opaque layer is left exactly as it was PASSED - -MeshtasticAppFunctionsTest > sendMessage_notConnected PASSED - -MapLayerOpacityTest > a point's alpha is scaled too PASSED - -MapLayerOpacityTest > a line's alpha is scaled PASSED - -MapLayerOpacityTest > a polygon's fill and stroke alpha are both scaled PASSED - -WebMercatorTileMathTest > tileFractionalToLatLng agrees with tileLocalToLatLng for the same fractional position PASSED - -WebMercatorTileMathTest > a deeper tile's local placement matches its own slice of the world PASSED - -WebMercatorTileMathTest > zoom 0 has exactly one tile, covering everywhere PASSED - -WebMercatorTileMathTest > zoom 1 splits the world into quadrants by hemisphere PASSED - -WebMercatorTileMathTest > the tile origin lands on Web Mercator's own latitude ceiling PASSED - -WebMercatorTileMathTest > the middle of the world tile is the equator and prime meridian PASSED - -WebMercatorTileMathTest > a fractional point at the tile's own center lands on its own midpoint PASSED - -UIUnitTest > initialsGood PASSED - -UIUnitTest > ignoreEmojisWhenCreatingInitials PASSED - -MeshtasticAppFunctionsTest > getDeviceStatus_success PASSED - -MeshtasticAppFunctionsTest > getUnreadSummary_success PASSED - -MeshtasticAppFunctionsTest > sendMessage_success PASSED - -MeshtasticAppFunctionsTest > getRecentMessages_success PASSED - -MeshtasticAppFunctionsTest > getNodeDetails_notFound PASSED - -MeshtasticAppFunctionsTest > getMeshMetrics_success PASSED - -MeshtasticAppFunctionsTest > getNodeList_success PASSED - -MeshtasticAppFunctionsTest > getNodeDetails_success PASSED - -MeshtasticAppFunctionsTest > sendMessage_ambiguousName PASSED - -GoogleCustomTileSelectionTest > legacy generated provider id survives a cold reload after URL migration PASSED - -MeshtasticAppFunctionsTest > getChannelInfo_success PASSED - -MeshtasticAppFunctionsTest > getMeshStatus_success PASSED - -GoogleCustomTileSelectionTest > a catalogue basemap survives a cold reload even though it is in nobody's provider list PASSED - -GoogleCustomTileSelectionTest > provider without a valid URL template is not selected PASSED - -GoogleCustomTileSelectionTest > provider id takes precedence over a different legacy URL match PASSED - -GoogleCustomTileSelectionTest > missing persisted selection is cleared only after providers load successfully PASSED - -GoogleCustomTileSelectionTest > provider id disambiguates duplicate URLs across repository update delete and reload PASSED - -GoogleCustomTileSelectionTest > legacy URL migration deterministically selects first matching provider PASSED - -OfflineRegionStoreTest > add replaces an existing region with the same id, terrain fields included PASSED - -OfflineRegionStoreTest > deleting a region also deletes its terrain directory PASSED - -OfflineRegionStoreTest > a manifest written before terrain existed still decodes, defaulting to no terrain PASSED - -OfflineRegionStoreTest > writing the manifest leaves no temp file behind and the real manifest is immediately readable PASSED - -OfflineRegionStoreTest > a manifest write never leaves manifest json half-written PASSED - -OfflineRegionStoreTest > totalBytes sums both the base archive and any terrain attached to it PASSED - -ElevationStitcherTest > a missing neighbor's padding clamps to the center tile's own edge, not a crash or zero PASSED - -ElevationStitcherTest > a north neighbor's bottom row supplies the padded tile's top row PASSED - -ElevationStitcherTest > the interior of the padded tile is exactly the center tile, offset by the margin PASSED - -ElevationStitcherTest > a diagonal neighbor supplies exactly the padded tile's own corner PASSED - -ElevationStitcherTest > a west neighbor's rightmost column supplies the padded tile's left column PASSED - -EnvironmentMetricsTest > temperature and soil temperature are converted to Fahrenheit when isFahrenheit is true PASSED - -MapNodeClusterItemsTest > camera-only recompositions reuse two thousand cluster items PASSED - -MapNodeClusterItemsTest > relative time bucket advances at the next minute boundary PASSED - -MapNodeClusterItemsTest > node changes and minute rollover refresh cluster items PASSED - -TerrainDownloadPlannerTest > whenever regional depth is granted, its own tile count actually fits the budget PASSED - -TerrainDownloadPlannerTest > raising the tile budget never returns a shallower zoom for the same region PASSED - -TerrainDownloadPlannerTest > a region whose tile count blows the budget even at global-only falls back to global-only PASSED - -TerrainDownloadPlannerTest > a tiny region gets full regional depth when the tile budget easily allows it PASSED - -CoilImageLoaderLifecycleTest > productionApplicationProvidesConfiguredKoinImageLoader PASSED - -AppFunctionStateSyncTest > matching system state writes nothing PASSED - -AppFunctionStateSyncTest > only drifted toggles are written PASSED - -AppFunctionStateSyncTest > unindexed toggles are written PASSED - -AppFunctionStateSyncTest > unreadable system state writes every toggle PASSED - -ApplySimpleStyleSpecTest > an unstyled mixed geometry collection draws like every other unstyled line PASSED - -ApplySimpleStyleSpecTest > an rgba alpha survives when no fill-opacity is given PASSED - -ApplySimpleStyleSpecTest > an explicit numeric fill-opacity wins over the default PASSED - -ApplySimpleStyleSpecTest > a polygon falls back to the legacy color property for both fill and stroke PASSED - -> Task :feature:map-maplibre:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonTest/kotlin/org/meshtastic/feature/map/maplibre/geojson/ContourFeaturesTest.kt:41:53 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonTest/kotlin/org/meshtastic/feature/map/maplibre/geojson/ContourFeaturesTest.kt:54:43 Cast is redundant. - -> Task :feature:map-maplibre:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:map-maplibre:iosSimulatorArm64Test SKIPPED - -> Task :feature:firmware:testAndroidHostTest - -FirmwareManifestTest > returns null when no app0 entry exists PASSED - -FirmwareManifestTest > real published manifest shape parses and resolves app0 PASSED - -FirmwareManifestTest > find app0 entry for OTA firmware PASSED - -FirmwareManifestTest > file entry defaults for optional fields PASSED - -FirmwareManifestTest > unknown keys including scalar metadata are ignored PASSED - -FirmwareManifestTest > empty files list is valid PASSED - -FirmwareManifestTest > missing files field uses default PASSED - -UsbMaintenanceGateTest > gate is shown for nrf52840 over usb with a release PASSED - -UsbMaintenanceGateTest > gate is hidden for esp32 even over usb PASSED - -UsbMaintenanceGateTest > factory erase family parsing tolerates case and leading whitespace like its siblings PASSED - -UsbMaintenanceGateTest > each softdevice variant resolves to its own image and target address PASSED - -UsbMaintenanceGateTest > board id tolerates leading whitespace on its line just like the softdevice line PASSED - -UsbMaintenanceGateTest > an unsafe erase filename refuses the image instead of throwing PASSED - -UsbMaintenanceGateTest > an absent or malformed factory erase line yields no family PASSED - -UsbMaintenanceGateTest > unsupported softdevice ids and absent lines yield null PASSED - -UsbMaintenanceGateTest > otafix is offered only for supported targets PASSED - -UsbMaintenanceGateTest > neither source resolving means unresolved PASSED - -UsbMaintenanceGateTest > softdevice and board id are both read from a real stock bootloader payload PASSED - -UsbMaintenanceGateTest > factory erase family is parsed from the bootloader's own line PASSED - -UsbMaintenanceGateTest > unresolved softdevice shows the action but refuses it PASSED - -UsbMaintenanceGateTest > board id is stable across bootloader vintages for the same board PASSED - -UsbMaintenanceGateTest > bootloader erase image refuses when the manifest cannot vouch for a family PASSED - -UsbMaintenanceGateTest > both variants are parsed from real captured bootloader payloads PASSED - -UsbMaintenanceGateTest > a drive report rescues an unmapped model PASSED - -UsbMaintenanceGateTest > board id selects the image rather than the build target PASSED - -UsbMaintenanceGateTest > no erase image is resolved for an unresolved softdevice PASSED - -UsbMaintenanceGateTest > an unsafe bootloader erase filename refuses the image instead of throwing PASSED - -UsbMaintenanceGateTest > an old bootloader vintage still reports its softdevice and board id PASSED - -UsbMaintenanceGateTest > board id is parsed from an INFO_UF2 payload and tolerates surrounding lines PASSED - -UsbMaintenanceGateTest > uf2 target address is read from the first block PASSED - -UsbMaintenanceGateTest > gate is shown for rp2040 over usb and never refuses on softdevice PASSED - -UsbMaintenanceGateTest > softdevice line is parsed for both shipped variants PASSED - -UsbMaintenanceGateTest > gate is hidden on a platform that cannot run the sequence PASSED - -UsbMaintenanceGateTest > agreement resolves to the reported variant's image PASSED - -UsbMaintenanceGateTest > every shipped otafix image resolves and no two boards share a digest or filename PASSED - -UsbMaintenanceGateTest > every otafix board id maps to its exact expected release filename and digest PASSED - -UsbMaintenanceGateTest > uf2 family id is absent when the family flag is clear PASSED - -UsbMaintenanceGateTest > otafix is not offered for products that merely share a supported build target PASSED - -UsbMaintenanceGateTest > rp2040 resolves the pico erase image with no address invariant PASSED - -UsbMaintenanceGateTest > each erase image targets the app start of the softdevice it is linked for PASSED - -UsbMaintenanceGateTest > esp32 resolves no erase image PASSED - -UsbMaintenanceGateTest > non-uf2 payloads yield no family id PASSED - -UsbMaintenanceGateTest > only the softdevice erase sketches need a cdc unblock PASSED - -UsbMaintenanceGateTest > an unsafe otafix slug or tag refuses the image instead of throwing PASSED - -UsbMaintenanceGateTest > the manifest decodes the bootloader erase entry with its family id PASSED - -UsbMaintenanceGateTest > an unrecognized board id refuses rather than falling back PASSED - -UsbMaintenanceGateTest > the drive outranks the bundled map PASSED - -UsbMaintenanceGateTest > bootloader erase image resolves when the volume advertises the manifest family PASSED - -UsbMaintenanceGateTest > xiao sense is distinguished from plain xiao only by board id PASSED - -UsbMaintenanceGateTest > bootloader erase image refuses a volume advertising another family or none PASSED - -UsbMaintenanceGateTest > a payload without a board id line yields null PASSED - -UsbMaintenanceGateTest > gate is hidden without a release because there would be nothing to reflash PASSED - -UsbMaintenanceGateTest > uf2 family id is read from the first block when the family flag is set PASSED - -UsbMaintenanceGateTest > a different factory erase family still parses so the resolver can refuse it PASSED - -UsbMaintenanceGateTest > factory erase family takes the last hex token on the line PASSED - -UsbMaintenanceGateTest > an old bootloader with no softdevice line falls back to the bundled map PASSED - -UsbMaintenanceGateTest > rp2040 with no erase data reports missing data rather than unsupported architecture PASSED - -UsbMaintenanceGateTest > gate is hidden for every non-usb transport PASSED - -UsbMaintenanceGateTest > non-uf2 payloads yield no target address PASSED - -FirmwareHashUtilTest > testSha256Calculation PASSED - -FirmwareHashUtilTest > testBytesToHex PASSED - -WifiOtaTransportTest > connect fails when device is unreachable PASSED - -WifiOtaTransportTest > startOta fails on hash rejected response PASSED - -WifiOtaTransportTest > streamFirmware sends 1024-byte chunks and waits for final OK PASSED - -WifiOtaTransportTest > startOta sends OTA command and succeeds on OK response PASSED - -WifiOtaTransportTest > connect succeeds when TCP socket is established PASSED - -WifiOtaTransportTest > close resets transport and closes TCP connection PASSED - -WifiOtaTransportTest > streamFirmware fails on hash mismatch verification error PASSED - -WifiOtaTransportTest > startOta reports erasing status before succeeding PASSED - -DfuZipParserTest > picksPriorityImageWhenMultiplePresent PASSED - -DfuZipParserTest > parseValidZipEntries PASSED - -DfuZipParserTest > failsWhenBinFileNotFound PASSED - -DfuZipParserTest > failsWhenNoEntryFound PASSED - -DfuZipParserTest > failsWhenManifestDeclaresOnlyBootloader PASSED - -DfuZipParserTest > failsWhenManifestIsMissing PASSED - -DfuZipParserTest > failsWhenDatFileNotFound PASSED - -DfuZipParserTest > failsWhenManifestIsInvalid PASSED - -DfuZipParserTest > failsWhenManifestDeclaresOnlySoftDeviceBootloader PASSED - -SecureDfuTransportTest > resume - device has complete data - just execute PASSED - -SecureDfuTransportTest > transferInitPacket writes packet data WITHOUT_RESPONSE to PACKET characteristic PASSED - -SecureDfuTransportTest > transferInitPacket sends PRN 0 not 10 PASSED - -SecureDfuTransportTest > abort writes ABORT opcode through BleService PASSED - -SecureDfuTransportTest > default MTU is 20 bytes when connection returns null PASSED - -SecureDfuTransportTest > transferFirmware reports progress PASSED - -SecureDfuTransportTest > execute retry on INVALID_OBJECT for final object PASSED - -SecureDfuTransportTest > transferFirmware splits data into objects of maxObjectSize PASSED - -SecureDfuTransportTest > packet writes respect MTU size PASSED - -SecureDfuTransportTest > transferFirmware sends PRN 10 PASSED - -SecureDfuTransportTest > triggerButtonlessDfu falls back to legacy DFU service when secure FE59 is missing PASSED - -SecureDfuTransportTest > resume - object boundary - execute last then continue PASSED - -SecureDfuTransportTest > transferFirmware fails on CRC mismatch after object PASSED - -SecureDfuTransportTest > resume - CRC mismatch - restart from offset 0 PASSED - -SecureDfuTransportTest > connectToDfuMode succeeds using shared BleService observation PASSED - -SecureDfuTransportTest > triggerButtonlessDfu writes reboot opcode through BleService PASSED - -FirmwareUpdateStateTest > ProgressState can be instantiated with values PASSED - -FirmwareUpdateStateTest > stripFormatArgs removes format arg without colon prefix PASSED - -FirmwareUpdateStateTest > ProgressState defaults are correct PASSED - -FirmwareUpdateStateTest > stripFormatArgs handles empty string PASSED - -FirmwareUpdateStateTest > stripFormatArgs removes positional format argument PASSED - -FirmwareUpdateStateTest > stripFormatArgs leaves string without format args unchanged PASSED - -FirmwareUpdateIntegrationTest > startUpdate sets Error state when manager reports failure PASSED - -FirmwareUpdateIntegrationTest > cancelUpdate returns ViewModel to Ready state PASSED - -FirmwareUpdateIntegrationTest > startUpdate transitions through Updating to Success when manager succeeds PASSED - -FirmwareUpdateIntegrationTest > ViewModel initialises to Ready with release and device info PASSED - -BleScanSupportTest > calculateMacPlusOneInvalidCharacter PASSED - -BleScanSupportTest > calculateMacPlusOneInvalidLength PASSED - -BleOtaTransportTest > startOta handles ERASING then OK sequence PASSED - -BleOtaTransportTest > connect succeeds when device advertises MAC plus one PASSED - -BleOtaTransportTest > startOta fails on generic error PASSED - -BleOtaTransportTest > streamFirmware fails immediately on empty firmware PASSED - -BleOtaTransportTest > streamFirmware sends data and succeeds with final OK PASSED - -BleOtaTransportTest > streamFirmware fails on Hash Mismatch error PASSED - -BleOtaTransportTest > connect fails when connectAndAwait returns Disconnected PASSED - -BleOtaTransportTest > connect reconnects once when cache refresh leaves stale OTA services PASSED - -BleOtaTransportTest > streamFirmware succeeds when the last chunk is ACKed then a separate terminal OK arrives PASSED - -BleOtaTransportTest > streamFirmware clamps chunk to negotiated write payload and acks once per chunk PASSED - -BleOtaTransportTest > streamFirmware reuses discovered OTA service for chunk writes PASSED - -BleOtaTransportTest > connect fails when notification observation fails before subscription PASSED - -BleOtaTransportTest > startOta splits command across MTU-sized packets PASSED - -BleOtaTransportTest > startOta sends command and succeeds on OK response PASSED - -BleOtaTransportTest > streamFirmware fails on generic transfer error PASSED - -BleOtaTransportTest > streamFirmware surfaces a final-chunk error instead of reporting success PASSED - -BleOtaTransportTest > connect fails when OTA characteristics are missing PASSED - -BleOtaTransportTest > streamFirmware fails on connection lost PASSED - -BleOtaTransportTest > streamFirmware fails when a non-final chunk receives OK PASSED - -BleOtaTransportTest > streamFirmware fails when a terminal error arrives after the last chunk is ACKed PASSED - -BleOtaTransportTest > streamFirmware handles multi-chunk transfer PASSED - -BleOtaTransportTest > startOta fails on Hash Rejected error PASSED - -BleOtaTransportTest > connect succeeds when device is found PASSED - -BleOtaTransportTest > close disconnects BLE connection PASSED - -FirmwareUpdateHelpersTest > retryWithDelay returns first success without further attempts PASSED - -FirmwareUpdateHelpersTest > formatTransferProgress omits speed when throughput is zero PASSED - -FirmwareUpdateHelpersTest > retryWithDelay retries until success and reports each attempt PASSED - -FirmwareUpdateHelpersTest > formatTransferProgress omits speed when throughput is non-positive PASSED - -FirmwareUpdateHelpersTest > formatTransferProgress includes KiB per second and ETA PASSED - -FirmwareUpdateHelpersTest > retryWithDelay returns the last failure after exhausting attempts PASSED - -DfuCrc32Test > testChecksumCalculation PASSED - -DfuCrc32Test > testChecksumCalculationWithSeed PASSED - -LegacyDfuProtocolTest > parse Unknown for too-short packet receipt PASSED - -LegacyDfuProtocolTest > parse Unknown for unrecognised prefix PASSED - -LegacyDfuProtocolTest > parse Unknown for too-short response PASSED - -LegacyDfuProtocolTest > parse Success response PASSED - -LegacyDfuProtocolTest > parse Unknown for empty bytes PASSED - -LegacyDfuProtocolTest > legacyImageSizesPayload is 12 bytes LE - app only PASSED - -LegacyDfuProtocolTest > legacyPrnRequestPayload over 256 spans both bytes PASSED - -LegacyDfuProtocolTest > parse PacketReceipt - little endian uint32 PASSED - -LegacyDfuProtocolTest > legacyImageSizesPayload with all three components PASSED - -LegacyDfuProtocolTest > parse PacketReceipt with high bit set treats value as unsigned PASSED - -LegacyDfuProtocolTest > legacyPrnRequestPayload is opcode plus uint16 LE PASSED - -LegacyDfuProtocolTest > parse Failure response PASSED - -BleScanSupportTest > scanForBleDevice returns matching device PASSED - -BleScanSupportTest > calculateMacPlusOneNormal PASSED - -BleScanSupportTest > calculateMacPlusOneWrapAround PASSED - -BleScanSupportTest > scanForBleDevice ignores non-matching devices PASSED - -OtaResponseTest > parseSimpleError PASSED - -OtaResponseTest > parseUnknownResponse PASSED - -OtaResponseTest > parseOkWithVersionData PASSED - -OtaResponseTest > parseSimpleOk PASSED - -OtaResponseTest > parseErrorWithMessage PASSED - -OtaResponseTest > parseErasing PASSED - -OtaResponseTest > parseAck PASSED - -DfuFallbackCoordinatorTest > Unknown falls back from Legacy to Secure on pre-engagement failure PASSED - -DfuFallbackCoordinatorTest > SecureObserved tries Secure first PASSED - -DfuFallbackCoordinatorTest > LegacyObserved gives Legacy 3 upload attempts PASSED - -DfuFallbackCoordinatorTest > SecureObserved throws Secure error with Legacy suppressed when both fail PASSED - -DfuFallbackCoordinatorTest > LegacyObserved gives Secure fallback budget of 1 upload attempt after Legacy engages PASSED - -DfuFallbackCoordinatorTest > LegacyObserved tries Legacy first PASSED - -DfuFallbackCoordinatorTest > Unknown tries Legacy first PASSED - -DfuFallbackCoordinatorTest > SecureObserved skips Legacy fallback when Secure never engages PASSED - -DfuFallbackCoordinatorTest > Unknown gives Legacy primary a pre-engagement probe budget of 1 with engaged promotion to 3 PASSED - -DfuFallbackCoordinatorTest > LegacyObserved skips Secure fallback when Legacy never engages PASSED - -DfuFallbackCoordinatorTest > protocolEngaged prevents fallback PASSED - -LegacyDfuRetryPolicyTest > initial StaleSessionReset keeps NORMAL profile PASSED - -LegacyDfuRetryPolicyTest > NORMAL switches to RECOVERY only after MidStreamDisconnect PASSED - -LegacyDfuRetryPolicyTest > Unknown Legacy stale cleanup after engagement does not consume promoted budget PASSED - -LegacyDfuRetryPolicyTest > cleanup skips abort after MidStreamDisconnect but always closes PASSED - -LegacyDfuRetryPolicyTest > stale cleanup does not consume an upload attempt PASSED - -LegacyDfuRetryPolicyTest > retries are announced before the delay and not after the last attempt PASSED - -LegacyDfuRetryPolicyTest > Secure protocol returns Success on first successful session PASSED - -LegacyDfuRetryPolicyTest > cleanup skips abort after StaleSessionReset but always closes PASSED - -LegacyDfuRetryPolicyTest > cleanup closes transport after abort throws Error PASSED - -LegacyDfuRetryPolicyTest > Unknown Legacy pre-engagement connect failure stops after 1 attempt for timely Secure fallback PASSED - -LegacyDfuRetryPolicyTest > cleanup closes transport after abort throws Exception PASSED - -LegacyDfuRetryPolicyTest > cleanup skips abort after completed session but always closes PASSED - -LegacyDfuRetryPolicyTest > drop stale drop stale success fits within 3 uploads and 2 stale resets PASSED - -LegacyDfuRetryPolicyTest > stale cleanup is not announced as a retry PASSED - -LegacyDfuRetryPolicyTest > drop then stale then success consumes one upload attempt and switches to RECOVERY PASSED - -LegacyDfuRetryPolicyTest > Secure budget stays at 1 even when Secure session reports protocolEngaged true PASSED - -LegacyDfuRetryPolicyTest > cleanup attempts abort after ambiguous ConnectionFailed and always closes PASSED - -LegacyDfuRetryPolicyTest > original MidStreamDisconnect stays visible when terminal failure differs PASSED - -LegacyDfuRetryPolicyTest > Legacy alternate that engages receives full engaged Legacy budget PASSED - -LegacyDfuRetryPolicyTest > Unknown Legacy engagement during MidStreamDisconnect promotes budget to 3 and uses RECOVERY PASSED - -LegacyDfuRetryPolicyTest > repeated stale responses stop at MAX_LEGACY_STALE_RESETS PASSED - -LegacyDfuRetryPolicyTest > ordinary failures consume the three upload attempts PASSED - -LegacyDfuRetryPolicyTest > Secure protocol runs the attempts loop without stale handling PASSED - -> Task :feature:map:compileTestKotlinJvm - -> Task :feature:discovery:testAndroidHostTest - -DiscoveryMapFilterTest > selectPresetFilter_null_resetsToAll PASSED - -DiscoveryMapFilterTest > topologyOverlay_defaultOff PASSED - -DiscoveryMapFilterTest > selectPresetFilter_updatesState PASSED - -DiscoveryMapFilterTest > toggleTopologyOverlay_turnsOff PASSED - -DiscoveryMapFilterTest > toggleTopologyOverlay_turnsOn PASSED - -DiscoveryMapFilterTest > discoveryMapStats_dataClass_equality PASSED - -DiscoveryHomeRestorerTest > unrestorablePersistenceFailureKeepsSameDeviceBarrierRecoverable PASSED - -DiscoveryMapFilterTest > sharedDaoFlowsObserveWritesAfterSubscription PASSED - -DiscoveryMapFilterTest > defaultFilter_isNull_showsAllPresets PASSED - -DiscoveryMapFilterTest > mapStats_initiallyZero PASSED - -DiscoverySummaryGeneratorTest > equalTrafficMixNoNote PASSED - -DiscoverySummaryGeneratorTest > singlePresetSessionMentionsPresetName PASSED - -DiscoverySummaryGeneratorTest > presetSummaryLowCongestionNotMarked PASSED - -DiscoverySummaryGeneratorTest > presetPromptContainsPresetName PASSED - -DiscoverySummaryGeneratorTest > multiPresetSessionRanksByNodeCount PASSED - -DiscoverySummaryGeneratorTest > presetSummaryHighCongestionMarked PASSED - -DiscoverySummaryGeneratorTest > highCongestionGeneratesWarning PASSED - -DiscoverySummaryGeneratorTest > presetSummarySensorDominated PASSED - -DiscoverySummaryGeneratorTest > sensorDominatedTrafficNoted PASSED - -DiscoveryHomeRestorerTest > schedulingDifferentSessionCancelsAndReplacesPendingRestore PASSED - -DiscoverySummaryGeneratorTest > chatDominatedTrafficNoted PASSED - -DiscoverySummaryGeneratorTest > lowCongestionNoWarning PASSED - -DiscoverySummaryGeneratorTest > presetSummaryChatDominated PASSED - -DiscoverySummaryGeneratorTest > sessionPromptContainsSessionMetadata PASSED - -DiscoverySummaryGeneratorTest > completedSessionRecommendationSaysCompleted PASSED - -DiscoverySummaryGeneratorTest > stoppedSessionRecommendationSaysPartial PASSED - -DiscoverySummaryGeneratorTest > presetPromptContainsMetrics PASSED - -DiscoverySummaryGeneratorTest > sessionPromptContainsCongestionGuidance PASSED - -DiscoverySummaryGeneratorTest > presetSummaryIncludesChannelUtilization PASSED - -DiscoverySummaryGeneratorTest > sessionPromptContainsPresetData PASSED - -DiscoveryHomeRestorerTest > unsatisfiablePrimaryChannelRestoreStopsWithoutRetrying PASSED - -DiscoverySummaryGeneratorTest > multiPresetSessionMentionsAlternativePresets PASSED - -DiscoverySummaryGeneratorTest > presetSummaryIncludesNodeCounts PASSED - -DiscoverySummaryGeneratorTest > recommendationIncludesBestPresetName PASSED - -DiscoverySummaryGeneratorTest > sessionPromptContainsChannelUtilization PASSED - -DiscoverySummaryGeneratorTest > sessionPromptContainsInstructions PASSED - -DiscoverySummaryGeneratorTest > presetPromptContainsGuidanceContext PASSED - -DiscoverySummaryGeneratorTest > emptyPresetsReturnsNoPresetsMessage PASSED - -DiscoverySummaryGeneratorTest > presetSummaryIncludesPresetName PASSED - -DiscoverySummaryGeneratorTest > lowTrafficCountsNoMixNote PASSED - -DiscoverySummaryGeneratorTest > presetSummaryKnownPresetIncludesDataRate PASSED - -DiscoverySummaryGeneratorTest > singlePresetSessionIncludesChannelUtilization PASSED - -DiscoveryHomeRestorerTest > transientDisconnectFailuresDoNotConsumeTheActiveRetryBudget PASSED - -DiscoveryHomeRestorerTest > discoveryTestRadioControllerRejectsStaleDeviceBeforeWriting PASSED - -DiscoveryHomeRestorerTest > interruptedRecoverySwitchesActiveWatcherToNewlySelectedDevice PASSED - -DiscoveryHomeRestorerTest > ownershipRejectionDoesNotConsumeTheRestoreRetryBudget PASSED - -DiscoveryHomeRestorerTest > selectedDeviceChangeWakesDisconnectedRestoreWaiter PASSED - -DiscoveryHomeRestorerTest > sameSessionIdOnDifferentDeviceReplacesPendingRestore PASSED - -DiscoveryHomeRestorerTest > supersededRestoreReturnsFalseToForegroundWaiterWithoutCancellingIt PASSED - -DiscoveryHomeRestorerTest > repeatedScheduleForSameActiveSessionIsIdempotent PASSED - -DiscoveryHomeRestorerTest > finalStatusMappingPreservesTerminalIntentAndDefaultsRecoveredStates PASSED - -DiscoveryHomeRestorerTest > permanentWriteFailureStopsAfterBoundedAttemptsAndMarksSessionUnrestorable PASSED - -DiscoveryHomeRestorerTest > updateFinalStatusChangesAndCorrectsTheTerminalStatusPublishedByARestore PASSED - -DiscoveryHomeRestorerTest > transientWriteFailuresRetryWithBackoffWhileTheSameDeviceRemainsConnected PASSED - -DiscoveryHomeRestorerTest > persistentOwnershipRejectionStopsWithoutMarkingTheSessionUnrestorable PASSED - -DiscoverySummaryAiProviderTest > unsupported_provider_returns_null_for_preset_summary PASSED - -DiscoverySummaryAiProviderTest > failing_provider_returns_null_on_session_error PASSED - -DiscoverySummaryAiProviderTest > algorithmic_generator_handles_empty_presets PASSED - -DiscoverySummaryAiProviderTest > failing_provider_returns_null_on_preset_error PASSED - -DiscoverySummaryAiProviderTest > unsupported_provider_returns_null_for_session_summary PASSED - -DiscoverySummaryAiProviderTest > supported_provider_returns_preset_summary PASSED - -DiscoverySummaryAiProviderTest > unsupported_provider_reports_not_available PASSED - -DiscoverySummaryAiProviderTest > algorithmic_generator_produces_non_null_summary PASSED - -DiscoverySummaryAiProviderTest > supported_provider_returns_session_summary PASSED - -DiscoveryPacketCollectionTest > neighborInfoOnlyNodeIsMarkedAsMesh PASSED - -DiscoveryPacketCollectionTest > neighborInfoDoesNotOverrideDirectType PASSED - -DiscoveryPacketCollectionTest > duplicatePacketsCountMessagesAccumulatively PASSED - -DiscoveryPacketCollectionTest > nodeWithZeroPositionTreatedAsNoPosition PASSED - -DiscoveryPacketCollectionTest > duplicatePacketsFromSameNodeDeduplicateByNodeNum PASSED - -DiscoveryPacketCollectionTest > neighborInfoMultipleNeighborsAllRecorded PASSED - -DiscoveryPacketCollectionTest > nodeWithoutPositionHasNullLatLon PASSED - -DiscoveryTerminalCoordinatorTest > joinedOutcomeDoesNotOverwriteStateAfterTerminalReset PASSED - -DiscoveryTerminalCoordinatorTest > joinedRestoreFailurePublishesTheDowngradedOutcome PASSED - -> Task :feature:map:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map/src/commonTest/kotlin/org/meshtastic/feature/map/kml/KmlGroundOverlayTest.kt:68:9 Name contains character(s) that can cause problems on Windows: " - -> Task :androidApp:testGoogleDebugUnitTest - -ApplySimpleStyleSpecTest > a MultiPolygon is styled as a polygon, not a line PASSED - -ApplySimpleStyleSpecTest > an unparseable color falls back to the defaults rather than throwing PASSED - -ApplySimpleStyleSpecTest > a feature carrying no style properties still gets a style PASSED - -ApplySimpleStyleSpecTest > a line falls back to the legacy color property PASSED - -ApplySimpleStyleSpecTest > rgb colors are parsed PASSED - -KmlToGoogleLayerTest > a file with nothing mappable yields no layer rather than an empty one PASSED - -ApplySimpleStyleSpecTest > an opaque fill with no fill-opacity gets the default gradient opacity PASSED - -ApplySimpleStyleSpecTest > imported lines and polygons default to a 2px stroke PASSED - -ApplySimpleStyleSpecTest > a collection nesting a MultiPolygon is styled as a polygon PASSED - -ApplySimpleStyleSpecTest > stroke-opacity fades a line PASSED - -ApplySimpleStyleSpecTest > a mixed geometry collection is styled as a line PASSED - -ApplySimpleStyleSpecTest > a MultiLineString is styled as a line PASSED - -ApplySimpleStyleSpecTest > a MultiPoint keeps its icon instead of being styled as a line PASSED - -KmlToGoogleLayerTest > a placemark's icon reaches the style maps-utils renders PASSED - -KmlToGoogleLayerTest > a remote icon url is stripped before maps utils sees it PASSED - -KmlToGoogleLayerTest > a placemark with no icon is left with the mapper's own style PASSED - -KmlToGoogleLayerTest > maps-utils parses what the converter writes PASSED - -KmlToGoogleLayerTest > a KMZ hands its packed images to the renderer's cache PASSED - -MvtDecoderTest > a truncated parameter stream drops the rest of the tile instead of spinning through count PASSED - -MvtDecoderTest > a MultiPoint feature's single MoveTo command yields one point per delta PASSED - -MvtDecoderTest > decodes a hand-built tile's layer, feature and geometry fields PASSED - -MvtDecoderTest > decodes a closed polygon ring from its MoveTo-LineTo-ClosePath command stream PASSED - -MvtDecoderTest > a truncated command near the end of the stream is not misread as a trailing command PASSED - -MvtDecoderTest > an open LineString is returned without an implicit close PASSED - -MapViewModelSitePlannerRequestTest > pending request follows the live node and stops after consumption PASSED - -MapViewModelSitePlannerRequestTest > new route request replaces pending request and stale consumption cannot clear it PASSED - -MapViewModelSitePlannerRequestTest > consumed site planner request is not rearmed by entry recomposition PASSED - -SitePlannerWebViewRecoveryTest > resources redirect race is recoverable PASSED - -SitePlannerWebViewRecoveryTest > webview provider load failure wrapper is recoverable PASSED - -SitePlannerWebViewRecoveryTest > unrelated AndroidRuntimeException is not swallowed PASSED - -SitePlannerWebViewRecoveryTest > unrelated RuntimeException is not swallowed PASSED - -OfflineRegionTileSetTest > estimateTileCount agrees with tiles' own size including across the antimeridian PASSED - -OfflineRegionTileSetTest > estimateTileCount matches the tiles actually enumerated PASSED - -OfflineRegionTileSetTest > a tight box still counts at least one tile per zoom level PASSED - -OfflineRegionTileSetTest > the whole world is exactly one tile at zoom 0 PASSED - -OfflineRegionTileSetTest > tiles wraps the antimeridian instead of returning zero tiles PASSED - -OfflineRegionTileSetTest > tile count grows monotonically with zoom depth PASSED - -> Task :feature:map:compileJvmTestJava NO-SOURCE -> Task :feature:map:jvmTestClasses - -> Task :feature:firmware:testAndroidHostTest - -FirmwareUpdateViewModelTest > checkForUpdates enters recovery mode when disconnected with a saved record PASSED - -FirmwareUpdateViewModelTest > checkForUpdates sets error when hardware lookup fails PASSED - -FirmwareUpdateViewModelTest > BLE post-update reconnect requests GATT cache invalidation PASSED - -FirmwareUpdateViewModelTest > startUpdate sets error if battery is too low PASSED - -FirmwareUpdateViewModelTest > initialization checks for updates and transitions to Ready PASSED - -FirmwareUpdateViewModelTest > startUpdate with wipe factory-resets only after verification succeeds PASSED - -FirmwareUpdateViewModelTest > startUpdate with wipe never factory-resets when verification fails PASSED - -FirmwareUpdateViewModelTest > setReleaseType updates release flow PASSED - -FirmwareUpdateViewModelTest > update method is Unknown for TCP nrf52 PASSED - -FirmwareUpdateViewModelTest > startUpdate without wipe never factory-resets PASSED - -FirmwareUpdateViewModelTest > update method is BLE for BLE-prefixed address PASSED - -FirmwareUpdateViewModelTest > TCP post-update reconnect does not request GATT cache invalidation PASSED - -FirmwareUpdateViewModelTest > cancelUpdate goes back to Ready PASSED - -FirmwareUpdateViewModelTest > BLE-prefixed post-update reconnect requests GATT cache invalidation PASSED - -FirmwareUpdateViewModelTest > update method is Usb for serial-prefixed nrf52 address PASSED - -FirmwareUpdateViewModelTest > checkForUpdates sets error when myNodeInfo is null PASSED - -FirmwareUpdateViewModelTest > update method is Wifi for TCP-prefixed address PASSED - -FirmwareUpdateViewModelTest > startUpdate reports a firmware_update_start action with the release version PASSED - -FirmwareUpdateViewModelTest > dismissBootloaderWarningForCurrentDevice updates state PASSED - -FirmwareUpdateViewModelTest > checkForUpdates sets error when address is null PASSED - -FirmwareUpdateViewModelTest > nightly recovery record re-asserts the hidden-features unlock PASSED - -FirmwareUpdateViewModelTest > setReleaseType LOCAL produces null release in Ready PASSED - -FirmwareUpdateViewModelTest > bootloader warning not shown for non-BLE connections PASSED - -FirmwareUpdateViewModelTest > update method is Unknown for serial ESP32 PASSED - -FirmwareUpdateViewModelTest > startUpdate transitions to Success if manager returns Success PASSED - -FirmwareUpdateViewModelTest > recovery hardware lookup failure clears stale device metadata PASSED - -Esp32OtaRoutingTest > IPv4 address is not a BLE target PASSED - -Esp32OtaRoutingTest > hostname is not a BLE target PASSED - -Esp32OtaRoutingTest > IPv6 literal is not a BLE target PASSED - -Esp32OtaRoutingTest > MAC address is a BLE target PASSED - -ThroughputTrackerTest > testThroughputCalculation PASSED - -DfuResponseTest > parseFailureResponse PASSED - -DfuResponseTest > parseSuccessResponse PASSED - -DfuResponseTest > parseUnknownResponse PASSED - -DfuResponseTest > parseSelectResultResponse PASSED - -DfuResponseTest > parseChecksumResultResponse PASSED - -LegacyDfuTransportTest > RECOVERY profile writes PRN request value 5 PASSED - -LegacyDfuTransportTest > mid-stream disconnect returns typed MidStreamDisconnect with correct byte counts PASSED - -LegacyDfuTransportTest > acknowledged RESET completes after response PASSED - -LegacyDfuTransportTest > failed write with active connection is not reclassified PASSED - -LegacyDfuTransportTest > NORMAL profile does not await a PRN for a sub-interval upload PASSED - -LegacyDfuTransportTest > transferInitPacket rejects oversized init packet looks like Secure-shaped dat PASSED - -LegacyDfuTransportTest > RECOVERY profile awaits packet receipts at the smaller interval PASSED - -LegacyDfuTransportTest > abort swallows operational Exception from the RESET write PASSED - -LegacyDfuTransportTest > abort propagates parent cancellation rather than reporting success PASSED - -LegacyDfuTransportTest > abort returns within RESET_WRITE_TIMEOUT when the RESET write hangs PASSED - -LegacyDfuTransportTest > transferFirmware fails with ProtocolError when device rejects VALIDATE PASSED - -LegacyDfuTransportTest > transferFirmware maps START_DFU INVALID_STATE to StaleSessionReset for recovery restart PASSED - -LegacyDfuTransportTest > transferFirmware happy path writes correct opcode and packet sequence PASSED - -LegacyDfuTransportTest > connectToDfuMode succeeds when bootloader exposes 1530 service PASSED - -LegacyDfuTransportTest > transferInitPacket accepts typical 14 byte legacy init PASSED - -LegacyDfuTransportTest > transferFirmware uses high-MTU packets when the link negotiates a larger MTU PASSED - -LegacyDfuTransportTest > NORMAL profile writes PRN request value 10 PASSED - -LegacyDfuTransportTest > transferFirmware fails with ProtocolError when device rejects INIT_DFU_PARAMS PASSED - -LegacyDfuTransportTest > connectToDfuMode accepts missing DFU Version characteristic PASSED - -LegacyDfuTransportTest > transferFirmware fails with ProtocolError when device rejects START_DFU PASSED - -LegacyDfuTransportTest > RESET is written WITH_RESPONSE PASSED - -LegacyDfuTransportTest > abort writes RESET opcode through control point PASSED - -LegacyDfuTransportTest > connectToDfuMode fails fast on unsupported old DFU Version lt 5 PASSED - -LegacyDfuTransportTest > transferFirmware fails with PacketReceiptMismatch when device under-reports PASSED - -LegacyDfuTransportTest > transferFirmware floors the packet size to a 4-byte boundary PASSED - -LegacyDfuTransportTest > transferFirmware tolerates ACTIVATE_AND_RESET write failure - disconnect race PASSED - -LegacyDfuTransportTest > abort does not swallow Error subtypes from the RESET write PASSED - -LegacyDfuTransportTest > connectToDfuMode accepts modern DFU Version 8 PASSED - -LegacyDfuTransportTest > stream-level tripwire classifies a drop during a PRN wait as MidStreamDisconnect PASSED - -LegacyDfuTransportTest > failed write with disconnected connection classifies as MidStreamDisconnect PASSED - -> Task :feature:discovery:allTests -WARNING: A terminally deprecated method in sun.misc.Unsafe has been called -WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/androidx.datastore/datastore-preferences-external-protobuf/1.2.1/200a891fd29602b4bcff8e197d243a372fb026d5/datastore-preferences-external-protobuf-1.2.1.jar) -WARNING: Please consider reporting this to the maintainers of class androidx.datastore.preferences.protobuf.UnsafeUtil$MemoryAccessor -WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release -> Task :feature:intro:testAndroidHostTest - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testGoogleDebugUnitTest - -GoogleMapsPrefsTest > camera position is absent until one has been saved PASSED - -GoogleMapsPrefsTest > selected custom tile URL is available from a load-aware snapshot PASSED - -GoogleMapsPrefsTest > camera position is saved and restored atomically PASSED - -DeepLinkManifestConsistencyTest > every canonical segment is actually routed by DeepLinkRouter PASSED - -DeepLinkManifestConsistencyTest > app links intent filter declares a pathPrefix for every routed segment PASSED - -GlanceTrampolineManifestTest > invisible trampoline Glance actually uses is still declared and not exported PASSED - -GlanceTrampolineManifestTest > crash-on-launch activity trampoline is absent from the merged manifest PASSED - -> Task :feature:map:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map/src/commonTest/kotlin/org/meshtastic/feature/map/kml/KmlGroundOverlayTest.kt:68:9 Name contains character(s) that can cause problems on Windows: " - -> Task :feature:docs:jvmTest - -ChirpySessionHolderTest[jvm] > submit clears loading when the stream ends without a terminal result()[jvm] PASSED - -ChirpySessionHolderTest[jvm] > submit streams the answer into the shared session()[jvm] PASSED - -ChirpySessionHolderTest[jvm] > submit ignores a blank draft and a request already in flight()[jvm] PASSED - -ChirpySessionHolderTest[jvm] > introduce runs once and resets the assistant session()[jvm] PASSED - -ChirpySessionHolderTest[jvm] > a thrown failure clears loading instead of wedging the composer()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > nested list indentation is preserved()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > frontmatter is NOT translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > list items are translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > blockquotes are translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > link text is translated but URL is preserved()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > paragraphs are translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > html blocks are NOT translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > fenced code blocks are NOT translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > indented code blocks are NOT translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > table cells are translated but separators are not()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > images are NOT translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > inline code is NOT translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > headings are translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > ordered list items are translated()[jvm] PASSED - -MarkdownTranslationSegmenterTest[jvm] > empty input returns empty output()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testGoogleDebugUnitTest - -NavigationAssemblyTest > verifyNavigationGraphsAssembleWithoutCrashing PASSED - -> Task :feature:firmware:jvmTest - -FirmwareManifestTest[jvm] > returns null when no app0 entry exists()[jvm] PASSED - -FirmwareUpdateStateTest[jvm] > ProgressState can be instantiated with values()[jvm] PASSED - -FirmwareUpdateStateTest[jvm] > stripFormatArgs removes format arg without colon prefix()[jvm] PASSED - -FirmwareUpdateStateTest[jvm] > ProgressState defaults are correct()[jvm] PASSED - -FirmwareUpdateStateTest[jvm] > stripFormatArgs handles empty string()[jvm] PASSED - -FirmwareUpdateStateTest[jvm] > stripFormatArgs removes positional format argument()[jvm] PASSED - -FirmwareUpdateStateTest[jvm] > stripFormatArgs leaves string without format args unchanged()[jvm] PASSED - -FirmwareManifestTest[jvm] > real published manifest shape parses and resolves app0()[jvm] PASSED - -FirmwareManifestTest[jvm] > find app0 entry for OTA firmware()[jvm] PASSED - -FirmwareManifestTest[jvm] > file entry defaults for optional fields()[jvm] PASSED - -FirmwareManifestTest[jvm] > unknown keys including scalar metadata are ignored()[jvm] PASSED - -FirmwareManifestTest[jvm] > empty files list is valid()[jvm] PASSED - -FirmwareManifestTest[jvm] > missing files field uses default()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > validate rejects blank target with MissingTarget()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > nrf BLE local firmware rejects generic architecture zip()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > pending local firmware prioritizes changed context over target mismatch()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects mt- prefix()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > nrf BLE local firmware rejects zip without ota suffix()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > target with underscore separator matches()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > esp32 local firmware accepts target matching app binary()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > accepts older local firmware filename shapes()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > accepts full colliding target names()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > standard firmware bin matches()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects target substring without boundary()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > usb rejects wrong extension with RequiresUf2()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > accepts a v-prefixed version after the target()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > pending local firmware rejects changed update method before confirmation()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > nrf BLE local firmware rejects wrong target ota zip()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects bleota prefix()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > filename starting with target and extension matches()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > empty target returns false()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > filename starting with target and version matches()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > preferred local firmware archive filenames follow retriever order()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > empty filename returns false()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > esp32 rejects wrong extension with RequiresBin()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > standard firmware uf2 matches()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > pending local firmware rejects changed address before confirmation()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > esp32 local firmware rejects ota helper binary()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > ota zip matches for nrf target()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > nrf BLE local firmware accepts target matching ota zip()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > esp32 local firmware rejects bleota helper binary()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects wrong extension()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > usb local firmware accepts matching uf2 and rejects wrong target()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects littlefs prefix()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > validate rejects Unknown update method with UnsupportedUpdateMethod()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects factory binary()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects target prefix collisions()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > pending local firmware validates unchanged confirmation context()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects when target not present()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > local firmware payload extension follows update method and architecture()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects digit-led sibling variants()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > pending local firmware rejects changed target before confirmation()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > esp32 local firmware rejects factory binary()[jvm] PASSED - -IsValidFirmwareFileTest[jvm] > rejects bleota0 prefix()[jvm] PASSED - -ZipExtractionTest[jvm] > readAtMost stops reading once the limit is passed()[jvm] PASSED - -ZipExtractionTest[jvm] > the duplicate-name fixture really does yield repeated entries()[jvm] PASSED - -ZipExtractionTest[jvm] > readAtMost returns the content when it fits()[jvm] PASSED - -ZipExtractionTest[jvm] > too many entries is refused()[jvm] PASSED - -ZipExtractionTest[jvm] > the compressed side is bounded even when the declared size is unknown()[jvm] PASSED - -ZipExtractionTest[jvm] > directory entries do not consume the entry budget()[jvm] PASSED - -ZipExtractionTest[jvm] > readAtMost accepts a source exactly at the limit()[jvm] PASSED - -ZipExtractionTest[jvm] > duplicate entry names cannot bypass the entry cap()[jvm] PASSED - -ZipExtractionTest[jvm] > a compression bomb is refused without inflating it()[jvm] PASSED - -ZipExtractionTest[jvm] > a normal archive extracts every entry()[jvm] PASSED - -ZipExtractionTest[jvm] > a normal archive is unaffected by the compressed bound()[jvm] PASSED - -ZipExtractionTest[jvm] > the uncompressed budget is enforced across entries, not per entry()[jvm] PASSED - -Esp32OtaRoutingTest[jvm] > IPv4 address is not a BLE target()[jvm] PASSED - -Esp32OtaRoutingTest[jvm] > hostname is not a BLE target()[jvm] PASSED - -Esp32OtaRoutingTest[jvm] > IPv6 literal is not a BLE target()[jvm] PASSED - -Esp32OtaRoutingTest[jvm] > MAC address is a BLE target()[jvm] PASSED - -FirmwareHashUtilTest[jvm] > testSha256Calculation()[jvm] PASSED - -FirmwareHashUtilTest[jvm] > testBytesToHex()[jvm] PASSED - -DfuResponseTest[jvm] > parseFailureResponse()[jvm] PASSED - -DfuResponseTest[jvm] > parseSuccessResponse()[jvm] PASSED - -DfuResponseTest[jvm] > parseUnknownResponse()[jvm] PASSED - -DfuResponseTest[jvm] > parseSelectResultResponse()[jvm] PASSED - -DfuResponseTest[jvm] > parseChecksumResultResponse()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuManifest deserializes application entry()[jvm] PASSED - -FirmwareUpdateHelpersTest[jvm] > retryWithDelay returns first success without further attempts()[jvm] PASSED - -FirmwareUpdateHelpersTest[jvm] > formatTransferProgress omits speed when throughput is zero()[jvm] PASSED - -FirmwareUpdateHelpersTest[jvm] > retryWithDelay retries until success and reports each attempt()[jvm] PASSED - -FirmwareUpdateHelpersTest[jvm] > formatTransferProgress omits speed when throughput is non-positive()[jvm] PASSED - -FirmwareUpdateHelpersTest[jvm] > formatTransferProgress includes KiB per second and ETA()[jvm] PASSED - -FirmwareUpdateHelpersTest[jvm] > retryWithDelay returns the last failure after exhausting attempts()[jvm] PASSED - -ThroughputTrackerTest[jvm] > testThroughputCalculation()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Failure with extended error when result is EXT_ERROR()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > Failure with same extended error is equal()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > primaryEntry falls back to bootloader()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Failure for CALCULATE_CHECKSUM when payload too short()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuExtendedError describe returns known descriptions()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuException ProtocolError includes extended error description in message()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Failure without extended error for non-EXT_ERROR codes()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > primaryEntry is null when all entries are null()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > Failure with null vs non-null extended error is not equal()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > primaryEntry prefers application over all others()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > CRC-32 of empty data is zero()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuManifest deserializes softdevice_bootloader entry()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Success for ABORT opcode()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > CRC-32 offset and length slice correctly()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > intToLeBytes and readIntLe round-trip for negative value()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > Unknown DfuResponse preserves raw bytes()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuExtendedError describe returns hex for unknown code()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuZipPackage inequality when content differs()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > intToLeBytes and readIntLe round-trip for positive value()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuManifest ignores unknown keys()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuException ChecksumMismatch formats hex values in message()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > CRC-32 single byte is deterministic()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuException ProtocolError without extended error omits ext field()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns ChecksumResult for CALCULATE_CHECKSUM success()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns SelectResult for SELECT success()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuException ProtocolError includes opcode and result code in message()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > intToLeBytes and readIntLe round-trip for Int MAX_VALUE()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > primaryEntry falls back to softdevice()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > intToLeBytes and readIntLe round-trip for zero()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Unknown when data is too short()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > primaryEntry falls back to softdevice_bootloader()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > intToLeBytes produces correct little-endian byte order()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > DfuZipPackage equality is content-based()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > CRC-32 with seed accumulates across segments()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > CRC-32 different data produces different CRC()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Failure for SELECT when payload too short()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Failure when result is not SUCCESS()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Unknown when first byte is not RESPONSE_CODE()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Success for EXECUTE opcode()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Success for CREATE opcode()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Failure without extended error when EXT_ERROR but no extra byte()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > CRC-32 standard check vector - 123456789()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > parse returns Success for SET_PRN opcode()[jvm] PASSED - -SecureDfuProtocolTest[jvm] > readIntLe reads from non-zero offset()[jvm] PASSED - -DfuUploadPhaseStateTest[jvm] > PREPARING is a Processing state rather than Uploading at zero()[jvm] PASSED - -DfuUploadPhaseStateTest[jvm] > STREAMING returns to Uploading at zero with the slow hint preserved()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > initial StaleSessionReset keeps NORMAL profile()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > NORMAL switches to RECOVERY only after MidStreamDisconnect()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > Unknown Legacy stale cleanup after engagement does not consume promoted budget()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > cleanup skips abort after MidStreamDisconnect but always closes()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > stale cleanup does not consume an upload attempt()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > retries are announced before the delay and not after the last attempt()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > Secure protocol returns Success on first successful session()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > cleanup skips abort after StaleSessionReset but always closes()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > cleanup closes transport after abort throws Error()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > Unknown Legacy pre-engagement connect failure stops after 1 attempt for timely Secure fallback()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > cleanup closes transport after abort throws Exception()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > cleanup skips abort after completed session but always closes()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > drop stale drop stale success fits within 3 uploads and 2 stale resets()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > stale cleanup is not announced as a retry()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > drop then stale then success consumes one upload attempt and switches to RECOVERY()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > Secure budget stays at 1 even when Secure session reports protocolEngaged true()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > cleanup attempts abort after ambiguous ConnectionFailed and always closes()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > original MidStreamDisconnect stays visible when terminal failure differs()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > Legacy alternate that engages receives full engaged Legacy budget()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > Unknown Legacy engagement during MidStreamDisconnect promotes budget to 3 and uses RECOVERY()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > repeated stale responses stop at MAX_LEGACY_STALE_RESETS()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > ordinary failures consume the three upload attempts()[jvm] PASSED - -LegacyDfuRetryPolicyTest[jvm] > Secure protocol runs the attempts loop without stale handling()[jvm] PASSED - -FirmwareUpdateIntegrationTest[jvm] > startUpdate sets Error state when manager reports failure()[jvm] PASSED - -FirmwareUpdateIntegrationTest[jvm] > cancelUpdate returns ViewModel to Ready state()[jvm] PASSED - -FirmwareUpdateIntegrationTest[jvm] > startUpdate transitions through Updating to Success when manager succeeds()[jvm] PASSED - -FirmwareUpdateIntegrationTest[jvm] > ViewModel initialises to Ready with release and device info()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile cleans up on manager error state()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile prefers esp32 update binary from release bundle()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > a granted USB permission preflight reconnects explicitly instead of waiting on auto-recovery()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile is no-op when state is not Ready()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile starts update after pending selection()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile keeps AwaitingFileSave state for USB path()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:testGoogleDebugUnitTest - -NavigationAssemblyTest > mapRouteEffectRestartsWhenEntryReturnsFromBackStack PASSED - -NavigationAssemblyTest > mapRouteForwardsWaypointAndSitePlannerNode PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:docs:jvmTest - -DocBundleLoaderTest[jvm] > pages by section returns correct grouping()[jvm] PASSED - -DocBundleLoaderTest[jvm] > read page returns null for invalid page id()[jvm] PASSED - -DocBundleLoaderTest[jvm] > load returns non-empty bundle()[jvm] PASSED - -DocBundleLoaderTest[jvm] > pages by section are sorted by navOrder()[jvm] PASSED - -DocBundleLoaderTest[jvm] > all pages have non-empty keywords()[jvm] PASSED - -DocBundleLoaderTest[jvm] > page index keys match page ids()[jvm] PASSED - -DocBundleLoaderTest[jvm] > read page returns content for valid page id()[jvm] PASSED - -DocBundleLoaderTest[jvm] > all pages have positive char count()[jvm] PASSED - -DocsBrowserScreenTest[jvm] > emptyPages_noSearchQuery_showsNoDocsMessage()[jvm] PASSED - -DocsBrowserScreenTest[jvm] > loadingState_showsSpinner()[jvm] PASSED - -DocsBrowserScreenTest[jvm] > userGuideSection_showsSectionHeader()[jvm] PASSED - -DocsBrowserScreenTest[jvm] > emptyPages_withSearchQuery_showsNoResultsMessage()[jvm] PASSED - -TranslationCascadeTest[jvm] > fake translator returns success with translated content()[jvm] PASSED - -TranslationCascadeTest[jvm] > NoOp translator reports language unavailable()[jvm] PASSED - -TranslationCascadeTest[jvm] > NoOp translator download returns Failed()[jvm] PASSED - -TranslationCascadeTest[jvm] > fake translator returns Unavailable for unsupported locales()[jvm] PASSED - -TranslationCascadeTest[jvm] > TranslationResult sealed hierarchy covers all cases()[jvm] PASSED - -TranslationCascadeTest[jvm] > NoOp translator returns Unavailable for any locale()[jvm] PASSED - -TranslationCascadeTest[jvm] > fake translator returns ModelDownloadRequired when not downloaded()[jvm] PASSED - -TranslationCascadeTest[jvm] > cache hit avoids translation call()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > simpleName_navigatesToPage()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > anchorOnly_emptyAnchor_isIgnored()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > anchorOnlyLink_isIgnored()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > httpLink_delegatesToFallbackForHttp()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > httpLink_delegatesToFallback()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > mdExtension_isStripped()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > relativePathWithHtmlAndAnchor_extractsCleanPageId()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > linkWithAnchor_stripsAnchorAndNavigates()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > relativePathWithParent_extractsFilename()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > blankUri_isIgnored()[jvm] PASSED - -DocsLinkUriHandlerTest[jvm] > htmlExtension_isStripped()[jvm] PASSED - -DocsBrowserScreenTest[jvm] > pageItemClick_callsOnSelectPage()[jvm] PASSED - -DocsBrowserScreenTest[jvm] > pagesLoaded_showsTitles()[jvm] PASSED - -DocsBrowserScreenTest[jvm] > backButton_callsOnBack()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:firmware:jvmTest - -FirmwareUpdateViewModelFileTest[jvm] > completing the firmware pass of a maintenance sequence releases the lock()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > a refused erase never takes the maintenance lock()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile starts ESP32 BLE update without zip extraction()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile shows error when filename is unavailable()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > starting a refused erase performs no reboot and no download()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > maintenance is offered for an nrf device over usb with a resolved softdevice()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > dismissLocalFirmwareFile deletes extracted bundle firmware()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile is cancelled when state changes before resolution starts()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile shows error for Unknown update method()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > startUpdate keeps AwaitingFileSave state for USB path()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > a failed preparation releases the maintenance lock()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile reports a firmware_update_start action for the local file()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > maintenance refuses erase when the softdevice is unresolved()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > saveDfuFile copies artifact and transitions through Processing states()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile extracts esp32 firmware from release bundle()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > checkForUpdates clears pending local firmware selection()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile with BLE and invalid address shows error()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > starting a bootloader upgrade the gate would not offer performs no reboot and no download()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile extracts usb firmware from release bundle()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile shows error when archive has no matching target()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile is no-op when pending selection was cancelled()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > maintenance is hidden on a platform with no maintenance flow()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > maintenance is hidden over bluetooth()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > dismissLocalFirmwareFile clears pending selection()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > writeMaintenancePass is ignored when no sequence is running()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile shows extracting progress while resolving bundle()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > confirmLocalFirmwareFile with BLE and invalid address reports no analytics action()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > prepareLocalFirmwareFile extracts nrf firmware from release bundle()[jvm] PASSED - -FirmwareUpdateViewModelFileTest[jvm] > onCleared cleans up pending local firmware artifact()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > exception during update emits Error state()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > user-selected file extracts filename from URI path()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > download path returns artifact for caller cleanup()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > download path reports progress percentages during download()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > user-selected file returns null - no cleanup artifact()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > download path emits AwaitingFileSave when retriever succeeds()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > download path emits Error when retriever returns null()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > user-selected file emits Downloading then Processing then AwaitingFileSave()[jvm] PASSED - -PerformUsbUpdateTest[jvm] > exception returns cleanup artifact when download partially completed()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > gate is shown for nrf52840 over usb with a release()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > gate is hidden for esp32 even over usb()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > factory erase family parsing tolerates case and leading whitespace like its siblings()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > each softdevice variant resolves to its own image and target address()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > board id tolerates leading whitespace on its line just like the softdevice line()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > an unsafe erase filename refuses the image instead of throwing()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > an absent or malformed factory erase line yields no family()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > unsupported softdevice ids and absent lines yield null()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > otafix is offered only for supported targets()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > neither source resolving means unresolved()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > softdevice and board id are both read from a real stock bootloader payload()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > factory erase family is parsed from the bootloader's own line()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > unresolved softdevice shows the action but refuses it()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > board id is stable across bootloader vintages for the same board()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > bootloader erase image refuses when the manifest cannot vouch for a family()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > both variants are parsed from real captured bootloader payloads()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > a drive report rescues an unmapped model()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > board id selects the image rather than the build target()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > no erase image is resolved for an unresolved softdevice()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > an unsafe bootloader erase filename refuses the image instead of throwing()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > an old bootloader vintage still reports its softdevice and board id()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > board id is parsed from an INFO_UF2 payload and tolerates surrounding lines()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > uf2 target address is read from the first block()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > gate is shown for rp2040 over usb and never refuses on softdevice()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > softdevice line is parsed for both shipped variants()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > gate is hidden on a platform that cannot run the sequence()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > agreement resolves to the reported variant's image()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > every shipped otafix image resolves and no two boards share a digest or filename()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > every otafix board id maps to its exact expected release filename and digest()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > uf2 family id is absent when the family flag is clear()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > otafix is not offered for products that merely share a supported build target()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > rp2040 resolves the pico erase image with no address invariant()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > each erase image targets the app start of the softdevice it is linked for()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > esp32 resolves no erase image()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > non-uf2 payloads yield no family id()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > only the softdevice erase sketches need a cdc unblock()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > an unsafe otafix slug or tag refuses the image instead of throwing()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > the manifest decodes the bootloader erase entry with its family id()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > an unrecognized board id refuses rather than falling back()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > the drive outranks the bundled map()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > bootloader erase image resolves when the volume advertises the manifest family()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > xiao sense is distinguished from plain xiao only by board id()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > bootloader erase image refuses a volume advertising another family or none()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > a payload without a board id line yields null()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > gate is hidden without a release because there would be nothing to reflash()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > uf2 family id is read from the first block when the family flag is set()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > a different factory erase family still parses so the resolver can refuse it()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > factory erase family takes the last hex token on the line()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > an old bootloader with no softdevice line falls back to the bundled map()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > rp2040 with no erase data reports missing data rather than unsupported architecture()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > gate is hidden for every non-usb transport()[jvm] PASSED - -UsbMaintenanceGateTest[jvm] > non-uf2 payloads yield no target address()[jvm] PASSED - -BleOtaTransportTest[jvm] > startOta handles ERASING then OK sequence()[jvm] PASSED - -BleOtaTransportTest[jvm] > connect succeeds when device advertises MAC plus one()[jvm] PASSED - -BleOtaTransportTest[jvm] > startOta fails on generic error()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware fails immediately on empty firmware()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware sends data and succeeds with final OK()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware fails on Hash Mismatch error()[jvm] PASSED - -BleOtaTransportTest[jvm] > connect fails when connectAndAwait returns Disconnected()[jvm] PASSED - -BleOtaTransportTest[jvm] > connect reconnects once when cache refresh leaves stale OTA services()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware succeeds when the last chunk is ACKed then a separate terminal OK arrives()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware clamps chunk to negotiated write payload and acks once per chunk()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware reuses discovered OTA service for chunk writes()[jvm] PASSED - -BleOtaTransportTest[jvm] > connect fails when notification observation fails before subscription()[jvm] PASSED - -BleOtaTransportTest[jvm] > startOta splits command across MTU-sized packets()[jvm] PASSED - -BleOtaTransportTest[jvm] > startOta sends command and succeeds on OK response()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware fails on generic transfer error()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware surfaces a final-chunk error instead of reporting success()[jvm] PASSED - -BleOtaTransportTest[jvm] > connect fails when OTA characteristics are missing()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware fails on connection lost()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware fails when a non-final chunk receives OK()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware fails when a terminal error arrives after the last chunk is ACKed()[jvm] PASSED - -BleOtaTransportTest[jvm] > streamFirmware handles multi-chunk transfer()[jvm] PASSED - -BleOtaTransportTest[jvm] > startOta fails on Hash Rejected error()[jvm] PASSED - -BleOtaTransportTest[jvm] > connect succeeds when device is found()[jvm] PASSED - -BleOtaTransportTest[jvm] > close disconnects BLE connection()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed BLE preflight closes failed transports and surfaces connection error after retries()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed WiFi preflight uses UDP discovered address before connecting()[jvm] PASSED - -> Task :feature:firmware:testAndroidHostTest - -DefaultFirmwareUpdateManagerTest > Unknown connection type throws error PASSED - -DefaultFirmwareUpdateManagerTest > TCP + ESP32 routes to OTA handler PASSED - -DefaultFirmwareUpdateManagerTest > BLE + ESP32 routes to OTA handler PASSED - -DefaultFirmwareUpdateManagerTest > Serial + nRF52 routes to USB handler PASSED - -DefaultFirmwareUpdateManagerTest > TCP target is the passed address PASSED - -DefaultFirmwareUpdateManagerTest > Null address throws error PASSED - -DefaultFirmwareUpdateManagerTest > BLE target is the passed address PASSED - -DefaultFirmwareUpdateManagerTest > BLE + nRF52 routes to Secure DFU handler PASSED - -DefaultFirmwareUpdateManagerTest > TCP + nRF52 throws error PASSED - -DefaultFirmwareUpdateManagerTest > Serial + ESP32 throws error PASSED - -DefaultFirmwareUpdateManagerTest > Serial target is empty string PASSED - -DefaultFirmwareUpdateManagerTest > Unknown connection target is empty string PASSED - -IsValidFirmwareFileTest > validate rejects blank target with MissingTarget PASSED - -IsValidFirmwareFileTest > nrf BLE local firmware rejects generic architecture zip PASSED - -IsValidFirmwareFileTest > pending local firmware prioritizes changed context over target mismatch PASSED - -IsValidFirmwareFileTest > rejects mt- prefix PASSED - -IsValidFirmwareFileTest > nrf BLE local firmware rejects zip without ota suffix PASSED - -IsValidFirmwareFileTest > target with underscore separator matches PASSED - -IsValidFirmwareFileTest > esp32 local firmware accepts target matching app binary PASSED - -IsValidFirmwareFileTest > accepts older local firmware filename shapes PASSED - -IsValidFirmwareFileTest > accepts full colliding target names PASSED - -IsValidFirmwareFileTest > standard firmware bin matches PASSED - -IsValidFirmwareFileTest > rejects target substring without boundary PASSED - -IsValidFirmwareFileTest > usb rejects wrong extension with RequiresUf2 PASSED - -IsValidFirmwareFileTest > accepts a v-prefixed version after the target PASSED - -IsValidFirmwareFileTest > pending local firmware rejects changed update method before confirmation PASSED - -IsValidFirmwareFileTest > nrf BLE local firmware rejects wrong target ota zip PASSED - -IsValidFirmwareFileTest > rejects bleota prefix PASSED - -IsValidFirmwareFileTest > filename starting with target and extension matches PASSED - -IsValidFirmwareFileTest > empty target returns false PASSED - -IsValidFirmwareFileTest > filename starting with target and version matches PASSED - -IsValidFirmwareFileTest > preferred local firmware archive filenames follow retriever order PASSED - -IsValidFirmwareFileTest > empty filename returns false PASSED - -IsValidFirmwareFileTest > esp32 rejects wrong extension with RequiresBin PASSED - -IsValidFirmwareFileTest > standard firmware uf2 matches PASSED - -IsValidFirmwareFileTest > pending local firmware rejects changed address before confirmation PASSED - -IsValidFirmwareFileTest > esp32 local firmware rejects ota helper binary PASSED - -IsValidFirmwareFileTest > ota zip matches for nrf target PASSED - -IsValidFirmwareFileTest > nrf BLE local firmware accepts target matching ota zip PASSED - -IsValidFirmwareFileTest > esp32 local firmware rejects bleota helper binary PASSED - -IsValidFirmwareFileTest > rejects wrong extension PASSED - -IsValidFirmwareFileTest > usb local firmware accepts matching uf2 and rejects wrong target PASSED - -IsValidFirmwareFileTest > rejects littlefs prefix PASSED - -IsValidFirmwareFileTest > validate rejects Unknown update method with UnsupportedUpdateMethod PASSED - -IsValidFirmwareFileTest > rejects factory binary PASSED - -IsValidFirmwareFileTest > rejects target prefix collisions PASSED - -IsValidFirmwareFileTest > pending local firmware validates unchanged confirmation context PASSED - -IsValidFirmwareFileTest > rejects when target not present PASSED - -IsValidFirmwareFileTest > local firmware payload extension follows update method and architecture PASSED - -IsValidFirmwareFileTest > rejects digit-led sibling variants PASSED - -IsValidFirmwareFileTest > pending local firmware rejects changed target before confirmation PASSED - -IsValidFirmwareFileTest > esp32 local firmware rejects factory binary PASSED - -IsValidFirmwareFileTest > rejects bleota0 prefix PASSED - -Esp32OtaUpdateHandlerTest > Confirmed BLE preflight closes failed transports and surfaces connection error after retries PASSED - -Esp32OtaUpdateHandlerTest > Confirmed WiFi preflight uses UDP discovered address before connecting PASSED - -Esp32OtaUpdateHandlerTest > Silent preflight falls back to legacy OTA reconnect path PASSED - -Esp32OtaUpdateHandlerTest > Confirmed WiFi preflight falls back to configured address when UDP discovery misses PASSED - -Esp32OtaUpdateHandlerTest > Rejected preflight preserves mesh transport and surfaces Error PASSED - -Esp32OtaUpdateHandlerTest > Confirmed preflight releases the mesh transport PASSED - -Esp32OtaUpdateHandlerTest > Confirmed WiFi preflight retries with fresh transport after connection failure PASSED - -Esp32OtaUpdateHandlerTest > Confirmed WiFi preflight closes failed transports and surfaces connection error after retries PASSED - -Esp32OtaUpdateHandlerTest > Confirmed WiFi preflight waits for OTA service readiness before connecting PASSED - -Esp32OtaUpdateHandlerTest > Confirmed BLE preflight retries with fresh transport after connection failure PASSED - -WifiOtaDiscoveryTest > senderHost extracts host from UDP sender address PASSED - -WifiOtaDiscoveryTest > Meshtastic OTA discovery beacon is identified PASSED - -WifiOtaDiscoveryTest > unrelated port 3232 datagrams are ignored PASSED - -DfuUploadPhaseStateTest > PREPARING is a Processing state rather than Uploading at zero PASSED - -DfuUploadPhaseStateTest > STREAMING returns to Uploading at zero with the slow hint preserved PASSED - -SecureDfuProtocolTest > DfuManifest deserializes application entry PASSED - -SecureDfuProtocolTest > parse returns Failure with extended error when result is EXT_ERROR PASSED - -SecureDfuProtocolTest > Failure with same extended error is equal PASSED - -SecureDfuProtocolTest > primaryEntry falls back to bootloader PASSED - -SecureDfuProtocolTest > parse returns Failure for CALCULATE_CHECKSUM when payload too short PASSED - -SecureDfuProtocolTest > DfuExtendedError describe returns known descriptions PASSED - -SecureDfuProtocolTest > DfuException ProtocolError includes extended error description in message PASSED - -SecureDfuProtocolTest > parse returns Failure without extended error for non-EXT_ERROR codes PASSED - -SecureDfuProtocolTest > primaryEntry is null when all entries are null PASSED - -SecureDfuProtocolTest > Failure with null vs non-null extended error is not equal PASSED - -SecureDfuProtocolTest > primaryEntry prefers application over all others PASSED - -SecureDfuProtocolTest > CRC-32 of empty data is zero PASSED - -SecureDfuProtocolTest > DfuManifest deserializes softdevice_bootloader entry PASSED - -SecureDfuProtocolTest > parse returns Success for ABORT opcode PASSED - -SecureDfuProtocolTest > CRC-32 offset and length slice correctly PASSED - -SecureDfuProtocolTest > intToLeBytes and readIntLe round-trip for negative value PASSED - -SecureDfuProtocolTest > Unknown DfuResponse preserves raw bytes PASSED - -SecureDfuProtocolTest > DfuExtendedError describe returns hex for unknown code PASSED - -SecureDfuProtocolTest > DfuZipPackage inequality when content differs PASSED - -SecureDfuProtocolTest > intToLeBytes and readIntLe round-trip for positive value PASSED - -SecureDfuProtocolTest > DfuManifest ignores unknown keys PASSED - -SecureDfuProtocolTest > DfuException ChecksumMismatch formats hex values in message PASSED - -SecureDfuProtocolTest > CRC-32 single byte is deterministic PASSED - -SecureDfuProtocolTest > DfuException ProtocolError without extended error omits ext field PASSED - -SecureDfuProtocolTest > parse returns ChecksumResult for CALCULATE_CHECKSUM success PASSED - -SecureDfuProtocolTest > parse returns SelectResult for SELECT success PASSED - -SecureDfuProtocolTest > DfuException ProtocolError includes opcode and result code in message PASSED - -SecureDfuProtocolTest > intToLeBytes and readIntLe round-trip for Int MAX_VALUE PASSED - -SecureDfuProtocolTest > primaryEntry falls back to softdevice PASSED - -SecureDfuProtocolTest > intToLeBytes and readIntLe round-trip for zero PASSED - -SecureDfuProtocolTest > parse returns Unknown when data is too short PASSED - -SecureDfuProtocolTest > primaryEntry falls back to softdevice_bootloader PASSED - -SecureDfuProtocolTest > intToLeBytes produces correct little-endian byte order PASSED - -SecureDfuProtocolTest > DfuZipPackage equality is content-based PASSED - -SecureDfuProtocolTest > CRC-32 with seed accumulates across segments PASSED - -SecureDfuProtocolTest > CRC-32 different data produces different CRC PASSED - -SecureDfuProtocolTest > parse returns Failure for SELECT when payload too short PASSED - -SecureDfuProtocolTest > parse returns Failure when result is not SUCCESS PASSED - -SecureDfuProtocolTest > parse returns Unknown when first byte is not RESPONSE_CODE PASSED - -SecureDfuProtocolTest > parse returns Success for EXECUTE opcode PASSED - -SecureDfuProtocolTest > parse returns Success for CREATE opcode PASSED - -SecureDfuProtocolTest > parse returns Failure without extended error when EXT_ERROR but no extra byte PASSED - -SecureDfuProtocolTest > CRC-32 standard check vector - 123456789 PASSED - -SecureDfuProtocolTest > parse returns Success for SET_PRN opcode PASSED - -SecureDfuProtocolTest > readIntLe reads from non-zero offset PASSED - -> Task :feature:map:jvmTest - -BaseMapViewModelTest[jvm] > displayUnits follows a mid-session units change()[jvm] PASSED - -BaseMapViewModelTest[jvm] > the map's node set carries ignored nodes once the filter asks for them()[jvm] PASSED - -BaseMapViewModelTest[jvm] > toggling a role keeps role names this build does not know()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testWaypointsFilterMixedExpiredAndActiveWaypoints()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testNodesWithPositionStartsEmpty()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testWaypointsExcludeBoundaryExpirations()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testInitialization()[jvm] PASSED - -LastHeardFilterTest[jvm] > fromSeconds_knownValues()[jvm] PASSED - -LastHeardFilterTest[jvm] > fromSeconds_unknownValue_defaultsToAny()[jvm] PASSED - -LastHeardFilterTest[jvm] > seconds_matchExpectedValues()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testWaypointsIncludeNeverExpiringWaypoints()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testWaypointsIncludeFutureExpirations()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testNodeRepositoryIntegration()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testConnectionStateFlow()[jvm] PASSED - -BaseMapViewModelTest[jvm] > the map's node set hides ignored nodes by default()[jvm] PASSED - -BaseMapViewModelTest[jvm] > testMyNodeInfoFlow()[jvm] PASSED - -MapTimeWindowsTest[jvm] > a point inside the window is kept and one outside is dropped()[jvm] PASSED - -MapTimeWindowsTest[jvm] > a node heard within the pulse window pulses()[jvm] PASSED - -MapTimeWindowsTest[jvm] > the any filter keeps every point however old()[jvm] PASSED - -SitePlannerLaunchTest[jvm] > node detail launch retains selected node while manual launch follows connected node()[jvm] PASSED - -GroundOverlayCornersTest[jvm] > no rotation is the plain box()[jvm] PASSED - -GroundOverlayCornersTest[jvm] > ninety degrees counter-clockwise turns the top edge into the left edge()[jvm] PASSED - -GroundOverlayCornersTest[jvm] > rotation happens about the box centre rather than the origin()[jvm] PASSED - -LayerOpacityTest[jvm] > an unset layer is fully opaque()[jvm] PASSED - -LayerOpacityTest[jvm] > a stored opacity survives a round trip()[jvm] PASSED - -LayerOpacityTest[jvm] > a malformed entry is dropped rather than failing the load()[jvm] PASSED - -LayerOpacityTest[jvm] > a fully opaque layer is not stored()[jvm] PASSED - -LayerOpacityTest[jvm] > a non-finite value is dropped rather than clamped()[jvm] PASSED - -LayerOpacityTest[jvm] > a key containing the delimiter still decodes()[jvm] PASSED - -LayerOpacityTest[jvm] > an out of range value is clamped()[jvm] PASSED - -CustomTileProviderConfigTest[jvm] > validation refuses what is not an http url at all()[jvm] PASSED - -CustomTileProviderConfigTest[jvm] > a port and a query string are both fine()[jvm] PASSED - -CustomTileProviderConfigTest[jvm] > a template missing any of the three coordinates is rejected()[jvm] PASSED - -CustomTileProviderConfigTest[jvm] > Google-compatible validation rejects unsafe and unresolved templates()[jvm] PASSED - -CustomTileProviderConfigTest[jvm] > HTTPS can be required()[jvm] PASSED - -CustomTileProviderConfigTest[jvm] > Google-compatible validation retains HTTP support()[jvm] PASSED - -WebMercatorBboxTest[jvm] > zoom zero spans the whole projected world()[jvm] PASSED - -WebMercatorBboxTest[jvm] > the top-left tile of zoom one covers the north-west quadrant()[jvm] PASSED - -WebMercatorBboxTest[jvm] > bounds are never written in exponent notation()[jvm] PASSED - -MapBoundsTest[jvm] > a node with no fix is not a location()[jvm] PASSED - -MapBoundsTest[jvm] > a box covers every point given()[jvm] PASSED - -MapBoundsTest[jvm] > points stacked on one spot are padded the same way()[jvm] PASSED - -MapBoundsTest[jvm] > no points yields no box()[jvm] PASSED - -MapBoundsTest[jvm] > a single point is padded into something the camera can fit()[jvm] PASSED - -OfflineFallbackTest[jvm] > stays put when the network is down but there is nothing to fall back to()[jvm] PASSED - -OfflineFallbackTest[jvm] > stays put while the network is up regardless of a fallback()[jvm] PASSED - -OfflineFallbackTest[jvm] > switches when the network is down and a fallback exists()[jvm] PASSED - -WebMercatorBboxTest[jvm] > a WMS overlay resolves its bbox placeholder into four bounds()[jvm] PASSED - -MapNodePolicyTest[jvm] > my own node survives every new filter()[jvm] PASSED - -MapNodePolicyTest[jvm] > ignored nodes are hidden by default()[jvm] PASSED - -MapNodePolicyTest[jvm] > the online filter drops nodes unheard for over two hours()[jvm] PASSED - -MapNodePolicyTest[jvm] > last heard filter drops nodes outside the window()[jvm] PASSED - -MapNodePolicyTest[jvm] > the signed filter keeps only nodes whose signature the radio verified()[jvm] PASSED - -MapNodePolicyTest[jvm] > nodes without a fix never reach the map()[jvm] PASSED - -MapNodePolicyTest[jvm] > showing ignored nodes adds them rather than showing only them()[jvm] PASSED - -MapNodePolicyTest[jvm] > the mqtt filter drops nodes heard over mqtt()[jvm] PASSED - -MapNodePolicyTest[jvm] > a node whose role is excluded is hidden()[jvm] PASSED - -MapNodePolicyTest[jvm] > my own node still needs a fix to be drawn()[jvm] PASSED - -MapNodePolicyTest[jvm] > the encrypted filter keeps a key on file and drops one that stopped matching()[jvm] PASSED - -MapNodePolicyTest[jvm] > my own node survives the last heard filter()[jvm] PASSED - -MapNodePolicyTest[jvm] > excluding CLIENT also hides every node that never reported a role()[jvm] PASSED - -MapNodePolicyTest[jvm] > the direct filter drops both relayed nodes and nodes of unknown distance()[jvm] PASSED - -MapNodePolicyTest[jvm] > my own node survives the favourites filter()[jvm] PASSED - -MapNodePolicyTest[jvm] > favourites filter keeps only favourites()[jvm] PASSED - -MapNodePolicyTest[jvm] > excluding unknown nodes drops the ones with no name yet()[jvm] PASSED - -MapNodePolicyTest[jvm] > this node and favourites draw above everything else()[jvm] PASSED - -MapNodePolicyTest[jvm] > the direct filter drops an mqtt node reporting zero hops()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :androidApp:test - -> Task :feature:docs:jvmTest - -DocImageWiringTest[jvm] > every image referenced by a bundled page resolves to a bundled resource()[jvm] PASSED - -DocImageWiringTest[jvm] > external links are not transformed()[jvm] PASSED - -DocImageWiringTest[jvm] > relative asset links resolve to the bundled screenshots directory()[jvm] PASSED - -DocImageWiringTest[jvm] > root-relative asset links resolve to the bundled screenshots directory()[jvm] PASSED - -> Task :feature:map-maplibre:compileTestKotlinJvm - -> Task :feature:intro:testAndroidHostTest - -IntroPermissionActionTest > granted advances PASSED - -IntroPermissionActionTest > permanent denial routes to app settings rather than a no-op request PASSED - -IntroPermissionActionTest > a single denial still requests because the system will still prompt PASSED - -IntroPermissionActionTest > never asked requests PASSED - -IntroViewModelTest > testWelcomeNavigatesNextToBluetooth PASSED - -IntroViewModelTest > testLocationNavigatesToNotifications PASSED - -IntroViewModelTest > testNotificationsWithPermissionNavigatesToCriticalAlerts PASSED - -IntroViewModelTest > testNotificationsWithoutPermissionNavigatesToNull PASSED - -IntroViewModelTest > testBluetoothSkipsLocationWhenItAlreadyAskedForIt PASSED - -IntroViewModelTest > testBluetoothNavigatesToLocation PASSED - -IntroViewModelTest > testCriticalAlertsIsTerminal PASSED - -> Task :feature:intro:allTests - -> Task :feature:firmware:jvmTest - -Esp32OtaUpdateHandlerTest[jvm] > Silent preflight falls back to legacy OTA reconnect path()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed WiFi preflight falls back to configured address when UDP discovery misses()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Rejected preflight preserves mesh transport and surfaces Error()[jvm] PASSED - -> Task :feature:map-terrain:compileAndroidHostTest - -> Task :feature:docs:jvmTest - -DocsNavigationTest[jvm] > HelpDocPage route equality()[jvm] PASSED - -DocsNavigationTest[jvm] > HelpDocs route serializable()[jvm] PASSED - -DocsNavigationTest[jvm] > HelpDocPage route preserves page id()[jvm] PASSED - -> Task :feature:map-maplibre:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonTest/kotlin/org/meshtastic/feature/map/maplibre/geojson/ContourFeaturesTest.kt:41:53 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonTest/kotlin/org/meshtastic/feature/map/maplibre/geojson/ContourFeaturesTest.kt:54:43 Cast is redundant. - -> Task :feature:map-maplibre:compileJvmTestJava NO-SOURCE -> Task :feature:map-maplibre:jvmTestClasses - -> Task :feature:map:jvmTest - -MapEngineUnavailableTest[jvm] > says what happened and that the rest of the app is fine()[jvm] PASSED - -MapEngineUnavailableTest[jvm] > offers nothing to tap()[jvm] PASSED - -WaypointExpiryTest[jvm] > neither sentinel counts as an expiry()[jvm] PASSED - -WaypointExpiryTest[jvm] > both sentinels fall back to the same default ahead of now()[jvm] PASSED - -WaypointExpiryTest[jvm] > a set expiry is returned as itself()[jvm] PASSED - -WaypointExpiryTest[jvm] > a real timestamp counts as an expiry()[jvm] PASSED - -KmlGroundOverlayTest[jvm] > an overlay with no image or no box is dropped()[jvm] PASSED - -KmlGroundOverlayTest[jvm] > overlays and placemarks come out of one document together()[jvm] PASSED - -KmlGroundOverlayTest[jvm] > an overlay-only document is not "nothing mappable"()[jvm] PASSED - -KmlGroundOverlayTest[jvm] > a ground overlay is read with its box and image()[jvm] PASSED - -KmlGroundOverlayTest[jvm] > an overlay does not swallow the placemark after it()[jvm] PASSED - -KmlGroundOverlayTest[jvm] > rotation is read when present()[jvm] PASSED - -MapLayerUriTest[jvm] > characters Android escapes are escaped()[jvm] PASSED - -MapLayerUriTest[jvm] > every escaped form decodes back to its own path()[jvm] PASSED - -MapLayerUriTest[jvm] > the unreserved set Android allows is left alone()[jvm] PASSED - -MapLayerUriTest[jvm] > a space becomes percent 20()[jvm] PASSED - -MapLayerUriTest[jvm] > non-latin names round-trip as utf-8 bytes()[jvm] PASSED - -MapLayerUriTest[jvm] > a plain path needs no escaping()[jvm] PASSED - -MapTileCatalogueTest[jvm] > OpenWeather is offered only when a key is supplied()[jvm] PASSED - -MapTileCatalogueTest[jvm] > every catalogue source resolves a tile url at its own minimum zoom()[jvm] PASSED - -MapTileCatalogueTest[jvm] > every source id is unique across basemaps and overlays()[jvm] PASSED - -MapTileCatalogueTest[jvm] > the NOAA overlay asks for the layer its url names()[jvm] PASSED - -MapTileCatalogueTest[jvm] > hillshade is terrarium encoded()[jvm] PASSED - -MapTileCatalogueTest[jvm] > the NOAA overlay requests projected bounds()[jvm] PASSED - -MapTileCatalogueTest[jvm] > every raster basemap declares attribution()[jvm] PASSED - -MapTileCatalogueTest[jvm] > only the elevation source is DEM encoded()[jvm] PASSED - -MapTileCatalogueTest[jvm] > the NOAA overlay does not point at the retired nowCOAST host()[jvm] PASSED - -> Task :feature:map-maplibre:compileAndroidHostTest -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonTest/kotlin/org/meshtastic/feature/map/maplibre/geojson/ContourFeaturesTest.kt:41:53 Cast is redundant. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/map-maplibre/src/commonTest/kotlin/org/meshtastic/feature/map/maplibre/geojson/ContourFeaturesTest.kt:54:43 Cast is redundant. - -> Task :feature:firmware:jvmTest - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed preflight releases the mesh transport()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed WiFi preflight retries with fresh transport after connection failure()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed WiFi preflight closes failed transports and surfaces connection error after retries()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed WiFi preflight waits for OTA service readiness before connecting()[jvm] PASSED - -Esp32OtaUpdateHandlerTest[jvm] > Confirmed BLE preflight retries with fresh transport after connection failure()[jvm] PASSED - -OtaResponseTest[jvm] > parseSimpleError()[jvm] PASSED - -OtaResponseTest[jvm] > parseUnknownResponse()[jvm] PASSED - -OtaResponseTest[jvm] > parseOkWithVersionData()[jvm] PASSED - -OtaResponseTest[jvm] > parseSimpleOk()[jvm] PASSED - -OtaResponseTest[jvm] > parseErrorWithMessage()[jvm] PASSED - -OtaResponseTest[jvm] > parseErasing()[jvm] PASSED - -OtaResponseTest[jvm] > parseAck()[jvm] PASSED - -WifiOtaDiscoveryTest[jvm] > senderHost extracts host from UDP sender address()[jvm] PASSED - -WifiOtaDiscoveryTest[jvm] > Meshtastic OTA discovery beacon is identified()[jvm] PASSED - -WifiOtaDiscoveryTest[jvm] > unrelated port 3232 datagrams are ignored()[jvm] PASSED - -WifiOtaTransportTest[jvm] > connect fails when device is unreachable()[jvm] PASSED - -WifiOtaTransportTest[jvm] > startOta fails on hash rejected response()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:docs:jvmTest - -DocTranslationCacheTest[jvm] > different hash returns null - stale cache()[jvm] PASSED - -DocTranslationCacheTest[jvm] > md5Hash differs for different content()[jvm] PASSED - -DocTranslationCacheTest[jvm] > get returns null for uncached page()[jvm] PASSED - -DocTranslationCacheTest[jvm] > clear removes all cached entries()[jvm] PASSED - -DocTranslationCacheTest[jvm] > md5Hash produces consistent hash()[jvm] PASSED - -DocTranslationCacheTest[jvm] > sizeBytes reports total cache size()[jvm] PASSED - -DocTranslationCacheTest[jvm] > put then get returns cached content()[jvm] PASSED - -DocTranslationCacheTest[jvm] > eviction removes oldest entries when over limit()[jvm] PASSED - -DocTranslationCacheTest[jvm] > different locale returns null()[jvm] PASSED - -DocsPageRouteScreenTest[jvm] > nullMarkdown_showsFallbackWithoutCrash()[jvm] PASSED - -DocsPageRouteScreenTest[jvm] > loadingState_showsSpinner()[jvm] PASSED - -> Task :feature:firmware:jvmTest - -WifiOtaTransportTest[jvm] > streamFirmware sends 1024-byte chunks and waits for final OK()[jvm] PASSED - -WifiOtaTransportTest[jvm] > startOta sends OTA command and succeeds on OK response()[jvm] PASSED - -WifiOtaTransportTest[jvm] > connect succeeds when TCP socket is established()[jvm] PASSED - -WifiOtaTransportTest[jvm] > close resets transport and closes TCP connection()[jvm] PASSED - -WifiOtaTransportTest[jvm] > streamFirmware fails on hash mismatch verification error()[jvm] PASSED - -WifiOtaTransportTest[jvm] > startOta reports erasing status before succeeding()[jvm] PASSED - -DfuZipParserTest[jvm] > picksPriorityImageWhenMultiplePresent()[jvm] PASSED - -DfuZipParserTest[jvm] > parseValidZipEntries()[jvm] PASSED - -DfuZipParserTest[jvm] > failsWhenBinFileNotFound()[jvm] PASSED - -DfuZipParserTest[jvm] > failsWhenNoEntryFound()[jvm] PASSED - -DfuZipParserTest[jvm] > failsWhenManifestDeclaresOnlyBootloader()[jvm] PASSED - -DfuZipParserTest[jvm] > failsWhenManifestIsMissing()[jvm] PASSED - -DfuZipParserTest[jvm] > failsWhenDatFileNotFound()[jvm] PASSED - -DfuZipParserTest[jvm] > failsWhenManifestIsInvalid()[jvm] PASSED - -DfuZipParserTest[jvm] > failsWhenManifestDeclaresOnlySoftDeviceBootloader()[jvm] PASSED - -SecureDfuTransportTest[jvm] > resume - device has complete data - just execute()[jvm] PASSED - -SecureDfuTransportTest[jvm] > transferInitPacket writes packet data WITHOUT_RESPONSE to PACKET characteristic()[jvm] PASSED - -SecureDfuTransportTest[jvm] > transferInitPacket sends PRN 0 not 10()[jvm] PASSED - -SecureDfuTransportTest[jvm] > abort writes ABORT opcode through BleService()[jvm] PASSED - -SecureDfuTransportTest[jvm] > default MTU is 20 bytes when connection returns null()[jvm] PASSED - -SecureDfuTransportTest[jvm] > transferFirmware reports progress()[jvm] PASSED - -SecureDfuTransportTest[jvm] > execute retry on INVALID_OBJECT for final object()[jvm] PASSED - -SecureDfuTransportTest[jvm] > transferFirmware splits data into objects of maxObjectSize()[jvm] PASSED - -SecureDfuTransportTest[jvm] > packet writes respect MTU size()[jvm] PASSED - -SecureDfuTransportTest[jvm] > transferFirmware sends PRN 10()[jvm] PASSED - -SecureDfuTransportTest[jvm] > triggerButtonlessDfu falls back to legacy DFU service when secure FE59 is missing()[jvm] PASSED - -SecureDfuTransportTest[jvm] > resume - object boundary - execute last then continue()[jvm] PASSED - -SecureDfuTransportTest[jvm] > transferFirmware fails on CRC mismatch after object()[jvm] PASSED - -SecureDfuTransportTest[jvm] > resume - CRC mismatch - restart from offset 0()[jvm] PASSED - -SecureDfuTransportTest[jvm] > connectToDfuMode succeeds using shared BleService observation()[jvm] PASSED - -SecureDfuTransportTest[jvm] > triggerButtonlessDfu writes reboot opcode through BleService()[jvm] PASSED - -> Task :feature:map:jvmTest - -CustomMapLayersSheetTest[jvm] > an imported layer's opacity is keyed by its uri rather than its id()[jvm] PASSED - -CustomMapLayersSheetTest[jvm] > a hidden layer offers no opacity slider()[jvm] PASSED - -SitePlannerParamsTest[jvm] > toQueryUrl emits advanced overrides and high_res only when enabled()[jvm] PASSED - -SitePlannerParamsTest[jvm] > toQueryUrl emits the planner's flat contract with advanced defaults and run and bridge flags()[jvm] PASSED - -SitePlannerParamsTest[jvm] > encodeQueryComponent percent-encodes spaces and non-ASCII()[jvm] PASSED - -SitePlannerParamsTest[jvm] > toQueryUrl does not double the slash when the base already ends in one()[jvm] PASSED - -SitePlannerParamsTest[jvm] > the host bridge is asked for only when a host offers one()[jvm] PASSED - -KmlDocumentTest[jvm] > bare kml passes straight through()[jvm] PASSED - -KmlDocumentTest[jvm] > only the images the document names are extracted()[jvm] PASSED - -KmlDocumentTest[jvm] > a document past the inflate cap is refused rather than read()[jvm] PASSED - -KmlDocumentTest[jvm] > a kmz yields the kml inside it()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > overlayWithSnapshot_usesSnapshotPositions()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > nullOverlay_nodeLookupContainsOnlyNodesWithValidPositions()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > overlayWithSnapshot_filtersToOverlayNodes()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > overlayWithSnapshot_nodeLookupUsesSnapshotNodes()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > overlayWithoutSnapshot_filtersLiveNodesToOverlayNums()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > emptyOverlayRoutes_yieldsEmptySelection()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > overlayWithoutSnapshot_nodeLookupFiltersToValidPositions()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > getNodeOrFallback_usedForSnapshotNodeLookup()[jvm] PASSED - -TracerouteNodeSelectionTest[jvm] > nullOverlay_returnsAllNodesUnfiltered()[jvm] PASSED - -> Task :feature:firmware:allTests - -> Task :feature:map:testAndroidHostTest - -LastHeardFilterTest > fromSeconds_knownValues PASSED - -LastHeardFilterTest > fromSeconds_unknownValue_defaultsToAny PASSED - -LastHeardFilterTest > seconds_matchExpectedValues PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:map-terrain:compileTestKotlinJvm -> Task :feature:map-terrain:compileJvmTestJava NO-SOURCE -> Task :feature:map-terrain:jvmTestClasses - -> Task :feature:docs:jvmTest - -DocsPageRouteScreenTest[jvm] > contentNull_notLoading_showsPageNotFound()[jvm] PASSED - -DocsPageRouteScreenTest[jvm] > contentLoaded_showsPageTitleInAppBar()[jvm] PASSED - -DocsPageRouteScreenTest[jvm] > contentLoaded_doesNotShowPageNotFound()[jvm] PASSED - -DocsPageRouteScreenTest[jvm] > backButton_callsOnBack()[jvm] PASSED - -DocsSearchBarTest[jvm] > emptyQuery_clearButtonNotShown()[jvm] PASSED - -> Task :feature:messaging:compileKotlinIosSimulatorArm64 -> Task :feature:messaging:iosSimulatorArm64MainKlibrary - -> Task :feature:map:jvmTest - -KmlDocumentTest[jvm] > images already read survive a later entry blowing the budget()[jvm] PASSED - -MapLayerResolutionTest[jvm] > resolvesCoverageExtension()[jvm] PASSED - -MapLayerResolutionTest[jvm] > resolvesGeoJsonExtensionsAndMimes()[jvm] PASSED - -MapLayerResolutionTest[jvm] > stripsTrailingUuidFromDisplayName()[jvm] PASSED - -MapLayerResolutionTest[jvm] > leavesNamesWithoutUuidSuffixAlone()[jvm] PASSED - -MapLayerResolutionTest[jvm] > fileNameRoundTripsBackToTheDisplayName()[jvm] PASSED - -MapLayerResolutionTest[jvm] > boundsFileNameLengthSoLongNamesStillWrite()[jvm] PASSED - -MapLayerResolutionTest[jvm] > rejectsUnsupportedAndNull()[jvm] PASSED - -MapLayerResolutionTest[jvm] > resolvesKmlExtensionsAndMimes()[jvm] PASSED - -MapLayerResolutionTest[jvm] > networkLayerTypeFollowsTheUrlPath()[jvm] PASSED - -MapLayerResolutionTest[jvm] > buildsDistinctFileNamesForLayersSharingADisplayName()[jvm] PASSED - -MapLayerResolutionTest[jvm] > networkLayerTypeSurvivesAnUnparseableUrl()[jvm] PASSED - -MapLayerResolutionTest[jvm] > sanitizesPathSeparatorsOutOfFileNames()[jvm] PASSED - -CustomTileProviderRepositoryTest[jvm] > stored providers load before first mutation and survive recreation()[jvm] PASSED - -CustomTileProviderRepositoryTest[jvm] > update cannot claim another provider name()[jvm] PASSED - -CustomTileProviderRepositoryTest[jvm] > delete persists the remaining providers()[jvm] PASSED - -CustomTileProviderRepositoryTest[jvm] > successful update normalizes and persists the provider()[jvm] PASSED - -CustomTileProviderRepositoryTest[jvm] > duplicate name is rejected atomically before cold load completes()[jvm] PASSED - -CustomTileProviderRepositoryTest[jvm] > missing update leaves persisted providers unchanged()[jvm] PASSED - -CustomTileProviderRepositoryTest[jvm] > malformed persisted providers report a failed load without rewriting storage()[jvm] PASSED - -MapFilterSheetTest[jvm] > tapping a role chip reports that role()[jvm] PASSED - -MapFilterSheetTest[jvm] > a role chip reads as unselected once that role is excluded()[jvm] PASSED - -MapFilterSheetTest[jvm] > a role chip reads as selected when that role is shown()[jvm] PASSED - -MapFilterSheetTest[jvm] > every role has a chip()[jvm] PASSED - -IconUrlsTest[jvm] > every distinct icon in the document is found once()[jvm] PASSED - -IconUrlsTest[jvm] > absolute icon urls are rejected()[jvm] PASSED - -IconUrlsTest[jvm] > an icon that is not a string does not take the whole document down()[jvm] PASSED - -IconUrlsTest[jvm] > rewriting icon urls only touches configured icons()[jvm] PASSED - -IconUrlsTest[jvm] > features without properties are skipped rather than throwing()[jvm] PASSED - -IconUrlsTest[jvm] > the icon count is capped so one import cannot fill the style with images()[jvm] PASSED - -IconUrlsTest[jvm] > a blank icon is not an icon()[jvm] PASSED - -IconUrlsTest[jvm] > a document that will not parse yields no icons rather than failing the layer()[jvm] PASSED - -IconUrlsTest[jvm] > a document with no icons asks for none()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > out-of-range coordinates are rejected()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > several placemarks all reach the collection()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a line style is still read when an icon style sits beside it()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a style map resolves through its normal pair()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a point placemark becomes a point feature()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > an inline placemark style is applied in preference to a styleUrl()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a polygon ring is closed even when the source leaves it open()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a description holding raw html elements does not take the import down()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a bad position does not discard the good positions beside it()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a line crossing the antimeridian is cut rather than drawn around the world()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > kml colour bytes are reversed into css and split into an opacity()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a NetworkLink href is not mistaken for an icon()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > an icon or label colour is not mistaken for the line colour()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > non-finite coordinates are rejected rather than written into the json()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a half-transparent poly fill carries its opacity()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > an empty icon href is treated as no icon at all()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a one-position line is not emitted as a line()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > an inline style is read without swallowing the geometry beside it()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a polygon hole is ignored rather than drawn as a second shape()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a line placemark keeps its order and needs two positions()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > the cut interpolates the latitude where the line meets the meridian()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a line does not carry an icon even when its style names one()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a line that stays put is left as a plain LineString()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a file with nothing mappable converts to nothing rather than an empty collection()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > fill zero means outline only()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a description with quotes and newlines stays valid json()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a point strips a remote icon url()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a point carries its packed icon path()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > a clockwise ring is turned to follow the right-hand rule()[jvm] PASSED - -KmlToGeoJsonTest[jvm] > unsupported kml features are skipped without losing the rest of the file()[jvm] PASSED - -TracerouteOverlayTest[jvm] > TracerouteOverlay handles empty routes correctly()[jvm] PASSED - -TracerouteOverlayTest[jvm] > TracerouteOverlay processes populated routes correctly()[jvm] PASSED - -TileUrlTest[jvm] > a tile outside the declared zoom range has no url()[jvm] PASSED - -TileUrlTest[jvm] > a negative coordinate still picks a valid subdomain instead of throwing()[jvm] PASSED - -TileUrlTest[jvm] > a source with no tile template has no url()[jvm] PASSED - -TileUrlTest[jvm] > a template we cannot finish is refused rather than requested with its braces()[jvm] PASSED - -TileUrlTest[jvm] > placeholders are filled by name so an ArcGIS z-y-x template survives()[jvm] PASSED - -TileUrlTest[jvm] > subdomains rotate so neighbouring tiles do not all hit one host()[jvm] PASSED - -TileUrlTest[jvm] > placeholder case does not matter()[jvm] PASSED - -RasterOverlayTogglesTest[jvm] > an overlay that is switched off offers no opacity slider()[jvm] PASSED - -RasterOverlayTogglesTest[jvm] > the slider reports once when the drag ends()[jvm] PASSED - -RasterOverlayTogglesTest[jvm] > an overlay that is switched on offers an opacity slider()[jvm] PASSED - -RasterOverlayTogglesTest[jvm] > the opacity is labelled as a percentage()[jvm] PASSED - -LayerOpacityStoreTest[jvm] > restoring a layer to opaque drops it from storage()[jvm] PASSED - -LayerOpacityStoreTest[jvm] > setting one layer leaves the others alone()[jvm] PASSED - -LayerOpacityStoreTest[jvm] > an untouched layer reads as opaque()[jvm] PASSED - -LayerOpacityStoreTest[jvm] > a value already persisted is visible without any set()[jvm] PASSED - -LayerOpacityStoreTest[jvm] > a set opacity is readable back()[jvm] PASSED - -AttributionTest[jvm] > basemap and overlay credits are joined without repeating one()[jvm] PASSED - -AttributionTest[jvm] > a link becomes its text()[jvm] PASSED - -AttributionTest[jvm] > nothing to credit is an empty line rather than a stray separator()[jvm] PASSED - -AttributionTest[jvm] > an escaped ampersand does not turn into a live entity()[jvm] PASSED - -AttributionTest[jvm] > every catalogue attribution renders as displayable text()[jvm] PASSED - -> Task :feature:docs:jvmTest - -DocsSearchBarTest[jvm] > textInput_callsOnQueryChange()[jvm] PASSED - -DocsSearchBarTest[jvm] > nonEmptyQuery_clearButtonShown()[jvm] PASSED - -DocsSearchBarTest[jvm] > clearButtonClick_callsOnQueryChangeWithEmpty()[jvm] PASSED - -> Task :feature:docs:allTests - -> Task :feature:map:testAndroidHostTest - -TracerouteNodeSelectionTest > overlayWithSnapshot_usesSnapshotPositions PASSED - -TracerouteNodeSelectionTest > nullOverlay_nodeLookupContainsOnlyNodesWithValidPositions PASSED - -TracerouteNodeSelectionTest > overlayWithSnapshot_filtersToOverlayNodes PASSED - -TracerouteNodeSelectionTest > overlayWithSnapshot_nodeLookupUsesSnapshotNodes PASSED - -TracerouteNodeSelectionTest > overlayWithoutSnapshot_filtersLiveNodesToOverlayNums PASSED - -TracerouteNodeSelectionTest > emptyOverlayRoutes_yieldsEmptySelection PASSED - -TracerouteNodeSelectionTest > overlayWithoutSnapshot_nodeLookupFiltersToValidPositions PASSED - -TracerouteNodeSelectionTest > getNodeOrFallback_usedForSnapshotNodeLookup PASSED - -TracerouteNodeSelectionTest > nullOverlay_returnsAllNodesUnfiltered PASSED - -GroundOverlayCornersTest > no rotation is the plain box PASSED - -GroundOverlayCornersTest > ninety degrees counter-clockwise turns the top edge into the left edge PASSED - -GroundOverlayCornersTest > rotation happens about the box centre rather than the origin PASSED - -MapLayerResolutionTest > resolvesCoverageExtension PASSED - -MapLayerResolutionTest > resolvesGeoJsonExtensionsAndMimes PASSED - -MapLayerResolutionTest > stripsTrailingUuidFromDisplayName PASSED - -MapLayerResolutionTest > leavesNamesWithoutUuidSuffixAlone PASSED - -MapLayerResolutionTest > fileNameRoundTripsBackToTheDisplayName PASSED - -MapLayerResolutionTest > boundsFileNameLengthSoLongNamesStillWrite PASSED - -MapLayerResolutionTest > rejectsUnsupportedAndNull PASSED - -MapLayerResolutionTest > resolvesKmlExtensionsAndMimes PASSED - -MapLayerResolutionTest > networkLayerTypeFollowsTheUrlPath PASSED - -MapLayerResolutionTest > buildsDistinctFileNamesForLayersSharingADisplayName PASSED - -MapLayerResolutionTest > networkLayerTypeSurvivesAnUnparseableUrl PASSED - -MapLayerResolutionTest > sanitizesPathSeparatorsOutOfFileNames PASSED - -MapBoundsTest > a node with no fix is not a location PASSED - -MapBoundsTest > a box covers every point given PASSED - -MapBoundsTest > points stacked on one spot are padded the same way PASSED - -MapBoundsTest > no points yields no box PASSED - -MapBoundsTest > a single point is padded into something the camera can fit PASSED - -SitePlannerLaunchTest > node detail launch retains selected node while manual launch follows connected node PASSED - -KmlGroundOverlayTest > an overlay with no image or no box is dropped PASSED - -KmlGroundOverlayTest > overlays and placemarks come out of one document together PASSED - -KmlGroundOverlayTest > an overlay-only document is not "nothing mappable" PASSED - -KmlGroundOverlayTest > a ground overlay is read with its box and image PASSED - -KmlGroundOverlayTest > an overlay does not swallow the placemark after it PASSED - -KmlGroundOverlayTest > rotation is read when present PASSED - -MapLayerUriTest > characters Android escapes are escaped PASSED - -MapLayerUriTest > every escaped form decodes back to its own path PASSED - -MapLayerUriTest > the unreserved set Android allows is left alone PASSED - -MapLayerUriTest > a space becomes percent 20 PASSED - -MapLayerUriTest > non-latin names round-trip as utf-8 bytes PASSED - -MapLayerUriTest > a plain path needs no escaping PASSED - -MapTileCatalogueTest > OpenWeather is offered only when a key is supplied PASSED - -MapTileCatalogueTest > every catalogue source resolves a tile url at its own minimum zoom PASSED - -MapTileCatalogueTest > every source id is unique across basemaps and overlays PASSED - -MapTileCatalogueTest > the NOAA overlay asks for the layer its url names PASSED - -MapTileCatalogueTest > hillshade is terrarium encoded PASSED - -MapTileCatalogueTest > the NOAA overlay requests projected bounds PASSED - -MapTileCatalogueTest > every raster basemap declares attribution PASSED - -MapTileCatalogueTest > only the elevation source is DEM encoded PASSED - -MapTileCatalogueTest > the NOAA overlay does not point at the retired nowCOAST host PASSED - -CustomTileProviderRepositoryTest > stored providers load before first mutation and survive recreation PASSED - -CustomTileProviderRepositoryTest > update cannot claim another provider name PASSED - -CustomTileProviderRepositoryTest > delete persists the remaining providers PASSED - -CustomTileProviderRepositoryTest > successful update normalizes and persists the provider PASSED - -CustomTileProviderRepositoryTest > duplicate name is rejected atomically before cold load completes PASSED - -CustomTileProviderRepositoryTest > missing update leaves persisted providers unchanged PASSED - -CustomTileProviderRepositoryTest > malformed persisted providers report a failed load without rewriting storage PASSED - -MapNodePolicyTest > my own node survives every new filter PASSED - -MapNodePolicyTest > ignored nodes are hidden by default PASSED - -MapNodePolicyTest > the online filter drops nodes unheard for over two hours PASSED - -MapNodePolicyTest > last heard filter drops nodes outside the window PASSED - -MapNodePolicyTest > the signed filter keeps only nodes whose signature the radio verified PASSED - -MapNodePolicyTest > nodes without a fix never reach the map PASSED - -MapNodePolicyTest > showing ignored nodes adds them rather than showing only them PASSED - -MapNodePolicyTest > the mqtt filter drops nodes heard over mqtt PASSED - -MapNodePolicyTest > a node whose role is excluded is hidden PASSED - -MapNodePolicyTest > my own node still needs a fix to be drawn PASSED - -MapNodePolicyTest > the encrypted filter keeps a key on file and drops one that stopped matching PASSED - -MapNodePolicyTest > my own node survives the last heard filter PASSED - -MapNodePolicyTest > excluding CLIENT also hides every node that never reported a role PASSED - -MapNodePolicyTest > the direct filter drops both relayed nodes and nodes of unknown distance PASSED - -MapNodePolicyTest > my own node survives the favourites filter PASSED - -MapNodePolicyTest > favourites filter keeps only favourites PASSED - -MapNodePolicyTest > excluding unknown nodes drops the ones with no name yet PASSED - -MapNodePolicyTest > this node and favourites draw above everything else PASSED - -MapNodePolicyTest > the direct filter drops an mqtt node reporting zero hops PASSED - -SitePlannerParamsTest > toQueryUrl emits advanced overrides and high_res only when enabled PASSED - -SitePlannerParamsTest > toQueryUrl emits the planner's flat contract with advanced defaults and run and bridge flags PASSED - -SitePlannerParamsTest > encodeQueryComponent percent-encodes spaces and non-ASCII PASSED - -SitePlannerParamsTest > toQueryUrl does not double the slash when the base already ends in one PASSED - -SitePlannerParamsTest > the host bridge is asked for only when a host offers one PASSED - -KmlToGeoJsonTest > out-of-range coordinates are rejected PASSED - -KmlToGeoJsonTest > several placemarks all reach the collection PASSED - -KmlToGeoJsonTest > a line style is still read when an icon style sits beside it PASSED - -KmlToGeoJsonTest > a style map resolves through its normal pair PASSED - -KmlToGeoJsonTest > a point placemark becomes a point feature PASSED - -KmlToGeoJsonTest > an inline placemark style is applied in preference to a styleUrl PASSED - -KmlToGeoJsonTest > a polygon ring is closed even when the source leaves it open PASSED - -KmlToGeoJsonTest > a description holding raw html elements does not take the import down PASSED - -KmlToGeoJsonTest > a bad position does not discard the good positions beside it PASSED - -KmlToGeoJsonTest > a line crossing the antimeridian is cut rather than drawn around the world PASSED - -KmlToGeoJsonTest > kml colour bytes are reversed into css and split into an opacity PASSED - -KmlToGeoJsonTest > a NetworkLink href is not mistaken for an icon PASSED - -KmlToGeoJsonTest > an icon or label colour is not mistaken for the line colour PASSED - -KmlToGeoJsonTest > non-finite coordinates are rejected rather than written into the json PASSED - -KmlToGeoJsonTest > a half-transparent poly fill carries its opacity PASSED - -KmlToGeoJsonTest > an empty icon href is treated as no icon at all PASSED - -KmlToGeoJsonTest > a one-position line is not emitted as a line PASSED - -KmlToGeoJsonTest > an inline style is read without swallowing the geometry beside it PASSED - -KmlToGeoJsonTest > a polygon hole is ignored rather than drawn as a second shape PASSED - -KmlToGeoJsonTest > a line placemark keeps its order and needs two positions PASSED - -KmlToGeoJsonTest > the cut interpolates the latitude where the line meets the meridian PASSED - -KmlToGeoJsonTest > a line does not carry an icon even when its style names one PASSED - -KmlToGeoJsonTest > a line that stays put is left as a plain LineString PASSED - -KmlToGeoJsonTest > a file with nothing mappable converts to nothing rather than an empty collection PASSED - -KmlToGeoJsonTest > fill zero means outline only PASSED - -KmlToGeoJsonTest > a description with quotes and newlines stays valid json PASSED - -KmlToGeoJsonTest > a point strips a remote icon url PASSED - -KmlToGeoJsonTest > a point carries its packed icon path PASSED - -KmlToGeoJsonTest > a clockwise ring is turned to follow the right-hand rule PASSED - -KmlToGeoJsonTest > unsupported kml features are skipped without losing the rest of the file PASSED - -TracerouteOverlayTest > TracerouteOverlay handles empty routes correctly PASSED - -TracerouteOverlayTest > TracerouteOverlay processes populated routes correctly PASSED - -TileUrlTest > a tile outside the declared zoom range has no url PASSED - -TileUrlTest > a negative coordinate still picks a valid subdomain instead of throwing PASSED - -TileUrlTest > a source with no tile template has no url PASSED - -TileUrlTest > a template we cannot finish is refused rather than requested with its braces PASSED - -TileUrlTest > placeholders are filled by name so an ArcGIS z-y-x template survives PASSED - -TileUrlTest > subdomains rotate so neighbouring tiles do not all hit one host PASSED - -TileUrlTest > placeholder case does not matter PASSED - -BaseMapViewModelTest > displayUnits follows a mid-session units change PASSED - -BaseMapViewModelTest > the map's node set carries ignored nodes once the filter asks for them PASSED - -BaseMapViewModelTest > toggling a role keeps role names this build does not know PASSED - -BaseMapViewModelTest > testWaypointsFilterMixedExpiredAndActiveWaypoints PASSED - -BaseMapViewModelTest > testNodesWithPositionStartsEmpty PASSED - -BaseMapViewModelTest > testWaypointsExcludeBoundaryExpirations PASSED - -BaseMapViewModelTest > testInitialization PASSED - -BaseMapViewModelTest > testWaypointsIncludeNeverExpiringWaypoints PASSED - -BaseMapViewModelTest > testWaypointsIncludeFutureExpirations PASSED - -BaseMapViewModelTest > testNodeRepositoryIntegration PASSED - -BaseMapViewModelTest > testConnectionStateFlow PASSED - -BaseMapViewModelTest > the map's node set hides ignored nodes by default PASSED - -BaseMapViewModelTest > testMyNodeInfoFlow PASSED - -OfflineFallbackTest > stays put when the network is down but there is nothing to fall back to PASSED - -OfflineFallbackTest > stays put while the network is up regardless of a fallback PASSED - -OfflineFallbackTest > switches when the network is down and a fallback exists PASSED - -IconUrlsTest > every distinct icon in the document is found once PASSED - -IconUrlsTest > absolute icon urls are rejected PASSED - -IconUrlsTest > an icon that is not a string does not take the whole document down PASSED - -> Task :feature:messaging:compileTestKotlinIosSimulatorArm64 -> Task :feature:messaging:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:messaging:iosSimulatorArm64Test SKIPPED - -> Task :feature:map-terrain:testAndroidHostTest - -ContourIntervalsTest > every band's index interval is exactly 5x its minor interval PASSED - -ContourIntervalsTest > z13-14 metric band matches iOS exactly PASSED - -ContourIntervalsTest > z13-14 imperial band matches iOS's 200ft-1000ft - converted to meters PASSED - -ContourIntervalsTest > levelsForZoom generates every minor multiple up to the elevation ceiling PASSED - -ContourIntervalsTest > zoom bands step down at exactly 11 - 13 - and 15 PASSED - -ContourIntervalsTest > isIndexLevel is true only on multiples of the index interval PASSED - -TerrainTileMathTest > zoom 0 is a single tile covering everywhere PASSED - -TerrainTileMathTest > lonLatAt at the tile center is roughly the tile's own midpoint PASSED - -TerrainTileMathTest > tilesAt wraps the antimeridian instead of returning zero tiles PASSED - -TerrainTileMathTest > lonLatAt zoom 0 spans the whole world PASSED - -TerrainTileMathTest > tileCountAt agrees with tilesAt's own size including across the antimeridian PASSED - -TerrainTileMathTest > fitsInSingleTile is true for a tiny box and false for a global one PASSED - -TerrainTileMathTest > lonLatAt at a tile's own corner round-trips through tileAt PASSED - -TerrainTileMathTest > zoom 1 splits the world into hemispheric quadrants PASSED - -TerrainTileMathTest > tilesAt covers a bbox's own corners inclusively PASSED - -ContourGeneratorTest > a saddle cell produces two separate segments - not a crossing artifact PASSED - -ContourGeneratorTest > multiple requested levels each produce their own line PASSED - -ContourGeneratorTest > zero and negative levels are excluded even when requested PASSED - -ContourGeneratorTest > a level crossing the ramp produces one chained vertical line at the expected x PASSED - -ContourGeneratorTest > a contour level below every sample produces no lines PASSED - -ElevationTileTest > a zero-dimension grid is rejected at construction rather than crashing elevationAt later PASSED - -ElevationTileTest > elevationAt clamps out-of-bounds coordinates to the tile's own edge PASSED - -ElevationTileTest > a mismatched elevations array size is rejected at construction PASSED - -ElevationTileTest > green and blue channels add sub-256m and sub-1m precision PASSED - -ElevationTileTest > mid-gray-ish RGB decodes to sea level - per the spec's own worked example PASSED - -ElevationTileTest > elevationAt reads row-major with top-left origin PASSED - -ElevationTileTest > zero RGB decodes to the Terrarium offset's negative PASSED - -ElevationTileTest > dimensions whose product overflows Int are rejected rather than matching an empty array PASSED - -HillshadeTest > an isolated single-pixel spike is despiked to its neighborhood's median before shading PASSED - -HillshadeTest > sea-level fade zeroes shading for a slope entirely under half a meter PASSED - -HillshadeTest > local-relief fade zeroes shading for a pixel barely above its own neighborhood minimum PASSED - -HillshadeTest > a slope facing away from the fixed NW light casts a nonzero shadow PASSED - -HillshadeTest > an incorrectly padded tile is rejected rather than read out of bounds PASSED - -HillshadeTest > maxShadowAlpha scales the output linearly PASSED - -HillshadeTest > despike leaves the margin ring's original values untouched PASSED - -HillshadeTest > flat terrain casts no shadow - regardless of elevation PASSED - -TerrainTileStoreTest > sizeBytes is zero for a store nothing has been written to yet PASSED - -MapterhornEndpointsTest > a tiny region resolves a regional archive URL PASSED - -MapterhornEndpointsTest > a region spanning multiple z6 tiles has no regional archive PASSED - -TerrainTileStoreTest > sizeBytes sums every tile written across both sources PASSED - -TerrainTileStoreTest > global and regional tiles at the same coordinates don't collide PASSED - -TerrainTileStoreTest > a written tile reads back byte-for-byte PASSED - -TerrainTileStoreTest > deleteAll removes every tile and leaves the store readable-empty PASSED - -TerrainTileStoreTest > an unwritten tile reads as null not an error PASSED - -TerrainTileStoreTest > deleteAll on a store nothing was ever written to is a harmless no-op PASSED - -TerrainRegionExtractorTest > a regional archive that stores nothing does not report regional detail PASSED - -TerrainRegionExtractorTest > a regional archive that stores tiles reports regional detail PASSED - -> Task :feature:map:testAndroidHostTest - -IconUrlsTest > rewriting icon urls only touches configured icons PASSED - -IconUrlsTest > features without properties are skipped rather than throwing PASSED - -IconUrlsTest > the icon count is capped so one import cannot fill the style with images PASSED - -IconUrlsTest > a blank icon is not an icon PASSED - -IconUrlsTest > a document that will not parse yields no icons rather than failing the layer PASSED - -IconUrlsTest > a document with no icons asks for none PASSED - -LayerOpacityTest > an unset layer is fully opaque PASSED - -LayerOpacityTest > a stored opacity survives a round trip PASSED - -LayerOpacityTest > a malformed entry is dropped rather than failing the load PASSED - -LayerOpacityTest > a fully opaque layer is not stored PASSED - -LayerOpacityTest > a non-finite value is dropped rather than clamped PASSED - -LayerOpacityTest > a key containing the delimiter still decodes PASSED - -LayerOpacityTest > an out of range value is clamped PASSED - -CustomTileProviderConfigTest > validation refuses what is not an http url at all PASSED - -CustomTileProviderConfigTest > a port and a query string are both fine PASSED - -CustomTileProviderConfigTest > a template missing any of the three coordinates is rejected PASSED - -CustomTileProviderConfigTest > Google-compatible validation rejects unsafe and unresolved templates PASSED - -CustomTileProviderConfigTest > HTTPS can be required PASSED - -CustomTileProviderConfigTest > Google-compatible validation retains HTTP support PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:map-maplibre:jvmTest - -MapGeometryTest[jvm] > the bounding box spans every located node()[jvm] PASSED - -MapGeometryTest[jvm] > a single node is padded into a box the camera can frame()[jvm] PASSED - -MapGeometryTest[jvm] > no located nodes yields no bounding box()[jvm] PASSED - -NodesInViewTest[jvm] > a node outside the box is dropped()[jvm] PASSED - -NodesInViewTest[jvm] > no bounds means every node counts()[jvm] PASSED - -NodesInViewTest[jvm] > padding is what lets a node just off screen keep its chip()[jvm] PASSED - -NodesInViewTest[jvm] > padding grows the box by a fraction of its own span on every side()[jvm] PASSED - -NodesInViewTest[jvm] > a node exactly on an edge counts as inside()[jvm] PASSED - -UnclusteredNodesTest[jvm] > a pile bigger than the minimum is clustered so none of it stands alone()[jvm] PASSED - -UnclusteredNodesTest[jvm] > above the cluster ceiling nothing is clustered at all()[jvm] PASSED - -UnclusteredNodesTest[jvm] > zooming in far enough separates a pile that was clustered()[jvm] PASSED - -UnclusteredNodesTest[jvm] > a pile smaller than the minimum is left alone as the Google flavor leaves it()[jvm] PASSED - -UnclusteredNodesTest[jvm] > a node already left alone is not absorbed into a later cluster()[jvm] PASSED - -UnclusteredNodesTest[jvm] > isolation ranking puts the loneliest nodes first so the chip budget reaches them()[jvm] PASSED - -UnclusteredNodesTest[jvm] > a node far from the pile stands alone even though the pile clusters()[jvm] PASSED - -UnclusteredNodesTest[jvm] > isolation ranking survives being narrowed to the viewport afterwards()[jvm] PASSED - -ChipRankTest[jvm] > this node and favorites outrank everything else()[jvm] PASSED - -ChipRankTest[jvm] > a favorite beats an ordinary node when both are under the same tap()[jvm] PASSED - -ChipRankTest[jvm] > properties that are absent rank as ordinary rather than throwing()[jvm] PASSED - -BasemapRegistryTest[jvm] > every raster basemap draws over a style that declares a glyph source()[jvm] PASSED - -BasemapRegistryTest[jvm] > unknown id falls back to the default rather than throwing()[jvm] PASSED - -BasemapRegistryTest[jvm] > every basemap id is unique()[jvm] PASSED - -BasemapRegistryTest[jvm] > the default basemap is the maintained OpenFreeMap style()[jvm] PASSED - -PositionsBoundingBoxTest[jvm] > no positions means no box rather than one at the origin()[jvm] PASSED - -PositionsBoundingBoxTest[jvm] > a stationary track collapses to one spot and is still framable()[jvm] PASSED - -PositionsBoundingBoxTest[jvm] > a single position is padded into a box the camera can frame()[jvm] PASSED - -PositionsBoundingBoxTest[jvm] > a real spread is covered exactly()[jvm] PASSED - -BoundingBoxFromCornersTest[jvm] > corners are normalised into south-west and north-east()[jvm] PASSED - -BoundingBoxFromCornersTest[jvm] > tap order does not matter()[jvm] PASSED - -MapLibreRuntimeTest[jvm] > a load that returns is available()[jvm] PASSED - -MapLibreRuntimeTest[jvm] > a missing library is reported as unavailable, not thrown()[jvm] PASSED - -MapCameraTest[jvm] > a fit tighter than the framing ceiling is zoomed out to it()[jvm] PASSED - -MapCameraTest[jvm] > a fit at or wider than the ceiling is left as it is()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:map-maplibre:testAndroidHostTest - -BasemapRegistryTest > every raster basemap draws over a style that declares a glyph source PASSED - -BasemapRegistryTest > unknown id falls back to the default rather than throwing PASSED - -BasemapRegistryTest > every basemap id is unique PASSED - -BasemapRegistryTest > the default basemap is the maintained OpenFreeMap style PASSED - -NodeFeatureTest > nothing pulses when nothing has been heard PASSED - -BoundingBoxFromCornersTest > corners are normalised into south-west and north-east PASSED - -BoundingBoxFromCornersTest > tap order does not matter PASSED - -NodeFeatureTest > the connected node is flagged so it can be styled apart PASSED - -NodeFeatureTest > a node whose clock runs ahead still counts as just heard PASSED - -NodeFeatureTest > unlocated nodes are dropped instead of landing at null island PASSED - -NodeFeatureTest > a node heard seconds ago pulses PASSED - -UnclusteredNodesTest > a pile bigger than the minimum is clustered so none of it stands alone PASSED - -UnclusteredNodesTest > above the cluster ceiling nothing is clustered at all PASSED - -UnclusteredNodesTest > zooming in far enough separates a pile that was clustered PASSED - -UnclusteredNodesTest > a pile smaller than the minimum is left alone as the Google flavor leaves it PASSED - -UnclusteredNodesTest > a node already left alone is not absorbed into a later cluster PASSED - -UnclusteredNodesTest > isolation ranking puts the loneliest nodes first so the chip budget reaches them PASSED - -UnclusteredNodesTest > a node far from the pile stands alone even though the pile clusters PASSED - -UnclusteredNodesTest > isolation ranking survives being narrowed to the viewport afterwards PASSED - -OfflineTerrainRegionTest > bounds reflects the manifest's own flat fields PASSED - -OfflineTerrainRegionTest > toBoundingBox and toGeoBounds are inverses PASSED - -OfflineTerrainRegionTest > intersects is true for a viewport entirely inside the region PASSED - -OfflineTerrainRegionTest > intersects is true for overlapping boxes and false for disjoint ones PASSED - -NodesInViewTest > a node outside the box is dropped PASSED - -NodesInViewTest > no bounds means every node counts PASSED - -NodesInViewTest > padding is what lets a node just off screen keep its chip PASSED - -NodesInViewTest > padding grows the box by a fraction of its own span on every side PASSED - -NodesInViewTest > a node exactly on an edge counts as inside PASSED - -ClusterMembersTest > drops leaves with no node number rather than inventing one PASSED - -ClusterMembersTest > reads node number and both names off the leaf features PASSED - -MapCameraTest > a fit tighter than the framing ceiling is zoomed out to it PASSED - -MapCameraTest > a fit at or wider than the ceiling is left as it is PASSED - -PositionsBoundingBoxTest > no positions means no box rather than one at the origin PASSED - -PositionsBoundingBoxTest > a stationary track collapses to one spot and is still framable PASSED - -PositionsBoundingBoxTest > a single position is padded into a box the camera can frame PASSED - -PositionsBoundingBoxTest > a real spread is covered exactly PASSED - -OfflineTerrainRepositoryTest > a manifest with no tile directory still loads as a region PASSED - -OfflineTerrainRepositoryTest > delete clears both the manifest and the region state PASSED - -OfflineTerrainRepositoryTest > tileUrlTemplate percent-encodes reserved characters but leaves the z x y placeholders literal PASSED - -OfflineTerrainRepositoryTest > download with zero tiles still emits Complete and persists an empty region PASSED - -OfflineTerrainRepositoryTest > region is null before anything is downloaded PASSED - -OfflineTerrainRepositoryTest > a corrupt manifest is deleted along with its tile directory not just ignored PASSED - -OfflineTerrainRepositoryTest > tileUrlTemplate is an absolute three-slash file url with z x y placeholders PASSED - -OfflineTerrainRepositoryTest > an orphaned tile directory with no manifest is cleared on load PASSED - -ContourFeaturesTest > a two-point line becomes one LineString feature PASSED - -ContourFeaturesTest > tile-local points convert to the same lat lon TerrainTileMath's own inverse would produce PASSED - -ContourFeaturesTest > an index-level line's properties differ from a minor-level line's PASSED - -ContourFeaturesTest > a degenerate single-point line is dropped PASSED - -TerrainDownloadEstimateTest > a maxZoom at or below the global ceiling never counts a regional tier PASSED - -TerrainDownloadEstimateTest > a huge box that never fits a single regional archive gets no regional tier PASSED - -TerrainDownloadEstimateTest > negative maxZoom counts nothing PASSED - -TerrainDownloadEstimateTest > matches a manual sum of tilesAt across the global zoom range only PASSED - -TerrainDownloadEstimateTest > maxZoom 0 counts the single world-covering z0 tile PASSED - -> Task :androidApp:packageGoogleDebug -> Task :feature:node:compileTestKotlinJvm -> Task :feature:node:compileJvmTestJava NO-SOURCE -> Task :feature:node:jvmTestClasses - -> Task :feature:map-maplibre:jvmTest - -NodeChipKeyTest[jvm] > a glyph chip differs from the same chip drawn with its text()[jvm] PASSED - -NodeChipKeyTest[jvm] > an ignored node is a different chip from the same node unignored()[jvm] PASSED - -NodeChipKeyTest[jvm] > two nodes that look identical share a key so the image is only drawn once()[jvm] PASSED - -NodeChipKeyTest[jvm] > an emoji short name is carried through untouched()[jvm] PASSED - -NodeChipKeyTest[jvm] > a node with no short name still gets a labelled chip()[jvm] PASSED - -NodeChipKeyTest[jvm] > two nodes with the same name and different colours get different keys()[jvm] PASSED - -NodeChipKeyTest[jvm] > an outlined chip differs from a plain one with the same text and colours()[jvm] PASSED - -TileEstimateTest[jvm] > an inverted range counts nothing rather than throwing()[jvm] PASSED - -TileEstimateTest[jvm] > a box straddling the antimeridian wraps its columns rather than going negative()[jvm] PASSED - -TileEstimateTest[jvm] > whole world at zoom one is four tiles()[jvm] PASSED - -TileEstimateTest[jvm] > a small region stays small while a whole state does not()[jvm] PASSED - -TileEstimateTest[jvm] > poles are clamped instead of running to infinity()[jvm] PASSED - -TileEstimateTest[jvm] > a range sums every level in it()[jvm] PASSED - -TileEstimateTest[jvm] > whole world at zoom zero is a single tile()[jvm] PASSED - -NodeFeatureTest[jvm] > nothing pulses when nothing has been heard()[jvm] PASSED - -ContourFeaturesTest[jvm] > a two-point line becomes one LineString feature()[jvm] PASSED - -ContourFeaturesTest[jvm] > tile-local points convert to the same lat lon TerrainTileMath's own inverse would produce()[jvm] PASSED - -ContourFeaturesTest[jvm] > an index-level line's properties differ from a minor-level line's()[jvm] PASSED - -ContourFeaturesTest[jvm] > a degenerate single-point line is dropped()[jvm] PASSED - -TerrainDownloadEstimateTest[jvm] > a maxZoom at or below the global ceiling never counts a regional tier()[jvm] PASSED - -TerrainDownloadEstimateTest[jvm] > a huge box that never fits a single regional archive gets no regional tier()[jvm] PASSED - -TerrainDownloadEstimateTest[jvm] > negative maxZoom counts nothing()[jvm] PASSED - -TerrainDownloadEstimateTest[jvm] > matches a manual sum of tilesAt across the global zoom range only()[jvm] PASSED - -TerrainDownloadEstimateTest[jvm] > maxZoom 0 counts the single world-covering z0 tile()[jvm] PASSED - -NodeFeatureTest[jvm] > the connected node is flagged so it can be styled apart()[jvm] PASSED - -NodeFeatureTest[jvm] > a node whose clock runs ahead still counts as just heard()[jvm] PASSED - -NodeFeatureTest[jvm] > unlocated nodes are dropped instead of landing at null island()[jvm] PASSED - -NodeFeatureTest[jvm] > a node heard seconds ago pulses()[jvm] PASSED - -WaypointFeaturesTest[jvm] > a waypoint with both coordinates becomes a feature()[jvm] PASSED - -WaypointFeaturesTest[jvm] > an unset icon falls back to the default pin()[jvm] PASSED - -WaypointFeaturesTest[jvm] > null island is still dropped()[jvm] PASSED - -WaypointFeaturesTest[jvm] > a waypoint missing one coordinate is dropped rather than pinned to the equator()[jvm] PASSED - -WaypointFeaturesTest[jvm] > a valid code point becomes its glyph()[jvm] PASSED - -WaypointFeaturesTest[jvm] > a code point that is not a unicode scalar value falls back to the default pin()[jvm] PASSED - -MapLibreRuntimeTest[jvm] > the map screen composes the fallback and nothing else()[jvm] PASSED - -PrecisionCircleTest[jvm] > a circle ring is closed()[jvm] PASSED - -PrecisionCircleTest[jvm] > an undegraded position has no uncertainty circle()[jvm] PASSED - -PrecisionCircleTest[jvm] > precision table matches the values the OSMdroid marker used()[jvm] PASSED - -PrecisionCircleTest[jvm] > walking a known distance north lands the expected distance away()[jvm] PASSED - -ClusterMembersTest[jvm] > drops leaves with no node number rather than inventing one()[jvm] PASSED - -ClusterMembersTest[jvm] > reads node number and both names off the leaf features()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > a manifest with no tile directory still loads as a region()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > delete clears both the manifest and the region state()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > tileUrlTemplate percent-encodes reserved characters but leaves the z x y placeholders literal()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > download with zero tiles still emits Complete and persists an empty region()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > region is null before anything is downloaded()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > a corrupt manifest is deleted along with its tile directory not just ignored()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > tileUrlTemplate is an absolute three-slash file url with z x y placeholders()[jvm] PASSED - -OfflineTerrainRepositoryTest[jvm] > an orphaned tile directory with no manifest is cleared on load()[jvm] PASSED - -WaypointInfoSlotTest[jvm] > an unlocked waypoint is editable while connected()[jvm] PASSED - -WaypointInfoSlotTest[jvm] > a waypoint locked to our own node is still editable()[jvm] PASSED - -WaypointInfoSlotTest[jvm] > a waypoint locked to another node offers no editor()[jvm] PASSED - -> Task :feature:map-maplibre:testAndroidHostTest - -MapGeometryTest > the bounding box spans every located node PASSED - -MapGeometryTest > a single node is padded into a box the camera can frame PASSED - -MapGeometryTest > no located nodes yields no bounding box PASSED - -PrecisionCircleTest > a circle ring is closed PASSED - -PrecisionCircleTest > an undegraded position has no uncertainty circle PASSED - -PrecisionCircleTest > precision table matches the values the OSMdroid marker used PASSED - -PrecisionCircleTest > walking a known distance north lands the expected distance away PASSED - -NodeChipKeyTest > a glyph chip differs from the same chip drawn with its text PASSED - -WaypointFeaturesTest > a waypoint with both coordinates becomes a feature PASSED - -WaypointFeaturesTest > an unset icon falls back to the default pin PASSED - -WaypointFeaturesTest > null island is still dropped PASSED - -WaypointFeaturesTest > a waypoint missing one coordinate is dropped rather than pinned to the equator PASSED - -WaypointFeaturesTest > a valid code point becomes its glyph PASSED - -WaypointFeaturesTest > a code point that is not a unicode scalar value falls back to the default pin PASSED - -NodeChipKeyTest > an ignored node is a different chip from the same node unignored PASSED - -NodeChipKeyTest > two nodes that look identical share a key so the image is only drawn once PASSED - -NodeChipKeyTest > an emoji short name is carried through untouched PASSED - -NodeChipKeyTest > a node with no short name still gets a labelled chip PASSED - -NodeChipKeyTest > two nodes with the same name and different colours get different keys PASSED - -NodeChipKeyTest > an outlined chip differs from a plain one with the same text and colours PASSED - -TileEstimateTest > an inverted range counts nothing rather than throwing PASSED - -TileEstimateTest > a box straddling the antimeridian wraps its columns rather than going negative PASSED - -TileEstimateTest > whole world at zoom one is four tiles PASSED - -TileEstimateTest > a small region stays small while a whole state does not PASSED - -TileEstimateTest > poles are clamped instead of running to infinity PASSED - -TileEstimateTest > a range sums every level in it PASSED - -TileEstimateTest > whole world at zoom zero is a single tile PASSED - -ChipRankTest > this node and favorites outrank everything else PASSED - -ChipRankTest > a favorite beats an ordinary node when both are under the same tap PASSED - -ChipRankTest > properties that are absent rank as ordinary rather than throwing PASSED - -> Task :feature:map:testAndroidHostTest - -MapTimeWindowsTest > a point inside the window is kept and one outside is dropped PASSED - -MapTimeWindowsTest > a node heard within the pulse window pulses PASSED - -MapTimeWindowsTest > the any filter keeps every point however old PASSED - -WaypointExpiryTest > neither sentinel counts as an expiry PASSED - -WaypointExpiryTest > both sentinels fall back to the same default ahead of now PASSED - -WaypointExpiryTest > a set expiry is returned as itself PASSED - -WaypointExpiryTest > a real timestamp counts as an expiry PASSED - -> Task :feature:messaging:compileTestKotlinJvm -> Task :feature:messaging:compileJvmTestJava NO-SOURCE -> Task :feature:messaging:jvmTestClasses - -> Task :feature:map-maplibre:jvmTest - -WaypointInfoSlotTest[jvm] > a waypoint locked to another node can still be dropped locally()[jvm] PASSED - -WaypointInfoSlotTest[jvm] > editing is withheld while disconnected because saving re-broadcasts()[jvm] PASSED - -OfflineTerrainRegionTest[jvm] > bounds reflects the manifest's own flat fields()[jvm] PASSED - -OfflineTerrainRegionTest[jvm] > toBoundingBox and toGeoBounds are inverses()[jvm] PASSED - -OfflineTerrainRegionTest[jvm] > intersects is true for a viewport entirely inside the region()[jvm] PASSED - -OfflineTerrainRegionTest[jvm] > intersects is true for overlapping boxes and false for disjoint ones()[jvm] PASSED - -> Task :androidApp:createGoogleDebugApkListingFileRedirect -> Task :androidApp:assembleGoogleDebug -> Task :androidApp:assembleDebug - -> Task :feature:map:testAndroidHostTest - -LayerOpacityStoreTest > restoring a layer to opaque drops it from storage PASSED - -LayerOpacityStoreTest > setting one layer leaves the others alone PASSED - -LayerOpacityStoreTest > an untouched layer reads as opaque PASSED - -LayerOpacityStoreTest > a value already persisted is visible without any set PASSED - -LayerOpacityStoreTest > a set opacity is readable back PASSED - -AttributionTest > basemap and overlay credits are joined without repeating one PASSED - -AttributionTest > a link becomes its text PASSED - -AttributionTest > nothing to credit is an empty line rather than a stray separator PASSED - -AttributionTest > an escaped ampersand does not turn into a live entity PASSED - -AttributionTest > every catalogue attribution renders as displayable text PASSED - -WebMercatorBboxTest > zoom zero spans the whole projected world PASSED - -WebMercatorBboxTest > the top-left tile of zoom one covers the north-west quadrant PASSED - -WebMercatorBboxTest > bounds are never written in exponent notation PASSED - -WebMercatorBboxTest > a WMS overlay resolves its bbox placeholder into four bounds PASSED - -> Task :feature:map:allTests -> Task :feature:map-maplibre:allTests -> Task :feature:node:compileKotlinIosSimulatorArm64 -> Task :feature:node:iosSimulatorArm64MainKlibrary - -> Task :feature:map-terrain:jvmTest - -MapterhornEndpointsTest[jvm] > a tiny region resolves a regional archive URL()[jvm] PASSED - -MapterhornEndpointsTest[jvm] > a region spanning multiple z6 tiles has no regional archive()[jvm] PASSED - -ContourGeneratorTest[jvm] > a saddle cell produces two separate segments - not a crossing artifact()[jvm] PASSED - -ContourGeneratorTest[jvm] > multiple requested levels each produce their own line()[jvm] PASSED - -ContourGeneratorTest[jvm] > zero and negative levels are excluded even when requested()[jvm] PASSED - -ContourGeneratorTest[jvm] > a level crossing the ramp produces one chained vertical line at the expected x()[jvm] PASSED - -ContourGeneratorTest[jvm] > a contour level below every sample produces no lines()[jvm] PASSED - -ContourIntervalsTest[jvm] > every band's index interval is exactly 5x its minor interval()[jvm] PASSED - -ContourIntervalsTest[jvm] > z13-14 metric band matches iOS exactly()[jvm] PASSED - -ContourIntervalsTest[jvm] > z13-14 imperial band matches iOS's 200ft-1000ft - converted to meters()[jvm] PASSED - -ContourIntervalsTest[jvm] > levelsForZoom generates every minor multiple up to the elevation ceiling()[jvm] PASSED - -ContourIntervalsTest[jvm] > zoom bands step down at exactly 11 - 13 - and 15()[jvm] PASSED - -ContourIntervalsTest[jvm] > isIndexLevel is true only on multiples of the index interval()[jvm] PASSED - -ElevationTileTest[jvm] > a zero-dimension grid is rejected at construction rather than crashing elevationAt later()[jvm] PASSED - -ElevationTileTest[jvm] > elevationAt clamps out-of-bounds coordinates to the tile's own edge()[jvm] PASSED - -ElevationTileTest[jvm] > a mismatched elevations array size is rejected at construction()[jvm] PASSED - -ElevationTileTest[jvm] > green and blue channels add sub-256m and sub-1m precision()[jvm] PASSED - -ElevationTileTest[jvm] > mid-gray-ish RGB decodes to sea level - per the spec's own worked example()[jvm] PASSED - -ElevationTileTest[jvm] > elevationAt reads row-major with top-left origin()[jvm] PASSED - -ElevationTileTest[jvm] > zero RGB decodes to the Terrarium offset's negative()[jvm] PASSED - -ElevationTileTest[jvm] > dimensions whose product overflows Int are rejected rather than matching an empty array()[jvm] PASSED - -TerrainTileMathTest[jvm] > zoom 0 is a single tile covering everywhere()[jvm] PASSED - -TerrainTileMathTest[jvm] > lonLatAt at the tile center is roughly the tile's own midpoint()[jvm] PASSED - -TerrainTileMathTest[jvm] > tilesAt wraps the antimeridian instead of returning zero tiles()[jvm] PASSED - -TerrainTileMathTest[jvm] > lonLatAt zoom 0 spans the whole world()[jvm] PASSED - -TerrainTileMathTest[jvm] > tileCountAt agrees with tilesAt's own size including across the antimeridian()[jvm] PASSED - -TerrainTileMathTest[jvm] > fitsInSingleTile is true for a tiny box and false for a global one()[jvm] PASSED - -TerrainTileMathTest[jvm] > lonLatAt at a tile's own corner round-trips through tileAt()[jvm] PASSED - -TerrainTileMathTest[jvm] > zoom 1 splits the world into hemispheric quadrants()[jvm] PASSED - -TerrainTileMathTest[jvm] > tilesAt covers a bbox's own corners inclusively()[jvm] PASSED - -> Task :feature:wifi-provision:compileKotlinIosSimulatorArm64 -> Task :feature:wifi-provision:iosSimulatorArm64MainKlibrary - -> Task :feature:map-terrain:jvmTest - -HillshadeTest[jvm] > an isolated single-pixel spike is despiked to its neighborhood's median before shading()[jvm] PASSED - -HillshadeTest[jvm] > sea-level fade zeroes shading for a slope entirely under half a meter()[jvm] PASSED - -HillshadeTest[jvm] > local-relief fade zeroes shading for a pixel barely above its own neighborhood minimum()[jvm] PASSED - -HillshadeTest[jvm] > a slope facing away from the fixed NW light casts a nonzero shadow()[jvm] PASSED - -HillshadeTest[jvm] > an incorrectly padded tile is rejected rather than read out of bounds()[jvm] PASSED - -HillshadeTest[jvm] > maxShadowAlpha scales the output linearly()[jvm] PASSED - -HillshadeTest[jvm] > despike leaves the margin ring's original values untouched()[jvm] PASSED - -HillshadeTest[jvm] > flat terrain casts no shadow - regardless of elevation()[jvm] PASSED - -TerrainTileStoreTest[jvm] > sizeBytes is zero for a store nothing has been written to yet()[jvm] PASSED - -TerrainTileStoreTest[jvm] > sizeBytes sums every tile written across both sources()[jvm] PASSED - -TerrainTileStoreTest[jvm] > global and regional tiles at the same coordinates don't collide()[jvm] PASSED - -> Task :feature:wifi-provision:compileTestKotlinJvm -> Task :feature:settings:compileKotlinIosSimulatorArm64 -> Task :feature:settings:iosSimulatorArm64MainKlibrary -> Task :feature:wifi-provision:compileJvmTestJava NO-SOURCE -> Task :feature:wifi-provision:jvmTestClasses - -> Task :feature:messaging:jvmTest - -HomoglyphCharacterTransformTest[jvm] > optimizeUtf8StringWithHomoglyphs shrinks binary size of cyrillic text containing some homoglyphs()[jvm] PASSED - -HomoglyphCharacterTransformTest[jvm] > optimizeUtf8StringWithHomoglyphs does not transform characters impossible to present by latin letters()[jvm] PASSED - -HomoglyphCharacterTransformTest[jvm] > optimizeUtf8StringWithHomoglyphs does not transform latin text message()[jvm] PASSED - -HomoglyphCharacterTransformTest[jvm] > optimizeUtf8StringWithHomoglyphs does not transform cyrillic text without any homoglyphs()[jvm] PASSED - -HomoglyphCharacterTransformTest[jvm] > optimizeUtf8StringWithHomoglyphs shrinks binary size in half of cyrillic text containing only homoglyphs()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:node:jvmTest - -NodeListDensityTest[jvm] > empty_string_falls_back_to_complete()[jvm] PASSED - -NodeListDensityTest[jvm] > firstOrNull_returns_null_for_unknown()[jvm] PASSED - -NodeListDensityTest[jvm] > valid_compact_string_maps_to_compact()[jvm] PASSED - -NodeListDensityTest[jvm] > invalid_string_falls_back_to_complete()[jvm] PASSED - -NodeListDensityTest[jvm] > valid_complete_string_maps_to_complete()[jvm] PASSED - -NodeListDensityTest[jvm] > lowercase_does_not_match_and_falls_back()[jvm] PASSED - -> Task :feature:map-terrain:jvmTest - -TerrainTileStoreTest[jvm] > a written tile reads back byte-for-byte()[jvm] PASSED - -TerrainTileStoreTest[jvm] > deleteAll removes every tile and leaves the store readable-empty()[jvm] PASSED - -TerrainTileStoreTest[jvm] > an unwritten tile reads as null not an error()[jvm] PASSED - -TerrainTileStoreTest[jvm] > deleteAll on a store nothing was ever written to is a harmless no-op()[jvm] PASSED - -TerrainRegionExtractorTest[jvm] > a regional archive that stores nothing does not report regional detail()[jvm] PASSED - -TerrainRegionExtractorTest[jvm] > a regional archive that stores tiles reports regional detail()[jvm] PASSED - -> Task :feature:map-terrain:allTests - -> Task :feature:messaging:jvmTest - -MessageComposerBehaviorTest[jvm] > live markdown parser identifies supported inline styles without styling delimiters()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > mention matching is case insensitive across id and display names()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > live markdown spans are returned in source order()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > live markdown parser ignores style delimiters inside code spans()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > markdown surrounding mention expands to friendly display name()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > live markdown parser preserves style surrounding code spans()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > mention matching preserves order and stops at the requested limit()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > multiple mention replacements accumulate offsets before later markdown()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > mention replacement remaps later markdown span()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > bold delimiters are not double counted as italic()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > live markdown parser returns no spans for plain or incomplete text()[jvm] PASSED - -MessageComposerBehaviorTest[jvm] > friendly mention delimiters do not introduce markdown styling()[jvm] PASSED - -> Task :feature:wifi-provision:compileTestKotlinIosSimulatorArm64 -> Task :feature:wifi-provision:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:wifi-provision:iosSimulatorArm64Test SKIPPED -> Task :feature:wifi-provision:compileAndroidHostTest -> Task :feature:node:compileTestKotlinIosSimulatorArm64 -> Task :feature:node:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:node:iosSimulatorArm64Test SKIPPED - -> Task :feature:messaging:jvmTest - -MessageTimestampTest[jvm] > compactMessageTimestampDoesNotInvokeFullFormatter()[jvm] PASSED - -MessageTimestampTest[jvm] > fullMessageTimestampFallsBackToReceivedTime()[jvm] PASSED - -MessageTimestampTest[jvm] > fullMessageTimestampUsesRawMeshTime()[jvm] PASSED - -> Task :core:database:compileAndroidDeviceTest -> Task :kmpSmokeCompile - -> Task :feature:node:jvmTest - -NodeDetailViewModelTest[jvm] > refreshMetadata surfaces queue rejection without throwing from view model scope()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > openRemoteAdmin surfaces local node loss and releases the in-flight guard()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > openRemoteAdmin navigates to settings when session is already active()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > uiState emits updates from useCase()[jvm] PASSED - -> Task :feature:node:compileAndroidHostTest - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:node:jvmTest - -NodeDetailViewModelTest[jvm] > openRemoteAdmin surfaces queue rejection and releases the in-flight guard()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > openRemoteAdmin shows disconnected snackbar when radio is disconnected()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > handleNodeMenuAction delegates to nodeManagementActions for Mute()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > openRemoteAdmin shows timeout snackbar when node is unreachable()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > testInitialization()[jvm] PASSED - -NodeDetailViewModelTest[jvm] > handleNodeMenuAction delegates to nodeRequestActions for Traceroute()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > the signed filter keeps only nodes whose signature the radio verified()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > invoke filters out ignored nodes if showIgnored is false()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > invoke filters out infrastructure nodes if excludeInfrastructure is true()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > the unheard filter keeps an MQTT node which reads unheard permanently()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > invoke keeps MQTT nodes if excludeMqtt is false()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > the encrypted filter keeps a key on file and drops one that stopped matching()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > invoke applies repository filters and returns nodes()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > invoke filters out MQTT nodes if excludeMqtt is true()[jvm] PASSED - -GetFilteredNodesUseCaseTest[jvm] > the unheard filter drops a node the radio can no longer reach()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > temperatureIsNotConvertedHere()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > temperatureSuffixFollowsFahrenheitSetting()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > missingWindSpeedStaysNull()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > windSpeedZeroIsPreserved()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > windSpeedSuffixFollowsMeasurementSystem()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > windSpeedMetricIsConvertedToKph()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > windSpeedImperialIsConvertedToMph()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > sharedAxisMetricsHaveNoSuffix()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > adcVoltageSuffixIsVoltsRegardlessOfMeasurementSystem()[jvm] PASSED - -EnvironmentChartUnitsTest[jvm] > adcVoltageIsNotConverted()[jvm] PASSED - -HostMetricsTest[jvm] > buildHostMetricsChartData_filters_missing_and_non_positive_values()[jvm] PASSED - -HostMetricsTest[jvm] > buildHostMetricsChartData_returns_empty_series_when_no_plottable_metrics_exist()[jvm] PASSED - -SignalLogKeyTest[jvm] > a negative packet id is not conflated with its positive twin()[jvm] PASSED - -SignalLogKeyTest[jvm] > entries are ordered newest first across both types()[jvm] PASSED - -SignalLogKeyTest[jvm] > repeated packet ids still produce distinct keys()[jvm] PASSED - -SignalLogKeyTest[jvm] > local stats and packets sharing a timestamp do not collide()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:messaging:jvmTest - -ContactsViewModelTest[jvm] > unreadCountTotal reflects updates from repository()[jvm] PASSED - -ContactsViewModelTest[jvm] > toggleSectionCollapse flips section membership()[jvm] PASSED - -ContactsViewModelTest[jvm] > collapsedSections restores persisted state from SavedStateHandle()[jvm] PASSED - -ContactsViewModelTest[jvm] > testInitialization()[jvm] PASSED - -MessageFormattingTest[jvm] > wrapping_absorbs_adjacent_delimiter_without_orphan()[jvm] PASSED - -MessageFormattingTest[jvm] > wrap_bold_wraps_selection_and_keeps_delimiters_selected()[jvm] PASSED - -MessageFormattingTest[jvm] > contains_markdown_syntax_detects_and_rejects()[jvm] PASSED - -MessageFormattingTest[jvm] > wrapping_hugs_content_leaving_whitespace_outside()[jvm] PASSED - -MessageFormattingTest[jvm] > unwrap_returns_null_for_non_link()[jvm] PASSED - -MessageFormattingTest[jvm] > link_inserts_placeholder_for_collapsed_cursor()[jvm] PASSED - -MessageFormattingTest[jvm] > link_unwraps_to_label()[jvm] PASSED - -MessageFormattingTest[jvm] > link_wraps_selection()[jvm] PASSED - -MessageFormattingTest[jvm] > collapsed_cursor_inserts_pair_with_caret_between()[jvm] PASSED - -MessageFormattingTest[jvm] > is_markdown_link_matches_exact_link_only()[jvm] PASSED - -MessageFormattingTest[jvm] > wrap_bold_toggles_off_when_already_wrapped()[jvm] PASSED - -MentionQueryTest[jvm] > at-sign mid-word such as an email is not a mention()[jvm] PASSED - -MentionQueryTest[jvm] > no at-sign means no query()[jvm] PASSED - -MentionQueryTest[jvm] > bare at-sign yields an empty query for showing all nodes()[jvm] PASSED - -MentionQueryTest[jvm] > whitespace after the at-sign ends the query()[jvm] PASSED - -MentionQueryTest[jvm] > detects a query at the start()[jvm] PASSED - -MentionQueryTest[jvm] > a non-collapsed selection yields no query()[jvm] PASSED - -MentionQueryTest[jvm] > only the token left of the caret is considered()[jvm] PASSED - -MentionQueryTest[jvm] > detects a query after whitespace()[jvm] PASSED - -MentionQueryTest[jvm] > a completed token followed by a space does not re-trigger()[jvm] PASSED - -MessageGroupingTest[jvm] > outOfOrderTimestampsWithinWindow_stillGroup()[jvm] PASSED - -MessageGroupingTest[jvm] > backlogSyncWithCloseMeshTimes_groups()[jvm] PASSED - -MessageGroupingTest[jvm] > sameSenderBeyondWindow_startsNewBlock()[jvm] PASSED - -MessageGroupingTest[jvm] > sameSenderWithinWindow_groups()[jvm] PASSED - -MessageGroupingTest[jvm] > unstampedMeshTime_fallsBackToReceivedTime()[jvm] PASSED - -MessageGroupingTest[jvm] > backlogSyncWithSpreadMeshTimes_startsNewBlock()[jvm] PASSED - -MessageGroupingTest[jvm] > localRunBeyondWindow_startsNewBlock()[jvm] PASSED - -MessageGroupingTest[jvm] > differentSendersWithinWindow_doNotGroup()[jvm] PASSED - -MessageGroupingTest[jvm] > localRunWithinWindow_groups()[jvm] PASSED - -MessageGroupingTest[jvm] > localAndRemoteWithinWindow_doNotGroup()[jvm] PASSED - -UnreadUiDefaultsTest[jvm] > defaults are set correctly()[jvm] PASSED - -MessageInputEnterKeyTest[jvm] > enterSendsAndLeavesTheTextAlone()[jvm] PASSED - -MessageInputEnterKeyTest[jvm] > enterOnAnEmptyComposerSendsNothing()[jvm] PASSED - -MessageInputEnterKeyTest[jvm] > shiftEnterInsertsANewlineAndDoesNotSend()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > translateNotRequiredShowsSnackbarAndPersistsNothing()[jvm] PASSED - -MessageViewModelTest[jvm] > testDraftIsRestoredFromTheRepository()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > confirmDownloadFailureShowsSnackbarAndHidesDialog()[jvm] PASSED - -MessageViewModelTest[jvm] > testToggleShowQuickChat()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > confirmDownloadSuccessAutoContinuesToTranslation()[jvm] PASSED - -MessageViewModelTest[jvm] > testUnreadCount()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > translateWithCachedTranslationOnlyTogglesDisplay()[jvm] PASSED - -MessageViewModelTest[jvm] > testClearDraftCancelsPendingPersistenceAndClearsImmediately()[jvm] PASSED - -MessageViewModelTest[jvm] > send persistence failure is shown through the snackbar manager()[jvm] PASSED - -MessageViewModelTest[jvm] > testDraftEditsAreIgnoredBeforeTheStoredValueIsRead()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > translationAvailableIsFalseWhenServiceUnavailable()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > translateSuccessPersistsTranslation()[jvm] PASSED - -MessageViewModelTest[jvm] > testClearUnreadCountLeavesNotificationAloneOnceTheUserHasLeft()[jvm] PASSED - -MessageViewModelTest[jvm] > testFrequentEmojis()[jvm] PASSED - -MessageViewModelTest[jvm] > testClearUnreadCount()[jvm] PASSED - -MessageViewModelTest[jvm] > testSendMessage()[jvm] PASSED - -MessageViewModelTest[jvm] > testDeleteMessages()[jvm] PASSED - -MessageViewModelTest[jvm] > testConnectionState()[jvm] PASSED - -MessageViewModelTest[jvm] > testSendReaction()[jvm] PASSED - -MessageViewModelTest[jvm] > testShowFullMessageTimestampsReflectsUiPreference()[jvm] PASSED - -MessageViewModelTest[jvm] > testInitialization()[jvm] PASSED - -MessageViewModelTest[jvm] > testNodeRepositoryIntegration()[jvm] PASSED - -MessageViewModelTest[jvm] > testSetTitle()[jvm] PASSED - -MessageViewModelTest[jvm] > testDraftPersistenceDebouncesRapidEdits()[jvm] PASSED - -> Task :feature:settings:compileTestKotlinIosSimulatorArm64 -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1130:52 Unchecked cast of 'Any?' to 'Set'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1292:36 Unnecessary non-null assertion (!!) on a non-null receiver of type 'InterruptedManualChannelUpdate'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1293:38 Unnecessary non-null assertion (!!) on a non-null receiver of type 'InterruptedManualChannelUpdate'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1943:52 Unchecked cast of 'Any?' to 'Set'. - -> Task :feature:settings:linkDebugTestIosSimulatorArm64 SKIPPED -> Task :feature:settings:iosSimulatorArm64Test SKIPPED - -> Task :feature:settings:compileTestKotlinJvm -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1130:52 Unchecked cast of 'Any?' to 'Set'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1292:36 Unnecessary non-null assertion (!!) on a non-null receiver of type 'InterruptedManualChannelUpdate'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1293:38 Unnecessary non-null assertion (!!) on a non-null receiver of type 'InterruptedManualChannelUpdate'. -w: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/radio/RadioConfigViewModelTest.kt:1943:52 Unchecked cast of 'Any?' to 'Set'. - -> Task :feature:settings:compileJvmTestJava NO-SOURCE -> Task :feature:settings:jvmTestClasses - -> Task :feature:wifi-provision:jvmTest - -NymeaPacketCodecTest[jvm] > reassembler handles multiple messages sequentially()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > reassembler returns complete message on single feed with terminator()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode boundary payload one byte over splits into two packets()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > reassembler reset clears buffered data()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode long message splits across multiple packets()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > reassembler buffers partial data and returns null()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode empty string produces single packet with just newline()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode appends newline terminator()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode and reassembler round-trip with small packet size()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode and reassembler round-trip()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode custom maxPacketSize is respected()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > reassembler completes when terminator arrives in later chunk()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode short message fits in single packet()[jvm] PASSED - -NymeaPacketCodecTest[jvm] > encode boundary payload exactly fills packets()[jvm] PASSED - -NymeaProtocolTest[jvm] > response ignores unknown keys()[jvm] PASSED - -NymeaProtocolTest[jvm] > networks response uses defaults for missing fields()[jvm] PASSED - -NymeaProtocolTest[jvm] > simple command serializes to compact JSON()[jvm] PASSED - -NymeaProtocolTest[jvm] > response deserializes connection info payload()[jvm] PASSED - -NymeaProtocolTest[jvm] > networks response deserializes empty list()[jvm] PASSED - -NymeaProtocolTest[jvm] > response deserializes error code()[jvm] PASSED - -NymeaProtocolTest[jvm] > networks response deserializes network list()[jvm] PASSED - -NymeaProtocolTest[jvm] > connect command with empty password()[jvm] PASSED - -NymeaProtocolTest[jvm] > connect command round-trips()[jvm] PASSED - -NymeaProtocolTest[jvm] > connect command serializes with nested params()[jvm] PASSED - -NymeaProtocolTest[jvm] > response deserializes success()[jvm] PASSED - -NymeaProtocolTest[jvm] > simple command round-trips()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:messaging:jvmTest - -MessageItemTest[jvm] > fullMessageTimestampIsDisplayedInMessageHeader()[jvm] PASSED - -MessageItemTest[jvm] > localDirectMessage_displaysImplicitAckWarningText()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > modelDownloadRequiredShowsPrompt()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > toggleShowTranslatedFlipsPersistedFlag()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > dismissTranslationDialogHidesPrompt()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > translationAvailableIsTrueWhenServiceSupportsLocale()[jvm] PASSED - -MessageViewModelTranslationTest[jvm] > translateUnavailableShowsSnackbar()[jvm] PASSED - -MessageItemTest[jvm] > messageStatusDialog_displaysRoutingFailureExplanation()[jvm] PASSED - -MessageItemTest[jvm] > mqttIconIsNotDisplayedWhenViaMqttIsFalse()[jvm] PASSED - -MessageItemTest[jvm] > mqttIconIsDisplayedWhenViaMqttIsTrue()[jvm] PASSED - -MessageItemTest[jvm] > channelKeyMismatch_displaysTerminalStatusText()[jvm] PASSED - -MessageItemTest[jvm] > localMessageStatus_doesNotExposeGenericIconDescription()[jvm] PASSED - -MessageItemTest[jvm] > retryableRoutingError_usesWarningStatusColor()[jvm] PASSED - -MessageItemTest[jvm] > directMessageWithoutSnrDoesNotFabricateAZeroReading()[jvm] PASSED - -MessageItemTest[jvm] > directMessageWithZeroSnrShowsTheReading()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:messaging:jvmTest - -MessageItemTest[jvm] > messageItem_hasCorrectSemanticContentDescription()[jvm] PASSED - -MessageItemTest[jvm] > localMessage_displaysDeliveryStatusText()[jvm] PASSED - -MessageInputImeSessionTest[jvm] > renamingAMentionedNodeWhileFocusedKeepsTheImeSessionAndRendersTheNewName()[jvm] PASSED - -MessageItemTest[jvm] > localMessageStatus_invokesStatusClick()[jvm] PASSED - -MessageItemTest[jvm] > localMessage_displaysRoutingErrorStatusText()[jvm] PASSED - -QuickChatViewModelTest[jvm] > addQuickChatAction delegates to repository()[jvm] PASSED - -QuickChatViewModelTest[jvm] > quickChatActions reflects repository updates()[jvm] PASSED - -QuickChatViewModelTest[jvm] > testInitialization()[jvm] PASSED - -SwipeableContactRowTest[jvm] > swipingAMutedRowUnmutesItRatherThanRemutingIt()[jvm] PASSED - -SwipeableContactRowTest[jvm] > exposesMuteAndDeleteWithoutTheSwipeGesture()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:node:jvmTest - -CompassViewModelTest[jvm] > uiState uses PDOP only positional accuracy()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState returns 180 degree angular error when distance is zero()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState handles angular error for very small distances()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState reflects target node info after start()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState falls back to precision bits positional accuracy()[jvm] PASSED - -CompassViewModelTest[jvm] > testInitialization()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState leaves positional accuracy empty when no DOP or precision data exists()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState updates when heading and location change()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState uses HDOP only positional accuracy when VDOP is missing()[jvm] PASSED - -CompassViewModelTest[jvm] > uiState uses HDOP and VDOP positional accuracy when PDOP is missing()[jvm] PASSED - -EnvironmentChannelMetricsTest[jvm] > absentOneWireChannelIsHidden()[jvm] PASSED - -PowerMetricsZeroVoltageTest[jvm] > reportedVoltageWithoutCurrentShowsVoltageOnly()[jvm] PASSED - -PowerMetricsZeroVoltageTest[jvm] > absentChannelIsHidden()[jvm] PASSED - -PowerMetricsZeroVoltageTest[jvm] > zeroVoltageChannelIsShown()[jvm] PASSED - -NodeManagementActionsTest[jvm] > requestRemoveNode_invokes_onAfterRemove_when_user_confirms()[jvm] PASSED - -NodeManagementActionsTest[jvm] > requestRemoveNode_success_callback_failure_is_not_reported_as_radio_rejection()[jvm] PASSED - -NodeManagementActionsTest[jvm] > requestRemoveNode_shows_confirmation_alert()[jvm] PASSED - -NodeManagementActionsTest[jvm] > requestRemoveNode_local_node_loss_keeps_success_callback_pending_and_surfaces_feedback()[jvm] PASSED - -NodeManagementActionsTest[jvm] > requestRemoveNode_queue_rejection_keeps_success_callback_pending_and_surfaces_feedback()[jvm] PASSED - -NodeListViewModelTest[jvm] > connectionState reflects serviceRepository state()[jvm] PASSED - -NodeListViewModelTest[jvm] > nodeList emits updates when repository changes()[jvm] PASSED - -NodeListViewModelTest[jvm] > nodesUiState follows a mid-session units change()[jvm] PASSED - -NodeListViewModelTest[jvm] > isActive is true when unknown nodes are opted out()[jvm] PASSED - -NodeListViewModelTest[jvm] > isActive is false for the default filter()[jvm] PASSED - -NodeListViewModelTest[jvm] > testInitialization()[jvm] PASSED - -StatusMessageActionGateTest[jvm] > older firmware does not offer the action()[jvm] PASSED - -StatusMessageActionGateTest[jvm] > a disconnected radio does not offer the action()[jvm] PASSED - -StatusMessageActionGateTest[jvm] > a node list with no local node offers the action nowhere()[jvm] PASSED - -StatusMessageActionGateTest[jvm] > another node never offers the action()[jvm] PASSED - -StatusMessageActionGateTest[jvm] > firmware metadata we have not read yet does not offer the action()[jvm] PASSED - -StatusMessageActionGateTest[jvm] > firmware that compiled the module out does not offer the action()[jvm] PASSED - -StatusMessageActionGateTest[jvm] > the local node offers the action while connected on 2 8 firmware()[jvm] PASSED - -DecodePaxFromLogTest[jvm] > invalidRawMessage_returnsNull()[jvm] PASSED - -EnvironmentChannelMetricsTest[jvm] > zeroAdcVoltageIsShown()[jvm] PASSED - -DecodePaxFromLogTest[jvm] > base64Fallback_validPayload_decoded()[jvm] PASSED - -DecodePaxFromLogTest[jvm] > binaryProto_wantResponse_returnsNull()[jvm] PASSED - -DecodePaxFromLogTest[jvm] > emptyLog_returnsNull()[jvm] PASSED - -DecodePaxFromLogTest[jvm] > binaryProto_allZeroValues_returnsNull()[jvm] PASSED - -DecodePaxFromLogTest[jvm] > binaryProto_validPaxcount_decoded()[jvm] PASSED - -DecodePaxFromLogTest[jvm] > binaryProto_wrongPortNum_returnsNull()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > soilMoisture_validValueIncluded()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > emptyMetrics_returnsDefaultGraphingData()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > oneWireChannels_plotIndependently()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > iaq_intMinValueFilteredOut()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > oneWireChannels_convertToFahrenheit()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > barometricPressure_doesNotAffectRightAxis()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > nanPressure_filteredOut()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > mixedValidAndNanValues_onlyValidEnvironmentMetricsAreCharted()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > adcChannel_zeroIsPlotted()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > useFahrenheit_convertsSoilTemperature()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > allNanValues_returnDefaultAxesAndNoPlots()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > adcChannels_areNotUnitConverted()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > nanHumidity_filteredOut()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > iaq_validValueIncluded()[jvm] PASSED - -EnvironmentChannelMetricsTest[jvm] > oneWireChannelsKeepTheirChannelNumber()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > multipleMetrics_rightAxisMinMaxSpansAll()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > windSpeed_plotted()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > radiation_positiveValuesOnly()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > humidity_nonZeroIncluded()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > humidity_zeroFilteredOut()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > nanTemperature_filteredOut()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > soilMoisture_intMinValueFilteredOut()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > adcChannels_plotIndependently()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > useFahrenheit_convertsTemperatureMinMax()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > gasResistance_notPlottedByGraphingFunction()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > uvLux_plotted()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > adcChannel_nanFilteredOut()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > lux_plotted()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > barometricPressure_onLeftAxis()[jvm] PASSED - -EnvironmentMetricsForGraphingTest[jvm] > oneWireChannel_zeroIsPlotted()[jvm] PASSED - -EnvironmentChannelMetricsTest[jvm] > adcChannelsKeepTheirChannelNumber()[jvm] PASSED - -FormatBytesTest[jvm] > large_values()[jvm] PASSED - -FormatBytesTest[jvm] > custom_decimal_places_one()[jvm] PASSED - -FormatBytesTest[jvm] > default_rounding_keeps_two_decimal_places_without_trailing_zeroes()[jvm] PASSED - -FormatBytesTest[jvm] > custom_decimal_places_zero()[jvm] PASSED - -FormatBytesTest[jvm] > zero_bytes()[jvm] PASSED - -FormatBytesTest[jvm] > kilobytes_just_below_megabyte_boundary_round_up_without_switching_units()[jvm] PASSED - -EnvironmentChannelMetricsTest[jvm] > absentAdcChannelIsHidden()[jvm] PASSED - -FormatBytesTest[jvm] > gigabyte_boundary()[jvm] PASSED - -FormatBytesTest[jvm] > kilobyte_with_decimals()[jvm] PASSED - -FormatBytesTest[jvm] > megabyte_with_decimals()[jvm] PASSED - -FormatBytesTest[jvm] > gigabyte_with_decimals()[jvm] PASSED - -FormatBytesTest[jvm] > small_byte_values()[jvm] PASSED - -FormatBytesTest[jvm] > negative_bytes_returns_na()[jvm] PASSED - -FormatBytesTest[jvm] > megabyte_boundary()[jvm] PASSED - -FormatBytesTest[jvm] > kilobyte_boundary()[jvm] PASSED - -EnvironmentChannelMetricsTest[jvm] > zeroOneWireTemperatureIsShown()[jvm] PASSED - -LocalNodeContextMenuTest[jvm] > a collapsed menu shows nothing()[jvm] PASSED - -SignalRowQualityLabelTest[jvm] > signalRow_labelsGoodSnr()[jvm] PASSED - -SignalRowQualityLabelTest[jvm] > signalRow_withoutNoiseFloorStaysSnrOnly()[jvm] PASSED - -SignalRowQualityLabelTest[jvm] > signalRow_noiseFloorBlendDowngradesTheLabel()[jvm] PASSED - -SignalRowQualityLabelTest[jvm] > signalRow_rssiShowsOnlyTheRawValue()[jvm] PASSED - -> Task :feature:wifi-provision:testAndroidHostTest - -DeduplicateBySsidTest > mixed duplicates and unique networks are all handled PASSED - -DeduplicateBySsidTest > single network is returned unchanged PASSED - -DeduplicateBySsidTest > duplicate SSIDs keep strongest signal PASSED - -DeduplicateBySsidTest > empty list returns empty PASSED - -DeduplicateBySsidTest > result is sorted by signal strength descending PASSED - -DeduplicateBySsidTest > preserves isProtected from strongest entry PASSED - -NymeaPacketCodecTest > reassembler handles multiple messages sequentially PASSED - -NymeaPacketCodecTest > reassembler returns complete message on single feed with terminator PASSED - -NymeaPacketCodecTest > encode boundary payload one byte over splits into two packets PASSED - -NymeaPacketCodecTest > reassembler reset clears buffered data PASSED - -NymeaPacketCodecTest > encode long message splits across multiple packets PASSED - -NymeaPacketCodecTest > reassembler buffers partial data and returns null PASSED - -NymeaPacketCodecTest > encode empty string produces single packet with just newline PASSED - -NymeaPacketCodecTest > encode appends newline terminator PASSED - -NymeaPacketCodecTest > encode and reassembler round-trip with small packet size PASSED - -NymeaPacketCodecTest > encode and reassembler round-trip PASSED - -NymeaPacketCodecTest > encode custom maxPacketSize is respected PASSED - -NymeaPacketCodecTest > reassembler completes when terminator arrives in later chunk PASSED - -NymeaPacketCodecTest > encode short message fits in single packet PASSED - -NymeaPacketCodecTest > encode boundary payload exactly fills packets PASSED - -WifiProvisionViewModelTest > disconnect resets state to initial PASSED - -WifiProvisionViewModelTest > initial state is Idle with empty data PASSED - -NymeaProtocolTest > response ignores unknown keys PASSED - -NymeaProtocolTest > networks response uses defaults for missing fields PASSED - -NymeaProtocolTest > simple command serializes to compact JSON PASSED - -NymeaProtocolTest > response deserializes connection info payload PASSED - -NymeaProtocolTest > networks response deserializes empty list PASSED - -NymeaProtocolTest > response deserializes error code PASSED - -NymeaProtocolTest > networks response deserializes network list PASSED - -NymeaProtocolTest > connect command with empty password PASSED - -NymeaProtocolTest > connect command round-trips PASSED - -NymeaProtocolTest > connect command serializes with nested params PASSED - -NymeaProtocolTest > response deserializes success PASSED - -NymeaProtocolTest > simple command round-trips PASSED - -WifiProvisionViewModelTest > connectToDevice sets error and returns to Idle on BLE connect failure PASSED - -WifiProvisionViewModelTest > connectToDevice transitions to DeviceFound on success PASSED - -WifiProvisionViewModelTest > connectToDevice transitions to ConnectingBle immediately PASSED - -WifiProvisionViewModelTest > provisionWifi ignores blank SSID PASSED - -WifiProvisionViewModelTest > connectToDevice sets error when connection throws exception PASSED - -WifiProvisionViewModelTest > scanNetworks transitions to LoadingNetworks then Connected with results PASSED - -WifiProvisionViewModelTest > disconnect calls BLE disconnect PASSED - -WifiProvisionViewModelTest > scanNetworks reconnects if no service exists PASSED - -WifiProvisionViewModelTest > scanNetworks deduplicates networks by SSID PASSED - -WifiProvisionViewModelTest > provisionWifi sets Failed status on error response PASSED - -WifiProvisionViewModelTest > provisionWifi transitions to Provisioning then Connected with Success PASSED - -WifiProvisionViewModelTest > connectToDevice uses device address when name is null PASSED - -WifiProvisionViewModelTest > provisionWifi no-ops when service is null PASSED - -NymeaWifiServiceTest > scanNetworks returns parsed network list PASSED - -NymeaWifiServiceTest > scanNetworks returns empty list when device has no networks PASSED - -NymeaWifiServiceTest > connect succeeds and returns device name PASSED - -NymeaWifiServiceTest > scanNetworks fails when scan command returns error PASSED - -NymeaWifiServiceTest > provision returns Failure on non-zero response code PASSED - -NymeaWifiServiceTest > provision sends CMD_CONNECT_HIDDEN for hidden networks PASSED - -NymeaWifiServiceTest > provision maps all known error codes PASSED - -NymeaWifiServiceTest > provision sends CMD_CONNECT for visible networks PASSED - -NymeaWifiServiceTest > connect fails when BLE connection fails PASSED - -NymeaWifiServiceTest > scanNetworks sends correct BLE commands PASSED - -NymeaWifiServiceTest > provision falls back to GetConnection for IP when connect response has no payload PASSED - -NymeaWifiServiceTest > provision returns Success on response code 0 PASSED - -NymeaWifiServiceTest > connect fails when BLE throws exception PASSED - -NymeaWifiServiceTest > scanNetworks uses WITH_RESPONSE write type PASSED - -NymeaWifiServiceTest > close disconnects BLE PASSED - -NymeaWifiServiceTest > connect returns device address when name is null PASSED - -NymeaWifiServiceTest > provision returns Failure on exception PASSED - -> Task :feature:messaging:jvmTest - -QuickReactionsDismissTest[jvm] > tappingTheOwningBubbleClosesTheBar()[jvm] PASSED - -QuickReactionsDismissTest[jvm] > tappingAnotherRowClosesTheBar()[jvm] PASSED - -QuickReactionsDismissTest[jvm] > tappingTheBackgroundClosesTheBar()[jvm] PASSED - -QuickReactionsDismissTest[jvm] > tappingAnEmojiStillReactsAndIsNotEatenByTheDismissal()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:node:jvmTest - -SignalRowQualityLabelTest[jvm] > signalRow_labelsBadSnr()[jvm] PASSED - -NodeHopHistogramTest[jvm] > cutoff_drops_nodes_heard_before_it()[jvm] PASSED - -NodeHopHistogramTest[jvm] > all_unknown_gives_empty_list()[jvm] PASSED - -NodeHopHistogramTest[jvm] > unknown_hops_are_excluded()[jvm] PASSED - -NodeHopHistogramTest[jvm] > empty_input_gives_empty_list()[jvm] PASSED - -NodeHopHistogramTest[jvm] > null_cutoff_keeps_everything_regardless_of_last_heard()[jvm] PASSED - -NodeHopHistogramTest[jvm] > buckets_are_contiguous_and_preserve_middle_gaps()[jvm] PASSED - -SignalRowQualityLabelTest[jvm] > signalRow_labelsNoneSnr()[jvm] PASSED - -SignalRowQualityLabelTest[jvm] > signalRow_hidesWhenNodeHasNoSnrReading()[jvm] PASSED - -SignalRowQualityLabelTest[jvm] > signalRow_labelsFairSnr()[jvm] PASSED - -HandleNodeActionTest[jvm] > remove action delegates to viewModel and does not navigate up immediately()[jvm] PASSED - -HandleNodeActionTest[jvm] > direct message to a keyless node with a thread opens that thread()[jvm] PASSED - -HandleNodeActionTest[jvm] > direct message to a keyed node uses the computed route rather than an old thread()[jvm] PASSED - -EnvironmentMetricsStateTest[jvm] > environmentMetricsForGraphing_correctly_calculates_times()[jvm] PASSED - -EnvironmentMetricsStateTest[jvm] > environmentMetricsForGraphing_handles_valid_zero_temperatures()[jvm] PASSED - -TracerouteChartTest[jvm] > matchesRequestToResult()[jvm] PASSED - -TracerouteChartTest[jvm] > timeSeconds_truncatesSubSecondPrecision()[jvm] PASSED - -TracerouteChartTest[jvm] > computesForwardHops()[jvm] PASSED - -TracerouteChartTest[jvm] > emptyInputs_returnsEmpty()[jvm] PASSED - -TracerouteChartTest[jvm] > noMatchingResult_yieldsNulls()[jvm] PASSED - -TracerouteChartTest[jvm] > emptyRouteBack_yieldsNullReturnHops()[jvm] PASSED - -TracerouteChartTest[jvm] > directRoute_yieldsZeroHops()[jvm] PASSED - -TracerouteChartTest[jvm] > computesRoundTripSeconds()[jvm] PASSED - -TracerouteChartTest[jvm] > multipleRequests_preservesOrder()[jvm] PASSED - -TracerouteChartTest[jvm] > returnHops_computedWhenRouteBackAvailable()[jvm] PASSED - -CanDirectMessageTest[jvm] > allowsMessagableNodeWithAKey()[jvm] PASSED - -CanDirectMessageTest[jvm] > hidesTheActionWhenThereIsNoThreadToOpen()[jvm] PASSED - -CanDirectMessageTest[jvm] > stillOffersTheActionWhenAThreadAlreadyExists()[jvm] PASSED - -CanDirectMessageTest[jvm] > blocksUnmessagableRoleEvenWithAKey()[jvm] PASSED - -CanDirectMessageTest[jvm] > blocksUnmessagableNodeEvenWithAKey()[jvm] PASSED - -CanDirectMessageTest[jvm] > blocksNodeWithNoKeyOnFile()[jvm] PASSED - -CommonNodeRequestActionsTest[jvm] > missing local identity uses the same localized request feedback()[jvm] PASSED - -LocalNodeContextMenuTest[jvm] > the update status entry opens the editor and closes the menu()[jvm] PASSED - -CommonNodeRequestActionsTest[jvm] > neighbor queue rejection is surfaced without starting the request timer()[jvm] PASSED - -CommonNodeRequestActionsTest[jvm] > traceroute queue rejection is surfaced without starting the request timer()[jvm] PASSED - -WARNING: A restricted method in -> Task :feature:wifi-provision:jvmTest - -NymeaWifiServiceTest[jvm] > scanNetworks returns parsed network list()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > scanNetworks returns empty list when device has no networks()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > connect succeeds and returns device name()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > scanNetworks fails when scan command returns error()[jvm] PASSED - -DeduplicateBySsidTest[jvm] > mixed duplicates and unique networks are all handled()[jvm] PASSED - -DeduplicateBySsidTest[jvm] > single network is returned unchanged()[jvm] PASSED - -DeduplicateBySsidTest[jvm] > duplicate SSIDs keep strongest signal()[jvm] PASSED - -DeduplicateBySsidTest[jvm] > empty list returns empty()[jvm] PASSED - -DeduplicateBySsidTest[jvm] > result is sorted by signal strength descending()[jvm] PASSED - -DeduplicateBySsidTest[jvm] > preserves isProtected from strongest entry()[jvm] PASSED - -java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:settings:jvmTest - -DebugViewModelTest[jvm] > packet log annotates relay_node with the known node's name()[jvm] PASSED - -DebugViewModelTest[jvm] > presetFilters includes my node ID and broadcast()[jvm] PASSED - -DebugViewModelTest[jvm] > search filters results correctly()[jvm] PASSED - -DebugViewModelTest[jvm] > packet log annotates signed Wire-format from and to with hex()[jvm] PASSED - -DebugViewModelTest[jvm] > filterManager filters logs correctly with AND and OR modes()[jvm] PASSED - -DebugViewModelTest[jvm] > setRetentionDays never keeps every log()[jvm] PASSED - -DebugViewModelTest[jvm] > node info log still annotates legacy protobuf-java text format()[jvm] PASSED - -DebugViewModelTest[jvm] > setLoggingEnabled false deletes all logs()[jvm] PASSED - -DebugViewModelTest[jvm] > decodePayloadFromMeshLog decodes various portnums()[jvm] PASSED - -DebugViewModelTest[jvm] > setRetentionDays one hour keeps the last hour instead of clearing the log()[jvm] PASSED - -DebugViewModelTest[jvm] > packet log annotates unknown relay_node with hex()[jvm] PASSED - -DebugViewModelTest[jvm] > setRetentionDays updates prefs and deletes old logs()[jvm] PASSED - -DebugViewModelTest[jvm] > requestDeleteAllLogs shows alert()[jvm] PASSED - -CleanNodeDatabaseViewModelTest[jvm] > cleanNodes calls useCase and clears state()[jvm] PASSED - -CleanNodeDatabaseViewModelTest[jvm] > onOlderThanDaysChanged updates state()[jvm] PASSED - -CleanNodeDatabaseViewModelTest[jvm] > onOnlyUnknownNodesChanged updates state and clamps olderThanDays()[jvm] PASSED - -CleanNodeDatabaseViewModelTest[jvm] > getNodesToDelete calls useCase and updates state()[jvm] PASSED - -EditChannelDialogTest[jvm] > generated name psk is restored to default when name is cleared after reopen()[jvm] PASSED - -EditChannelDialogTest[jvm] > explicitly entered default marker is preserved when naming channel()[jvm] PASSED - -EditChannelDialogTest[jvm] > existing default psk channel is not rotated when renamed()[jvm] PASSED - -EditChannelDialogTest[jvm] > new named manual channel generates fresh psk()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:messaging:allTests - -> Task :feature:node:jvmTest - -DetailDialogScrollTest[jvm] > showLogDetailContentScrollsToRevealTrailingText()[jvm] PASSED - -DetailDialogScrollTest[jvm] > showTracerouteDetailContentScrollsToRevealTrailingText()[jvm] PASSED - -ExportLocaleInvarianceTest[jvm] > gpx coordinates keep a dot separator on a comma locale()[jvm] PASSED - -MetricsViewModelTest[jvm] > savePositionCSV writes correct data()[jvm] PASSED - -MetricsViewModelTest[jvm] > clearLocalStats deletes local stats logs for route node()[jvm] PASSED - -MetricsViewModelTest[jvm] > saveLocalStatsCSV writes only provided visible data()[jvm] PASSED - -MetricsViewModelTest[jvm] > state reflects updates from getNodeDetailsUseCase()[jvm] PASSED - -MetricsViewModelTest[jvm] > saveAirQualityMetricsCSV exports the raw pm status register()[jvm] PASSED - -MetricsViewModelTest[jvm] > saveEnvironmentMetricsCSV writes correct data()[jvm] PASSED - -MetricsViewModelTest[jvm] > saveSignalMetricsCSV writes correct data()[jvm] PASSED - -MetricsViewModelTest[jvm] > testInitialization()[jvm] PASSED - -MetricsViewModelTest[jvm] > saveDeviceMetricsCSV writes correct data()[jvm] PASSED - -MetricsViewModelTest[jvm] > availableTimeFrames filters based on oldest data()[jvm] PASSED - -MetricsViewModelTest[jvm] > savePowerMetricsCSV writes correct data()[jvm] PASSED - -PmStatusFaultTest[jvm] > a clean register decodes to no faults()[jvm] PASSED - -PmStatusFaultTest[jvm] > bits no sensor documents are kept as unknown()[jvm] PASSED - -PmStatusFaultTest[jvm] > the two CO2 error bits report one fault()[jvm] PASSED - -PmStatusFaultTest[jvm] > each documented bit decodes to its fault in bit order()[jvm] PASSED - -PmStatusFaultTest[jvm] > only the fan speed bit is a warning()[jvm] PASSED - -PmStatusFaultTest[jvm] > bit 31 renders as an unsigned register()[jvm] PASSED - -MetricsStateTest[jvm] > oldestTimestampIncludesLocalStatsTelemetry()[jvm] PASSED - -MetricsStateTest[jvm] > hasLocalStatsReturnsTrueWhenLocalStatsTelemetryExists()[jvm] PASSED - -> Task :feature:wifi-provision:jvmTest - -NymeaWifiServiceTest[jvm] > provision returns Failure on non-zero response code()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > provision sends CMD_CONNECT_HIDDEN for hidden networks()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > provision maps all known error codes()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > provision sends CMD_CONNECT for visible networks()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > connect fails when BLE connection fails()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > scanNetworks sends correct BLE commands()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > provision falls back to GetConnection for IP when connect response has no payload()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > provision returns Success on response code 0()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > connect fails when BLE throws exception()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > scanNetworks uses WITH_RESPONSE write type()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > close disconnects BLE()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > connect returns device address when name is null()[jvm] PASSED - -NymeaWifiServiceTest[jvm] > provision returns Failure on exception()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > disconnect resets state to initial()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > initial state is Idle with empty data()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > connectToDevice sets error and returns to Idle on BLE connect failure()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > connectToDevice transitions to DeviceFound on success()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > connectToDevice transitions to ConnectingBle immediately()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > provisionWifi ignores blank SSID()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > connectToDevice sets error when connection throws exception()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > scanNetworks transitions to LoadingNetworks then Connected with results()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > disconnect calls BLE disconnect()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > scanNetworks reconnects if no service exists()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > scanNetworks deduplicates networks by SSID()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > provisionWifi sets Failed status on error response()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > provisionWifi transitions to Provisioning then Connected with Success()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > connectToDevice uses device address when name is null()[jvm] PASSED - -WifiProvisionViewModelTest[jvm] > provisionWifi no-ops when service is null()[jvm] PASSED - -> Task :feature:wifi-provision:allTests - -> Task :feature:node:testAndroidHostTest - -NodeListDensityTest > empty_string_falls_back_to_complete PASSED - -NodeListDensityTest > firstOrNull_returns_null_for_unknown PASSED - -NodeListDensityTest > valid_compact_string_maps_to_compact PASSED - -NodeListDensityTest > invalid_string_falls_back_to_complete PASSED - -NodeListDensityTest > valid_complete_string_maps_to_complete PASSED - -NodeListDensityTest > lowercase_does_not_match_and_falls_back PASSED - -NodeHopHistogramTest > cutoff_drops_nodes_heard_before_it PASSED - -NodeHopHistogramTest > all_unknown_gives_empty_list PASSED - -NodeHopHistogramTest > unknown_hops_are_excluded PASSED - -NodeHopHistogramTest > empty_input_gives_empty_list PASSED - -NodeHopHistogramTest > null_cutoff_keeps_everything_regardless_of_last_heard PASSED - -NodeHopHistogramTest > buckets_are_contiguous_and_preserve_middle_gaps PASSED - -CompassViewModelTest > uiState uses PDOP only positional accuracy PASSED - -CompassViewModelTest > uiState returns 180 degree angular error when distance is zero PASSED - -CompassViewModelTest > uiState handles angular error for very small distances PASSED - -CompassViewModelTest > uiState reflects target node info after start PASSED - -CompassViewModelTest > uiState falls back to precision bits positional accuracy PASSED - -CompassViewModelTest > testInitialization PASSED - -CompassViewModelTest > uiState leaves positional accuracy empty when no DOP or precision data exists PASSED - -CompassViewModelTest > uiState updates when heading and location change PASSED - -CompassViewModelTest > uiState uses HDOP only positional accuracy when VDOP is missing PASSED - -CompassViewModelTest > uiState uses HDOP and VDOP positional accuracy when PDOP is missing PASSED - -NodeManagementActionsTest > requestRemoveNode_invokes_onAfterRemove_when_user_confirms PASSED - -NodeManagementActionsTest > requestRemoveNode_success_callback_failure_is_not_reported_as_radio_rejection PASSED - -NodeManagementActionsTest > requestRemoveNode_shows_confirmation_alert PASSED - -NodeDetailViewModelTest > refreshMetadata surfaces queue rejection without throwing from view model scope PASSED - -NodeDetailViewModelTest > openRemoteAdmin surfaces local node loss and releases the in-flight guard PASSED - -NodeDetailViewModelTest > openRemoteAdmin navigates to settings when session is already active PASSED - -NodeManagementActionsTest > requestRemoveNode_local_node_loss_keeps_success_callback_pending_and_surfaces_feedback PASSED - -NodeManagementActionsTest > requestRemoveNode_queue_rejection_keeps_success_callback_pending_and_surfaces_feedback PASSED - -NodeDetailViewModelTest > uiState emits updates from useCase PASSED - -NodeDetailViewModelTest > openRemoteAdmin surfaces queue rejection and releases the in-flight guard PASSED - -NodeDetailViewModelTest > openRemoteAdmin shows disconnected snackbar when radio is disconnected PASSED - -NodeDetailViewModelTest > handleNodeMenuAction delegates to nodeManagementActions for Mute PASSED - -NodeDetailViewModelTest > openRemoteAdmin shows timeout snackbar when node is unreachable PASSED - -NodeDetailViewModelTest > testInitialization PASSED - -NodeDetailViewModelTest > handleNodeMenuAction delegates to nodeRequestActions for Traceroute PASSED - -StatusMessageActionGateTest > older firmware does not offer the action PASSED - -StatusMessageActionGateTest > a disconnected radio does not offer the action PASSED - -StatusMessageActionGateTest > a node list with no local node offers the action nowhere PASSED - -StatusMessageActionGateTest > another node never offers the action PASSED - -StatusMessageActionGateTest > firmware metadata we have not read yet does not offer the action PASSED - -StatusMessageActionGateTest > firmware that compiled the module out does not offer the action PASSED - -StatusMessageActionGateTest > the local node offers the action while connected on 2 8 firmware PASSED - -EnvironmentMetricsStateTest > environmentMetricsForGraphing_correctly_calculates_times PASSED - -EnvironmentMetricsStateTest > environmentMetricsForGraphing_handles_valid_zero_temperatures PASSED - -PmStatusFaultTest > a clean register decodes to no faults PASSED - -PmStatusFaultTest > bits no sensor documents are kept as unknown PASSED - -PmStatusFaultTest > the two CO2 error bits report one fault PASSED - -PmStatusFaultTest > each documented bit decodes to its fault in bit order PASSED - -PmStatusFaultTest > only the fan speed bit is a warning PASSED - -PmStatusFaultTest > bit 31 renders as an unsigned register PASSED - -MetricsStateTest > oldestTimestampIncludesLocalStatsTelemetry PASSED - -MetricsStateTest > hasLocalStatsReturnsTrueWhenLocalStatsTelemetryExists PASSED - -AirQualityMetricsTest > getValue for AQI plots a zero AQI instead of suppressing it PASSED - -AirQualityMetricsTest > getValue returns null for every series when there are no air quality metrics PASSED - -AirQualityMetricsTest > getValue for AQI comes from the sample derived value rather than the telemetry PASSED - -AirQualityMetricsTest > getValue plots a present-zero reading instead of suppressing it PASSED - -AirQualityMetricsTest > getValue returns null for an absent field so a partial-sensor node does not chart spurious series PASSED - -AirQualityMetricsTest > metricsWithData keeps a series once it has any reading in the frame PASSED - -AirQualityMetricsTest > metricsWithData drops selected series that have no reading so the legend is not ever-present PASSED - -AirQualityMetricsTest > withNowCastAqi skips samples whose PM2_5 is absent without shifting the others' values PASSED - -AirQualityMetricsTest > withNowCastAqi returns samples ascending by time regardless of input order PASSED - -AirQualityMetricsTest > withNowCastAqi leaves the earliest sample without an AQI and fills in later ones PASSED - -AirQualityMetricsTest > getValue returns present non-zero readings PASSED - -AirQualityMetricsTest > withNowCastAqi gives a CO2-only node no AQI so the series is never offered PASSED - -FormatBytesTest > large_values PASSED - -FormatBytesTest > custom_decimal_places_one PASSED - -FormatBytesTest > default_rounding_keeps_two_decimal_places_without_trailing_zeroes PASSED - -FormatBytesTest > custom_decimal_places_zero PASSED - -FormatBytesTest > zero_bytes PASSED - -FormatBytesTest > kilobytes_just_below_megabyte_boundary_round_up_without_switching_units PASSED - -FormatBytesTest > gigabyte_boundary PASSED - -FormatBytesTest > kilobyte_with_decimals PASSED - -FormatBytesTest > megabyte_with_decimals PASSED - -FormatBytesTest > gigabyte_with_decimals PASSED - -FormatBytesTest > small_byte_values PASSED - -FormatBytesTest > negative_bytes_returns_na PASSED - -FormatBytesTest > megabyte_boundary PASSED - -FormatBytesTest > kilobyte_boundary PASSED - -GetFilteredNodesUseCaseTest > the signed filter keeps only nodes whose signature the radio verified PASSED - -GetFilteredNodesUseCaseTest > invoke filters out ignored nodes if showIgnored is false PASSED - -GetFilteredNodesUseCaseTest > invoke filters out infrastructure nodes if excludeInfrastructure is true PASSED - -GetFilteredNodesUseCaseTest > the unheard filter keeps an MQTT node which reads unheard permanently PASSED - -GetFilteredNodesUseCaseTest > invoke keeps MQTT nodes if excludeMqtt is false PASSED - -GetFilteredNodesUseCaseTest > the encrypted filter keeps a key on file and drops one that stopped matching PASSED - -GetFilteredNodesUseCaseTest > invoke applies repository filters and returns nodes PASSED - -GetFilteredNodesUseCaseTest > invoke filters out MQTT nodes if excludeMqtt is true PASSED - -GetFilteredNodesUseCaseTest > the unheard filter drops a node the radio can no longer reach PASSED - -DecodePaxFromLogTest > invalidRawMessage_returnsNull PASSED - -DecodePaxFromLogTest > base64Fallback_validPayload_decoded PASSED - -DecodePaxFromLogTest > binaryProto_wantResponse_returnsNull PASSED - -DecodePaxFromLogTest > emptyLog_returnsNull PASSED - -DecodePaxFromLogTest > binaryProto_allZeroValues_returnsNull PASSED - -DecodePaxFromLogTest > binaryProto_validPaxcount_decoded PASSED - -DecodePaxFromLogTest > binaryProto_wrongPortNum_returnsNull PASSED - -HardwareModelSafeNumberTest > unset_returnsZero PASSED - -HardwareModelSafeNumberTest > knownModel_returnsValue PASSED - -HardwareModelSafeNumberTest > defaultFallback_isNegativeOne PASSED - -HardwareModelSafeNumberTest > customFallback_used PASSED - -PressureAxisRangeTest > singleReadingStillGetsTheStandardWindow PASSED - -PressureAxisRangeTest > nearSeaLevelUsesStandardWindow PASSED - -PressureAxisRangeTest > highAltitudeWindowSlidesDownToContainReadings PASSED - -PressureAxisRangeTest > spanWiderThanWindowFallsBackToExactRange PASSED - -PressureAxisRangeTest > windowIsAlwaysTheSameWidthWhenNotOverflowing PASSED - -PressureAxisRangeTest > highPressureWindowSlidesUpToContainReadings PASSED - -TimeFrameTest > twentyFourHours_notAvailableWhenDataYoungerThan24h PASSED - -TimeFrameTest > sevenDays_thresholdIsNowMinus604800 PASSED - -TimeFrameTest > twentyFourHours_thresholdIsNowMinus86400 PASSED - -TimeFrameTest > allTime_thresholdIsZero PASSED - -TimeFrameTest > oneMonth_thresholdIsCorrect PASSED - -TimeFrameTest > oneHour_thresholdIsNowMinus3600 PASSED - -TimeFrameTest > twoWeeks_thresholdIsCorrect PASSED - -TimeFrameTest > sevenDays_notAvailableForTwoDayOldData PASSED - -TimeFrameTest > isAvailable_justUnderBoundary_returnsFalse PASSED - -TimeFrameTest > oneHour_alwaysAvailable PASSED - -TimeFrameTest > allTime_alwaysAvailable PASSED - -TimeFrameTest > isAvailable_exactBoundary_returnsTrue PASSED - -TimeFrameTest > sevenDays_availableForEightDayOldData PASSED - -TimeFrameTest > twentyFourHours_availableWhenDataOlderThan24h PASSED - -SignalLogKeyTest > a negative packet id is not conflated with its positive twin PASSED - -SignalLogKeyTest > entries are ordered newest first across both types PASSED - -SignalLogKeyTest > repeated packet ids still produce distinct keys PASSED - -SignalLogKeyTest > local stats and packets sharing a timestamp do not collide PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:settings:jvmTest - -MapReportingPreferenceTest[jvm] > testMapReportingPreference_showsText()[jvm] PASSED - -SettingsViewModelTest[jvm] > setTheme updates prefs()[jvm] PASSED - -SettingsViewModelTest[jvm] > startProvidingLocation and stopProvidingLocation delegate to RadioController()[jvm] PASSED - -SettingsViewModelTest[jvm] > setLocale updates prefs()[jvm] PASSED - -MapReportingPreferenceTest[jvm] > testMapReportingPreference_toggleMapReporting()[jvm] PASSED - -SettingsViewModelTest[jvm] > setDbCacheLimit updates manager()[jvm] PASSED - -SecurityConfigScreenTest[jvm] > private key is redacted for a remote node until a new one is entered()[jvm] PASSED - -SettingsViewModelTest[jvm] > saveDataCsv writes filtered export via file service()[jvm] PASSED - -SettingsViewModelTest[jvm] > showAppIntro updates prefs()[jvm] PASSED - -SettingsViewModelTest[jvm] > isOtaCapable flow works()[jvm] PASSED - -SettingsViewModelTest[jvm] > cachedDeviceCountExceeding is zero when nothing would be evicted()[jvm] PASSED - -SettingsViewModelTest[jvm] > setShowFullMessageTimestamps updates prefs()[jvm] PASSED - -SettingsViewModelTest[jvm] > test property based bounds for mesh log retention days()[jvm] PASSED - -AboutScreenTest[jvm] > license row opens the GPLv3 license()[jvm] PASSED - -SettingsViewModelTest[jvm] > saveNodeDbJson writes node database export via file service()[jvm] PASSED - -SettingsViewModelTest[jvm] > testInitialization()[jvm] PASSED - -SettingsViewModelTest[jvm] > mesh log logging setting updates prefs()[jvm] PASSED - -SettingsViewModelTest[jvm] > unlockHiddenFeatures updates state()[jvm] PASSED - -SettingsViewModelTest[jvm] > notification settings update prefs()[jvm] PASSED - -SettingsViewModelTest[jvm] > provideLocation flows based on current node()[jvm] PASSED - -SettingsViewModelTest[jvm] > setProvideLocation updates prefs for current node()[jvm] PASSED - -SettingsViewModelTest[jvm] > cachedDeviceCountExceeding counts devices past the new limit()[jvm] PASSED - -SettingsViewModelTest[jvm] > isConnected flow emits updates using Turbine()[jvm] PASSED - -ChannelViewModelTest[jvm] > txEnabled updates config via radioController()[jvm] PASSED - -LogcatTest[jvm] > filterLogcat applies case-insensitive query()[jvm] PASSED - -LogcatTest[jvm] > logcatLineLevel reads the priority letter()[jvm] PASSED - -LogcatTest[jvm] > filterLogcat hides deselected known levels but keeps unknown and continuation lines()[jvm] PASSED - -ChannelViewModelTest[jvm] > trackShare calls analytics()[jvm] PASSED - -AboutScreenTest[jvm] > about screen displays all sections and content()[jvm] PASSED - -LogFormatterTest[jvm] > export suppresses payload hex regardless of the byte count()[jvm] PASSED - -LogFormatterTest[jvm] > export suppresses payload hex in okio's truncated form()[jvm] PASSED - -LogFormatterTest[jvm] > redactText redacts keys across lines and keeps the rest()[jvm] PASSED - -LogFormatterTest[jvm] > appendLogcat redacts sensitive keys and keeps other lines()[jvm] PASSED - -LogFormatterTest[jvm] > the per-entry copy action is sanitised like the export()[jvm] PASSED - -LogFormatterTest[jvm] > export redacts the real proto equals-and-hex payload format()[jvm] PASSED - -LogFormatterTest[jvm] > formatLogsTo formats and redacts correctly()[jvm] PASSED - -LogFormatterTest[jvm] > structured psk redaction covers okio's long and short forms()[jvm] PASSED - -SecurityConfigScreenTest[jvm] > delayed remote public key updates display and copy without recreating screen()[jvm] PASSED - -ModuleRouteTest[jvm] > every route carries its own excluded_modules bit()[jvm] PASSED - -ModuleRouteTest[jvm] > the Mesh Beacon bit hides the Mesh Beacon module and nothing else()[jvm] PASSED - -ModuleRouteTest[jvm] > a TAK role node on 2 8 firmware lists the TAK and Mesh Beacon modules()[jvm] PASSED - -ModuleRouteTest[jvm] > the TAK bit hides the TAK module and nothing else()[jvm] PASSED - -ModuleRouteTest[jvm] > the status message and traffic management bits hide no module route()[jvm] PASSED - -ModuleRouteTest[jvm] > metadata not read yet excludes nothing and leaves only the version gates()[jvm] PASSED - -ModuleRouteTest[jvm] > an older bit still hides its module()[jvm] PASSED - -UserNameFieldsTest[jvm] > the ham long name field only exists while licensed()[jvm] PASSED - -ChannelViewModelTest[jvm] > isManaged returns true when security is managed()[jvm] PASSED - -ChannelViewModelTest[jvm] > requestChannelUrl sets requestChannelSet()[jvm] PASSED - -SettingsNavigationTest[jvm] > inactive exit transition resolves the most recent active session()[jvm] PASSED - -SettingsNavigationTest[jvm] > same settings session retains its view model store()[jvm] PASSED - -SettingsNavigationTest[jvm] > inactive provider without prior settings uses a safe local fallback()[jvm] PASSED - -SettingsNavigationTest[jvm] > settings destination returns to local for a newer local root()[jvm] PASSED - -ProfileRoundTripTest[jvm] > profile export then import round trips partially populated DeviceProfile()[jvm] PASSED - -ProfileRoundTripTest[jvm] > profile export then import round trips empty DeviceProfile()[jvm] PASSED - -UserNameFieldsTest[jvm] > editing the long name keeps the call sign()[jvm] PASSED - -ProfileRoundTripTest[jvm] > profile export then import round trips representative DeviceProfile()[jvm] PASSED - -UserNameFieldsTest[jvm] > editing the call sign keeps the long name half()[jvm] PASSED - -UserNameFieldsTest[jvm] > the call sign field shows only the call sign half of a composed name()[jvm] PASSED - -UserNameFieldsTest[jvm] > clearing the long name leaves the node named after the call sign alone()[jvm] PASSED - -SettingsNavigationTest[jvm] > settings sessions distinguish inactive local and remote states()[jvm] PASSED - -SettingsNavigationTest[jvm] > leaving settings clears the active store after its exit lease ends()[jvm] PASSED - -SettingsNavigationTest[jvm] > configuration recreation keeps the active settings store()[jvm] PASSED - -SettingsNavigationTest[jvm] > direct local config route outside settings tab keeps a local session active()[jvm] PASSED - -SettingsNavigationTest[jvm] > non radio settings route outside settings tab stays inactive()[jvm] PASSED - -SettingsNavigationTest[jvm] > direct local route transition does not clear its active store between entries()[jvm] PASSED - -SettingsNavigationTest[jvm] > duplicate current route is not pushed again()[jvm] PASSED - -SettingsNavigationTest[jvm] > changing destination clears the previous store after its exit lease ends()[jvm] PASSED - -SettingsNavigationTest[jvm] > settings destination follows the latest settings root through submenus()[jvm] PASSED - -SettingsNavigationTest[jvm] > the local node status message shortcut keeps a local session active()[jvm] PASSED - -SettingsNavigationTest[jvm] > explicit entry session wins over the previous active destination()[jvm] PASSED - -UserNameFieldsTest[jvm] > the widest pair the proto can carry composes whole()[jvm] PASSED - -EditDeviceProfileDialogTest[jvm] > testEditDeviceProfileDialog_showsDialogTitle()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > clearMqttProbeStatus resets probe state()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > routing error stops remaining manual channel writes()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > routing error clears request timeout without replacing the specific failure()[jvm] PASSED - -EditDeviceProfileDialogTest[jvm] > testEditDeviceProfileDialog_showsCancelAndSaveButtons()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setModuleConfig merges mesh_beacon into state before the radio answers()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > toggleAnalyticsAllowed calls prefs()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > ensureLoadingForRemote is no-op for local session before node identity resolves()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > local destination exposes its PlatformIO target()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > ModuleConfigResponse carrying mesh_beacon is merged and survives a later response without it()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setOwner calls useCase()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > updateChannels writes changed channels sequentially in index order()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > saveUserConfig never sends setHamMode to a remote node()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > installProfile calls useCase()[jvm] PASSED - -EditDeviceProfileDialogTest[jvm] > testEditDeviceProfileDialog_addChannels()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > processPacketResponse updates state on various results()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > remote write keeps max retransmit terminal()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > remote destination never inherits gateway PlatformIO target()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > ensureLoadingForRemote sets loading state for remote nodes()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > local reboot-applying config save opens the restart window()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setFixedPosition calls useCase()[jvm] PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:node:testAndroidHostTest - -CommonNodeRequestActionsTest > missing local identity uses the same localized request feedback PASSED - -CommonNodeRequestActionsTest > neighbor queue rejection is surfaced without starting the request timer PASSED - -CommonNodeRequestActionsTest > traceroute queue rejection is surfaced without starting the request timer PASSED - -NodeListViewModelTest > connectionState reflects serviceRepository state PASSED - -NodeListViewModelTest > nodeList emits updates when repository changes PASSED - -NodeListViewModelTest > nodesUiState follows a mid-session units change PASSED - -NodeListViewModelTest > isActive is true when unknown nodes are opted out PASSED - -NodeListViewModelTest > isActive is false for the default filter PASSED - -NodeListViewModelTest > testInitialization PASSED - -EnvironmentChartUnitsTest > temperatureIsNotConvertedHere PASSED - -EnvironmentChartUnitsTest > temperatureSuffixFollowsFahrenheitSetting PASSED - -EnvironmentChartUnitsTest > missingWindSpeedStaysNull PASSED - -EnvironmentChartUnitsTest > windSpeedZeroIsPreserved PASSED - -EnvironmentChartUnitsTest > windSpeedSuffixFollowsMeasurementSystem PASSED - -EnvironmentChartUnitsTest > windSpeedMetricIsConvertedToKph PASSED - -EnvironmentChartUnitsTest > windSpeedImperialIsConvertedToMph PASSED - -EnvironmentChartUnitsTest > sharedAxisMetricsHaveNoSuffix PASSED - -EnvironmentChartUnitsTest > adcVoltageSuffixIsVoltsRegardlessOfMeasurementSystem PASSED - -EnvironmentChartUnitsTest > adcVoltageIsNotConverted PASSED - -HostMetricsTest > buildHostMetricsChartData_filters_missing_and_non_positive_values PASSED - -HostMetricsTest > buildHostMetricsChartData_returns_empty_series_when_no_plottable_metrics_exist PASSED - -TracerouteChartTest > matchesRequestToResult PASSED - -TracerouteChartTest > timeSeconds_truncatesSubSecondPrecision PASSED - -TracerouteChartTest > computesForwardHops PASSED - -TracerouteChartTest > emptyInputs_returnsEmpty PASSED - -TracerouteChartTest > noMatchingResult_yieldsNulls PASSED - -TracerouteChartTest > emptyRouteBack_yieldsNullReturnHops PASSED - -TracerouteChartTest > directRoute_yieldsZeroHops PASSED - -TracerouteChartTest > computesRoundTripSeconds PASSED - -TracerouteChartTest > multipleRequests_preservesOrder PASSED - -TracerouteChartTest > returnHops_computedWhenRouteBackAvailable PASSED - -HandleNodeActionTest > remove action delegates to viewModel and does not navigate up immediately PASSED - -HandleNodeActionTest > direct message to a keyless node with a thread opens that thread PASSED - -HandleNodeActionTest > direct message to a keyed node uses the computed route rather than an old thread PASSED - -RemovableUnheardNodesTest > offersANodeNotHeardOnTheConfigInForceNow PASSED - -RemovableUnheardNodesTest > neverOffersTheConnectedRadio PASSED - -RemovableUnheardNodesTest > offersNothingUntilTheLocalNodeNumberIsKnown PASSED - -RemovableUnheardNodesTest > neverOffersAFavourite PASSED - -RemovableUnheardNodesTest > neverOffersAnMqttNode PASSED - -EnvironmentMetricsForGraphingTest > soilMoisture_validValueIncluded PASSED - -EnvironmentMetricsForGraphingTest > emptyMetrics_returnsDefaultGraphingData PASSED - -EnvironmentMetricsForGraphingTest > oneWireChannels_plotIndependently PASSED - -EnvironmentMetricsForGraphingTest > iaq_intMinValueFilteredOut PASSED - -EnvironmentMetricsForGraphingTest > oneWireChannels_convertToFahrenheit PASSED - -EnvironmentMetricsForGraphingTest > barometricPressure_doesNotAffectRightAxis PASSED - -EnvironmentMetricsForGraphingTest > nanPressure_filteredOut PASSED - -EnvironmentMetricsForGraphingTest > mixedValidAndNanValues_onlyValidEnvironmentMetricsAreCharted PASSED - -EnvironmentMetricsForGraphingTest > adcChannel_zeroIsPlotted PASSED - -EnvironmentMetricsForGraphingTest > useFahrenheit_convertsSoilTemperature PASSED - -EnvironmentMetricsForGraphingTest > allNanValues_returnDefaultAxesAndNoPlots PASSED - -EnvironmentMetricsForGraphingTest > adcChannels_areNotUnitConverted PASSED - -EnvironmentMetricsForGraphingTest > nanHumidity_filteredOut PASSED - -EnvironmentMetricsForGraphingTest > iaq_validValueIncluded PASSED - -EnvironmentMetricsForGraphingTest > multipleMetrics_rightAxisMinMaxSpansAll PASSED - -EnvironmentMetricsForGraphingTest > windSpeed_plotted PASSED - -EnvironmentMetricsForGraphingTest > radiation_positiveValuesOnly PASSED - -EnvironmentMetricsForGraphingTest > humidity_nonZeroIncluded PASSED - -EnvironmentMetricsForGraphingTest > humidity_zeroFilteredOut PASSED - -EnvironmentMetricsForGraphingTest > nanTemperature_filteredOut PASSED - -EnvironmentMetricsForGraphingTest > soilMoisture_intMinValueFilteredOut PASSED - -EnvironmentMetricsForGraphingTest > adcChannels_plotIndependently PASSED - -EnvironmentMetricsForGraphingTest > useFahrenheit_convertsTemperatureMinMax PASSED - -EnvironmentMetricsForGraphingTest > gasResistance_notPlottedByGraphingFunction PASSED - -EnvironmentMetricsForGraphingTest > uvLux_plotted PASSED - -EnvironmentMetricsForGraphingTest > adcChannel_nanFilteredOut PASSED - -EnvironmentMetricsForGraphingTest > lux_plotted PASSED - -EnvironmentMetricsForGraphingTest > barometricPressure_onLeftAxis PASSED - -EnvironmentMetricsForGraphingTest > oneWireChannel_zeroIsPlotted PASSED - -MetricsViewModelTest > savePositionCSV writes correct data PASSED - -MetricsViewModelTest > clearLocalStats deletes local stats logs for route node PASSED - -MetricsViewModelTest > saveLocalStatsCSV writes only provided visible data PASSED - -MetricsViewModelTest > state reflects updates from getNodeDetailsUseCase PASSED - -MetricsViewModelTest > saveAirQualityMetricsCSV exports the raw pm status register PASSED - -MetricsViewModelTest > saveEnvironmentMetricsCSV writes correct data PASSED - -MetricsViewModelTest > saveSignalMetricsCSV writes correct data PASSED - -MetricsViewModelTest > testInitialization PASSED - -MetricsViewModelTest > saveDeviceMetricsCSV writes correct data PASSED - -WARNING: A restricted method in java.lang.System has been called -WARNING: java.lang.System::load has been called by org.jetbrains.skiko.LibraryLoader in an unnamed module (file:/Users/james/nixtastic/.cache/gradle/caches/modules-2/files-2.1/org.jetbrains.skiko/skiko-awt/0.150.1/e03fd8140c0e331c3c7018b00a9710ec98d78fc1/skiko-awt-0.150.1.jar) -WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module -WARNING: Restricted methods will be blocked in a future release unless native access is enabled - - -> Task :feature:node:testAndroidHostTest - -MetricsViewModelTest > availableTimeFrames filters based on oldest data PASSED - -MetricsViewModelTest > savePowerMetricsCSV writes correct data PASSED - -CanDirectMessageTest > allowsMessagableNodeWithAKey PASSED - -CanDirectMessageTest > hidesTheActionWhenThereIsNoThreadToOpen PASSED - -CanDirectMessageTest > stillOffersTheActionWhenAThreadAlreadyExists PASSED - -CanDirectMessageTest > blocksUnmessagableRoleEvenWithAKey PASSED - -CanDirectMessageTest > blocksUnmessagableNodeEvenWithAKey PASSED - -CanDirectMessageTest > blocksNodeWithNoKeyOnFile PASSED - -> Task :feature:settings:jvmTest - -RadioConfigViewModelTest[jvm] > probeMqttConnection converts thrown exception to other status()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > routing error cancels manual channel batches queued behind the active batch()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > late remote read routing ack cannot complete a newer save()[jvm] PASSED - -EditDeviceProfileDialogTest[jvm] > testEditDeviceProfileDialog_clickCancelButton()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconPresetConstraint_mapPresent_usesFirmwareGroup()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > stampBeaconConfigForSave_defaultTargetRow_nullFieldsSurviveButRegionIsStamped()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconOfferChannelIndex_noRadioChannelMatches_returnsNull()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > MESH_BEACON remote read completes only after all three responses land()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconIntervalFallback_nonstandardStoredValue_isKeptVisible()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectableBeaconChannels_blankPrimaryKept()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > stampBeaconConfigForSave_customParams_preservesStoredBroadcastFieldsVerbatim()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > seedBeaconTargets_emptyStoredList_seedsOneDefaultRow()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > stampBeaconConfigForSave_stampsRegionAndPresetOnConfigAndTargets()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectBeaconTargetChannel_defaultSentinel_clearsChannelAndLeavesPresetUntouched()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconOfferChannelIndex_nullChannel_returnsNull()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > stampBeaconConfigForSave_onlyNameAndPskCarryOverToOfferChannel()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectableBeaconChannels_nameOnlySecondaryKept()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectableBeaconChannels_pskOnlySecondaryKept()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconOfferChannelIndex_offerMatchesOnlyAPlaceholderSlot_returnsNull()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > initialBeaconFormState_nonEmptyStoredConfig_isUnchanged()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > seedBeaconTargets_nonEmptyStoredList_isUnchanged()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > initialBeaconFormState_emptyStoredConfig_seedsFormTargetsThroughTheProductionPath()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconIntervalFallback_storedValueMatchesAllowed_returnsNull()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > stampBeaconConfigForSave_alreadySetOfferChannel_isKeptEvenIfStale()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectableBeaconChannels_placeholderSecondaryExcluded_followingRealSlotKeepsTrueIndex()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > removeBeaconTarget_removingOneOfSeveral_dropsOnlyThatRow()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconPresetConstraint_mapPresentButRegionMissing_fallsBackToConservative()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectBeaconTargetChannel_noPresetYet_preselectsCurrentPreset()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconPresetConstraint_noMap_usesConservativeSet()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconOfferChannelIndex_matchByNameAndPsk_returnsIndex()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectableBeaconChannels_oneBytePskCleartextSentinelSecondaryKept()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > beaconIntervalFallback_neverConfiguredSentinelZero_isKeptVisible()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > stampBeaconConfigForSave_untouchedOfferChannel_defaultsToPrimary()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectBeaconTargetChannel_defaultSentinelWithConcretePreset_presetUnchanged()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > selectBeaconTargetChannel_presetAlreadyChosen_isNotOverwritten()[jvm] PASSED - -MeshBeaconConfigPolicyTest[jvm] > removeBeaconTarget_removingTheOnlyRow_reseedsADefaultRowInstead()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > saveUserConfig routes licensed save to setOwner when myNodeInfo is absent()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > aborted manual batch cancels batch timeout before packet id reuse()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > probeMqttConnection updates status for success()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > late owner read is retained when the user route reads only the owner()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > applyManualChannelUpdatePlan invokes onInterrupted when writeChannel fails mid-plan()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > remote config save does not open the restart window()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > NODEDB_RESET marks an expected local restart()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > Admin actions call correct useCases()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > newer save supersedes a retained read and its retry()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > localIsLicensed tracks the destination node's is_licensed flag()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > destNum from SavedStateHandle resolves destNode()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > a session opened on the connected node by number follows it after the renumber()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setResponseStateLoading for various routes calls correct useCases()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setMqttProxyActive true restarts proxy using current device module config()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > probeMqttConnection updates status for timeout()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setConfig calls useCase()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > backupSecurityKeys persists real keys()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > LoRa setConfig is not applied optimistically and issues no re-read()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setPreserveFavorites updates state()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > MESH_BEACON route skips the module get on firmware without the module but still reads LoRa and channel 0()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > backupSecurityKeys refuses to persist empty keys()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > USER route skips the status message config when the firmware compiled the module out()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > applyManualChannelUpdatePlan paces writes except after final channel()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > route read fan-out flags match multi-request loaders()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > updateChannels does not start manual batch while another radio request is pending()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > MESH_BEACON route on a remote node reads the beacon module config plus LoRa config and channel 0()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > loadConfigRoute shows progress overlay for remote settings refresh()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setCannedMessages calls useCase()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > removeFixedPosition calls useCase()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > loraRegionPresetMapFlow populates state()[jvm] PASSED - -LicensedModeSettingTest[jvm] > confirmed enable applies the change()[jvm] PASSED - -StatusMessageFocusTest[jvm] > arriving without the shortcut leaves the field alone()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > remote save acked by an unexpected node neither re-handshakes nor completes()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > aborted manual batch preserves unrelated pending request()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > reboot-applying save resolves to restarting-success when the node drops()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > saveUserConfig splits a composed ham name into call sign and long name()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > remote read accepts response after max retransmit before request deadline()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > updateChannels calls useCase for each changed channel()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > USER route reads the status message config on capable firmware()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setCannedMessages retires the pending route read without stranding loading()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setResponseStateLoading for REBOOT calls useCase after config response()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setRingtone calls useCase()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setResponseStateLoading for FACTORY_RESET calls useCase after config response()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > loadConfigRoute hides progress overlay for local settings refresh()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > manual channel batch is not completed as success by a stale restart window()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > local destination updates its PlatformIO target when identity is unchanged()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > restoreSecurityKeys pushes decoded config to the device on success()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > updateChannels serializes overlapping channel saves()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > remote read surfaces max retransmit at deadline and accepts later response()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > registerRequestId timeout clears request and sets error()[jvm] PASSED - -StatusMessageFocusTest[jvm] > the field is focused once the capability read lands()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > saveUserConfig routes subsequent licensed saves to setOwner()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setMqttProxyActive false stops the proxy without touching device config()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > saveUserConfig sends setHamMode for licensed local node()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > local save acked by a renumbered radio re-runs the handshake and completes the save()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setModuleConfig calls useCase()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > processPacketResponse updates state on metadata result()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > restoreSecurityKeys is a no-op when no backup exists()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setRingtone retires the pending route read without stranding loading()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > ensureLoadingForRemote is no-op when already loading()[jvm] PASSED - -LicensedModeSettingTest[jvm] > connection loss dismisses confirmation without changing state()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > updateChannels reconciles applied channel writes when ordered write fails()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > setMqttProxyActive true is a no-op start when device MQTT is disabled()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > late remote read clears its deadline error without a retry()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > installProfile surfaces malformed channel URL in snackbar()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > USER route skips the status message config on firmware without the module()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > saveUserConfig sends setOwner for unlicensed user()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > updateChannels waits for all ordered writes before success()[jvm] PASSED - -RadioConfigViewModelTest[jvm] > toggleHomoglyphCharactersEncodingEnabled calls prefs()[jvm] PASSED - -ChannelConfigScreenTest[jvm] > replaceAll clears committed channel psk generation eligibility()[jvm] PASSED - -ChannelConfigScreenTest[jvm] > move backward shifts element to lower index()[jvm] PASSED - -ChannelConfigScreenTest[jvm] > psk edit state round-trips through saveable flags for all boolean combinations()[jvm] PASSED - -ChannelConfigScreenTest[jvm] > move forward shifts element to higher index()[jvm] PASSED - -StatusMessageFocusTest[jvm] > the field is focused when the capability is known from the first frame()[jvm] PASSED - -ChannelConfigScreenTest[jvm] > replaceAll clears and refills with given size and value()[jvm] PASSED - -ChannelConfigScreenTest[jvm] > replaceWith clears and refills with committed values()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > lr1121HardwareModel_cannotBeUnlockedByConflictingTarget()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > lr1121Target_excludes1600AndRetainsInvalidPersistedValue()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > provenSx128xOnlyTargets_include1600()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > mixedHardwareModel_cannotBeUnlockedByConflictingTarget()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > unknownLora24Targets_useConservativeHighBandOptions()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > lora24ProtobufDefault_usesFirmwareDefaultBandwidth()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > subGhzRegion_remainsUnconstrained()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > invalidLora24SubGhzValue_mustBeReplaced()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > mixedTloraT3S3_usesConservativeHighBandOptions()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > canonicalCodes_haveFirmwareDisplayBandwidths()[jvm] PASSED - -LoRaBandwidthPolicyTest[jvm] > unsetRegion_preservesProtobufDefault()[jvm] PASSED - -LicensedModeSettingTest[jvm] > disabling licensed mode applies immediately without confirmation()[jvm] PASSED - -LicensedModeSettingTest[jvm] > non-signing firmware shows legacy plaintext copy()[jvm] PASSED - -StatusMessageFocusTest[jvm] > focus is not stolen back after the operator moves on()[jvm] PASSED - -LicensedModeSettingTest[jvm] > signing firmware shows authenticated plaintext and migration copy()[jvm] PASSED - -SettingsSearchCatalogTest[jvm] > everyDeclaredEnumStillHasValuesInTheSchema()[jvm] PASSED - -SettingsSearchCatalogTest[jvm] > everyLabelledMessageIsEitherSearchableOrExcused()[jvm] PASSED - -SettingsSearchCatalogTest[jvm] > everyConfigurationScreenIsReachableFromSearch()[jvm] PASSED - -SettingsSearchCatalogTest[jvm] > noDescriptionIsOfferedAsASetting()[jvm] PASSED - -SettingsSearchCatalogTest[jvm] > noEnumValueIsOfferedAsASetting()[jvm] PASSED - -LicensedModeSettingTest[jvm] > enabling licensed mode requires confirmation()[jvm] PASSED - -LicensedModeSettingTest[jvm] > unknown capability shows legacy plaintext copy()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > emptyChannelList_offerPickerShowsDisabledPlaceholderRow()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > emptyStoredConfig_productionSeedPathRendersExactlyOneRow()[jvm] PASSED - -> Task :feature:node:jvmTest - -NodeDetailCompassLifecycleTest[jvm] > compassSelectionFollowsScreenLifecycleAndDismissal()[jvm] PASSED - -RemovableUnheardNodesTest[jvm] > offersANodeNotHeardOnTheConfigInForceNow()[jvm] PASSED - -RemovableUnheardNodesTest[jvm] > neverOffersTheConnectedRadio()[jvm] PASSED - -RemovableUnheardNodesTest[jvm] > offersNothingUntilTheLocalNodeNumberIsKnown()[jvm] PASSED - -RemovableUnheardNodesTest[jvm] > neverOffersAFavourite()[jvm] PASSED - -RemovableUnheardNodesTest[jvm] > neverOffersAnMqttNode()[jvm] PASSED - -AirQualityMetricsTest[jvm] > getValue for AQI plots a zero AQI instead of suppressing it()[jvm] PASSED - -AirQualityMetricsTest[jvm] > getValue returns null for every series when there are no air quality metrics()[jvm] PASSED - -AirQualityMetricsTest[jvm] > getValue for AQI comes from the sample derived value rather than the telemetry()[jvm] PASSED - -AirQualityMetricsTest[jvm] > getValue plots a present-zero reading instead of suppressing it()[jvm] PASSED - -AirQualityMetricsTest[jvm] > getValue returns null for an absent field so a partial-sensor node does not chart spurious series()[jvm] PASSED - -AirQualityMetricsTest[jvm] > metricsWithData keeps a series once it has any reading in the frame()[jvm] PASSED - -AirQualityMetricsTest[jvm] > metricsWithData drops selected series that have no reading so the legend is not ever-present()[jvm] PASSED - -AirQualityMetricsTest[jvm] > withNowCastAqi skips samples whose PM2_5 is absent without shifting the others' values()[jvm] PASSED - -AirQualityMetricsTest[jvm] > withNowCastAqi returns samples ascending by time regardless of input order()[jvm] PASSED - -AirQualityMetricsTest[jvm] > withNowCastAqi leaves the earliest sample without an AQI and fills in later ones()[jvm] PASSED - -AirQualityMetricsTest[jvm] > getValue returns present non-zero readings()[jvm] PASSED - -AirQualityMetricsTest[jvm] > withNowCastAqi gives a CO2-only node no AQI so the series is never offered()[jvm] PASSED - -HardwareModelSafeNumberTest[jvm] > unset_returnsZero()[jvm] PASSED - -HardwareModelSafeNumberTest[jvm] > knownModel_returnsValue()[jvm] PASSED - -HardwareModelSafeNumberTest[jvm] > defaultFallback_isNegativeOne()[jvm] PASSED - -HardwareModelSafeNumberTest[jvm] > customFallback_used()[jvm] PASSED - -PressureAxisRangeTest[jvm] > singleReadingStillGetsTheStandardWindow()[jvm] PASSED - -PressureAxisRangeTest[jvm] > nearSeaLevelUsesStandardWindow()[jvm] PASSED - -PressureAxisRangeTest[jvm] > highAltitudeWindowSlidesDownToContainReadings()[jvm] PASSED - -PressureAxisRangeTest[jvm] > spanWiderThanWindowFallsBackToExactRange()[jvm] PASSED - -PressureAxisRangeTest[jvm] > windowIsAlwaysTheSameWidthWhenNotOverflowing()[jvm] PASSED - -PressureAxisRangeTest[jvm] > highPressureWindowSlidesUpToContainReadings()[jvm] PASSED - -TimeFrameTest[jvm] > twentyFourHours_notAvailableWhenDataYoungerThan24h()[jvm] PASSED - -TimeFrameTest[jvm] > sevenDays_thresholdIsNowMinus604800()[jvm] PASSED - -TimeFrameTest[jvm] > twentyFourHours_thresholdIsNowMinus86400()[jvm] PASSED - -TimeFrameTest[jvm] > allTime_thresholdIsZero()[jvm] PASSED - -TimeFrameTest[jvm] > oneMonth_thresholdIsCorrect()[jvm] PASSED - -TimeFrameTest[jvm] > oneHour_thresholdIsNowMinus3600()[jvm] PASSED - -TimeFrameTest[jvm] > twoWeeks_thresholdIsCorrect()[jvm] PASSED - -TimeFrameTest[jvm] > sevenDays_notAvailableForTwoDayOldData()[jvm] PASSED - -TimeFrameTest[jvm] > isAvailable_justUnderBoundary_returnsFalse()[jvm] PASSED - -TimeFrameTest[jvm] > oneHour_alwaysAvailable()[jvm] PASSED - -TimeFrameTest[jvm] > allTime_alwaysAvailable()[jvm] PASSED - -TimeFrameTest[jvm] > isAvailable_exactBoundary_returnsTrue()[jvm] PASSED - -TimeFrameTest[jvm] > sevenDays_availableForEightDayOldData()[jvm] PASSED - -TimeFrameTest[jvm] > twentyFourHours_availableWhenDataOlderThan24h()[jvm] PASSED - -> Task :feature:node:allTests - -> Task :feature:settings:jvmTest - -DebugSearchTest[jvm] > debugActiveFilters_clearAllFilters_removesFilters()[jvm] PASSED - -MqttTlsPreferenceTest[jvm] > custom broker turns TLS on and off without interference()[jvm] PASSED - -MqttTlsPreferenceTest[jvm] > public broker explains the phone-relay TLS upgrade()[jvm] PASSED - -MqttTlsPreferenceTest[jvm] > a disconnected radio leaves the switch untouchable but still truthful()[jvm] PASSED - -MqttTlsPreferenceTest[jvm] > public broker with TLS off shows the switch off and settable - stored config is the truth()[jvm] PASSED - -MqttTlsPreferenceTest[jvm] > stored TLS on shows the switch on()[jvm] PASSED - -DebugSearchTest[jvm] > debugSearchBar_showsPlaceholder()[jvm] PASSED - -MqttTlsPreferenceTest[jvm] > custom broker shows no phone-relay note()[jvm] PASSED - -MqttTlsPreferenceTest[jvm] > explicit public broker address with TLS off shows the switch off()[jvm] PASSED - -DebugSearchTest[jvm] > debugFilterBar_showsFilterButtonAndMenu()[jvm] PASSED - -TAKConfigPermissionDeniedTest[jvm] > permission granted does not disable TAK server()[jvm] PASSED - -TAKConfigPermissionDeniedTest[jvm] > permission denied when already disabled is no-op()[jvm] PASSED - -TAKConfigPermissionDeniedTest[jvm] > permission denied disables TAK server()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > falls back to the short name when sanitizing empties the long name()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > falls back to the short name when the long name is missing or blank()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > falls back to a placeholder when neither name is usable()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > replaces characters a storage provider would mangle()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > drops a supplementary-plane emoji()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > caps an over-long name without leaving a trailing separator()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > keeps letters and digits of any script()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > prefers the long name over the short name()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > collapses a run of unsafe characters into one separator()[jvm] PASSED - -DeviceProfileExportFileNameTest[jvm] > keeps a supplementary-plane letter()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > requiredOfferedChannel_defaultsToPrimaryAndStampsRegionAndPresetOnSave()[jvm] PASSED - -DebugSearchTest[jvm] > debugFilterBar_addCustomFilter_displaysActiveFilter()[jvm] PASSED - -DebugSearchTest[jvm] > debugSearchBar_searchFor_showsArrowsClearAndValues()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > customParamsRadio_emptyChannelListListenOnlyEdit_saveButtonEnabled()[jvm] PASSED - -DebugSearchTest[jvm] > debugSearchBar_showsClearButtonWhenTextEntered()[jvm] PASSED - -FilterSettingsViewModelTest[jvm] > setFilterEnabled_updates_prefs_and_state()[jvm] PASSED - -FilterSettingsViewModelTest[jvm] > removeFilterWord_updates_prefs_and_rebuilds_patterns()[jvm] PASSED - -FilterSettingsViewModelTest[jvm] > addFilterWord_updates_prefs_and_rebuilds_patterns()[jvm] PASSED - -ChannelScreenTest[jvm] > channel share state defaults to a replace URL()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > broadcastTargetRow_selectingDefaultPreset_clearsPresetAndLeavesChannelUntouched()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > broadcastTargetRow_selectingDefaultChannel_clearsChannelIndexAndLeavesPresetUntouched()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > customParamsRadio_storedBroadcastOn_sectionsVisibleButDisabledAndToggleCanSwitchOff()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > removingTheLastTargetRow_replacesItWithAGenuineDefaultRow()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > regionUnset_showsBlockedMessageInsteadOfEditor()[jvm] PASSED - -MeshBeaconConfigUiTest[jvm] > customParamsRadio_storedBroadcastOff_toggleDisabledAndSectionsHidden()[jvm] PASSED - -SettingsSearchMatcherTest[jvm] > theScreenNameIsMatchedSoAControlIsFoundByItsScreen()[jvm] PASSED - -SettingsSearchMatcherTest[jvm] > matchingFoldsCase()[jvm] PASSED - -SettingsSearchMatcherTest[jvm] > equalScoresOrderByNameSoResultsDoNotShuffle()[jvm] PASSED - -SettingsSearchMatcherTest[jvm] > aNameAndExplanationHitOutranksANameHitAlone()[jvm] PASSED - -SettingsSearchMatcherTest[jvm] > blankQueryMatchesNothing()[jvm] PASSED - -SettingsSearchMatcherTest[jvm] > anExactNameOutranksAPrefixWhichOutranksAMentionInTheExplanation()[jvm] PASSED - -LoRaBandwidthUiTest[jvm] > invalidPersistedValues_explainWhyAndCannotSendUntilReplaced()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > confirmed strict selection updates policy()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > unsupported firmware cannot open selector()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > disconnected supported device cannot open selector()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > balanced selection updates the device config field()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > strict selection requires confirmation()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > selecting current strict policy does not prompt again()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > strict summary covers all authenticated mesh packets()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > unknown capability keeps current policy summary while disabled()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > support loss dismisses strict confirmation without changing policy()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > protobuf default is compatible()[jvm] PASSED - -PacketAuthenticitySettingTest[jvm] > connection loss dismisses strict confirmation without changing policy()[jvm] PASSED - -TakServerStatusTest[jvm] > unsupported platform and inactive service report their distinct states()[jvm] PASSED - -TakServerStatusTest[jvm] > enabled server reports starting until it listens()[jvm] PASSED - -TakServerStatusTest[jvm] > stopped server ignores stale client count()[jvm] PASSED - -TakServerStatusTest[jvm] > enabled server reports startup failure()[jvm] PASSED - -TakServerStatusTest[jvm] > listening server distinguishes waiting and connected clients()[jvm] PASSED - -TakServerStatusTest[jvm] > disabled server is off()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > fractionalBounds_roundInward()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > aOneSidedBound_isUnbounded()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > ambientLighting_readsItsBoundsFromTheRegistry()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > boundsBeyondTheIntDomain_areUnbounded()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > spreadFactor_readsItsBoundsFromTheRegistry()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > aMaxAboveIntMax_clampsInsteadOfSaturatingToAPoint()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > hopLimit_readsItsBoundsFromTheRegistry()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > unit_isCarriedAlongsideTheBounds()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > aFieldWithoutBounds_isUnbounded()[jvm] PASSED - -FieldMetadataBoundsTest[jvm] > companionAccessor_isTheRegistryEntry()[jvm] PASSED - -> Task :feature:settings:allTests - -[Incubating] Problems report is available at: file:///Users/james/nixtastic/android/.claude/worktrees/feat-search-m3-expressive/build/reports/problems/problems-report.html - -BUILD SUCCESSFUL in 10m 4s -2040 actionable tasks: 1532 executed, 272 from cache, 236 up-to-date -Configuration cache entry stored.