summaryrefslogtreecommitdiff
path: root/scripts/.claude/ct-wire-anchor-to-map.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/.claude/ct-wire-anchor-to-map.yaml')
-rw-r--r--scripts/.claude/ct-wire-anchor-to-map.yaml82
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/.claude/ct-wire-anchor-to-map.yaml b/scripts/.claude/ct-wire-anchor-to-map.yaml
new file mode 100644
index 0000000..9ef8513
--- /dev/null
+++ b/scripts/.claude/ct-wire-anchor-to-map.yaml
@@ -0,0 +1,82 @@
+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<AnchorWatchState>
+ (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"