GpxCueEnricher: tier-0 cues from the GPX itself #63
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
1 participant
Notifications
Due date
No due date set.
Blocks
Depends on
#72 Name route sources that export cues; flag geometry-only imports
robert/PedalPebble
#26 CueSheetEnricher interface and canonical direction enum
robert/PedalPebble
Reference
robert/PedalPebble#63
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
Read the cue sheet that is already in the file.
D7reasoned from "komoot GPX carries geometry only" (true) to treating every GPX as geometry-only (false). RideWithGPS, cycle.travel, Garmin and Strava exports frequently ship turn cues already:<rtept>and<wpt>entries with turn types and street names, plusgpxx/ Garmin<extensions>.Where they exist, these cues are exact, offline, instant, and need neither BRouter nor a network call. This becomes tier 0 of the enrichment chain, ahead of
BRouterEnricher.It is also what makes D6's "the route source is pluggable" claim actually pay off. Without it, pluggability costs three backends and buys nothing over komoot-only.
Acceptance criteria
GpxCueEnricherimplementsCueSheetEnricherand is tried first in the chain<rtept>route points with<name>/<cmt>/<desc>/<type>parsed into cues<wpt>waypoints recognised as cues where the file uses them that way, and as points of interest where it does notgpxx:RoutePointExtensionand<extensions>turn data parsedNAV_CUE_CONFIDENCE = 2(from the file)Files
companion/.../route/enrich/GpxCueEnricher.ktshared/- no contract change;NAV_CUE_CONFIDENCEalready exists in docs/PROTOCOL.mdNotes
See D26. Tier 0 is the cheapest good enrichment in the chain and it was missing entirely.
Update — 2026-09-03: what "read the cues" actually means (D59)
Nine BRouter encodings verified live (
timode1–9; 8 and 9 exist in shipping code but are missingfrom the AIDL docs) plus three foreign alphabets. Minimum parser surface: cues in
<trkpt>,<rte>/<rtept>,<wpt>, vendor namespaces (locus:rtePointActioninteger codes,om:oruxmapsextensionsnumeric icon ids,brouter:*), and XML comments (timode 4 — aconforming parser discards these by default). Alignment keys exist in only two encodings
(
<offset>; RWGPSi); everything else needs nearest-point association with out-and-backambiguity. Vocabulary normalisation onto D8's enum must cover BRouter's 19 mnemonics including
BL(beeline — not a turn, must not render as one),OFFR,EL/ER, both u-turn flavours.Fixtures
ti_1.gpx–ti_9.gpxare already generated from live BRouter 1.7.10.