Resolved in spikersoft-android PR #4 (merged to main), on top of the base tracker that PR #3 had already landed (see premise-correction comment above). Gap-closing audit vs the iOS behavioral…
Resolved in spikersoft-angular PR #622 (merged to master). /tracker/activities list + /tracker/activities/:id report (defer-wrapped, own maplibre map), recorded-routes @Service() with…
Resolved in spikersoft-ios PR #6 (merged to main). GhostComparator + GhostRaceEngine, chime+TTS AudioCueService (locked-screen capable, UIBackgroundModes += audio), volume-button trigger +…
Resolved in spikersoft-backend PR #526 (merged to master). RouteAnalyzer + lazily-materialized GET /api/recorded-routes/{id}/analysis (versioned recorded-route-analysis collection), additive…
Premise correction: this ticket said "Android has NO tracker" — that was read from a stale local checkout (8 commits behind). spikersoft-android PR #3 (merged 2026-08-05, ref #920) already…
Resolved in spikersoft-angular PR #620 (merged to master). Tab target cycling (Shift+Tab reverse; cycleRadarMode moved to m): visible ships → radar-only contacts (stealth-uncovered/ghosts at…
Resolved in spikersoft-games-godot PR #10 (merged to main). Unified {kind,id} target handle, radius-aware pick, radar-contact store + cycling (incl. ContactLost lostEntityId field fix), SURVEY…