name: "Wire anchor watch state to map overlay" description: "LocationService.anchorWatchState is collected in MainActivity but only updates SafetyFragment text — MapHandler.updateAnchorWatch() is never called, so the anchor point and radius circle never appear on the map" agent: model: "sonnet" working_dir: "/workspace/nav" instructions: | Context ------- LocationService.anchorWatchState: StateFlow (android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt, companion, line ~353) MapHandler.updateAnchorWatch(state: AnchorWatchState) is fully implemented — it shows an anchor icon and radius circle on the map, or clears them when inactive: (android-app/app/src/main/kotlin/org/terst/nav/ui/MapHandler.kt, line ~139) In MainActivity.observeDataSources(), anchorWatchState IS collected, but only to update a text field in SafetyFragment: LocationService.anchorWatchState.collect { state -> safetyFragment.updateAnchorStatus(...) } There is no call to mapHandler?.updateAnchorWatch(state) anywhere. AnchorWatchState: (android-app/app/src/main/kotlin/org/terst/nav/AnchorWatchData.kt) data class AnchorWatchState( val isActive: Boolean, val anchorLocation: Location?, val watchCircleRadiusMeters: Double, val setTimeMillis: Long ) The map style must be loaded before calling updateAnchorWatch — gate on loadedStyleFlow. Goal ---- In the existing anchorWatchState collector in observeDataSources(), add a call to mapHandler?.updateAnchorWatch(state) alongside the existing safetyFragment update. Gate the map call on the style being loaded. Step 1 — Update the existing collector --------------------------------------- In android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt, find the anchorWatchState collector in observeDataSources(): lifecycleScope.launch { LocationService.anchorWatchState.collect { state -> safetyFragment.updateAnchorStatus(if (state.isActive) "Active: ${state.watchCircleRadiusMeters}m" else "Inactive") } } Replace with: lifecycleScope.launch { LocationService.anchorWatchState.collect { state -> safetyFragment.updateAnchorStatus(if (state.isActive) "Active: ${state.watchCircleRadiusMeters}m" else "Inactive") if (loadedStyleFlow.value != null) { mapHandler?.updateAnchorWatch(state) } } } No import changes needed. Step 2 — Build -------------- cd android-app && ANDROID_HOME=/opt/android-sdk ./gradlew assembleDebug 2>&1 | tail -5 Confirm BUILD SUCCESSFUL. Step 3 — Commit and push ------------------------ git add android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt git commit -m "fix(map): wire anchor watch state to map overlay The anchorWatchState collector in observeDataSources() was only updating SafetyFragment text. Now also calls mapHandler.updateAnchorWatch(state) when the map style is loaded, showing the anchor icon and radius circle." git push github main && git push local main timeout: "15m" tags: - "map" - "anchor" - "wiring"