name: "Wire tidal current state to map overlay" description: "LocationService.tidalCurrentState is emitted but never collected in MainActivity — MapHandler.updateTidalCurrents() is never called, so the tidal arrow layer is always empty" agent: model: "sonnet" working_dir: "/workspace/nav" instructions: | Context ------- LocationService exposes a public StateFlow: LocationService.tidalCurrentState: StateFlow (android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt, companion object, line ~354) MapHandler has a fully-implemented method: fun updateTidalCurrents(state: TidalCurrentState) (android-app/app/src/main/kotlin/org/terst/nav/ui/MapHandler.kt, line ~155) MainActivity.observeDataSources() (android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt) never subscribes to tidalCurrentState, so updateTidalCurrents() is never called. The tidal arrow overlay on the map is always empty regardless of what data arrives. The map style must be loaded before calling updateTidalCurrents — use loadedStyleFlow as a gate, the same way updateTrackLayer is gated (see the combine() pattern already in observeDataSources for track points). Goal ---- Subscribe to LocationService.tidalCurrentState in MainActivity.observeDataSources() and forward each emission to mapHandler?.updateTidalCurrents(state). The subscription should be gated on loadedStyleFlow being non-null (style loaded), matching the pattern used for track points. Step 1 — Add the observer ------------------------- In android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt, inside observeDataSources(), add after the existing collectors: lifecycleScope.launch { loadedStyleFlow.filterNotNull().collect { LocationService.tidalCurrentState.collect { state -> mapHandler?.updateTidalCurrents(state) } } } Or equivalently using combine(), consistent with the track pattern: lifecycleScope.launch { loadedStyleFlow.filterNotNull() .combine(LocationService.tidalCurrentState) { _, state -> state } .collect { state -> mapHandler?.updateTidalCurrents(state) } } No import changes needed — LocationService is already imported. 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 tidal current state to map overlay in MainActivity LocationService.tidalCurrentState was emitted but never collected. Subscribe in observeDataSources() gated on style load, forwarding each TidalCurrentState to mapHandler.updateTidalCurrents()." git push github main && git push local main timeout: "15m" tags: - "map" - "tidal" - "wiring"