tools/gpx_replay.py: replay a GPX through the location pipeline #23
Labels
No labels
area:companion
area:docs
area:shared
area:tooling
area:watchapp
blocker
kind:chore
kind:feature
kind:spike
kind:test
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
robert/PedalPebble#23
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Goal
Make the whole thing testable indoors and repeatably, which matters far more once navigation lands.
Acceptance criteria
docs/DEV.mdFiles
tools/gpx_replay.pyClosed by PR #105 (merged). Correctly read the issue's actual acceptance criteria from the API rather than trusting the Python-file-path hint or an initial prediction \u2014 turned out to be about driving mock locations into a real emulator/device via a debug hook, not JVM-side algorithm verification, so building
tools/gpx_replay.pyliterally (not a Kotlin harness) was the right call, explicitly justified in the PR.\n\nWhat shipped: a stdlib Python CLI (36 tests, cross-checked against the real ~119km fixture's established ground truth) with three sinks \u2014 print,adb emu geo fix(emulator), and a new debug-only broadcast path (DebugFixReceiver/DebugBridgeLocationSource) for injecting fixes into a real running ride on a real device. The broadcast receiver is registeredRECEIVER_NOT_EXPORTED, gated on the realApplicationInfo.FLAG_DEBUGGABLEplatform flag (never true in a signed release build), fully additive alongside real GPS \u2014 zero surface added to production builds. Filled in the slow-lane/tag-lane CI placeholder jobs that were literally named after and hard-failing pending this issue.\n\nHonestly unverified (no adb device/emulator in this sandbox): the emulator and debug-broadcast sinks against a live target, and whether unprivilegedadb shell am broadcastreaches a RECEIVER_NOT_EXPORTED receiver on this project's API levels \u2014 both flagged explicitly with a documented fallback (RECEIVER_EXPORTED, with Bastion's review called out as warranted first) if it doesn't work as assumed.\n\nVerified for real: gpx_replay.py's own 36 unit tests,:companion:location:test(14 new),:companion:core:test/:companion:pebble:testunaffected,:companion:assembleDebugclean, manual runs against every real fixture in the repo.