Route library: storage, list UI, distance and elevation profile #25

Closed
opened 2026-08-31 17:14:43 +02:00 by robert · 1 comment
robert commented 2026-08-31 17:14:43 +02:00 (Migrated from git.butzei.de)

Goal

Pick a route from inside PedalPebble rather than re-importing it every ride.

Acceptance criteria

  • Imported routes persisted with name, total distance, ascent and bounding box
  • List UI with a preview and an elevation profile
  • Rename and delete supported
  • Route selected for the next ride, and the selection survives an app restart
  • Enrichment status shown per route (enriched / pending / failed, and by which backend)

Files

  • companion/.../route/import/RouteStore.kt
## Goal Pick a route from inside PedalPebble rather than re-importing it every ride. ## Acceptance criteria - [ ] Imported routes persisted with name, total distance, ascent and bounding box - [ ] List UI with a preview and an elevation profile - [ ] Rename and delete supported - [ ] Route selected for the next ride, and the selection survives an app restart - [ ] Enrichment status shown per route (enriched / pending / failed, and by which backend) ## Files - `companion/.../route/import/RouteStore.kt`
Owner

Closed by PR #88 (merged): RouteLibrary (pure JVM business logic \u2014 import/list/rename/delete/select-active, 83 host tests) over a RouteRecordStorage/ActiveRoutePointerStorage interface pair, backed by Room (:companion:route) for structured route data and SharedPreferences for the one scalar (active-route pointer). Ascent computed honestly: sums positive deltas only across point pairs where both carry elevation, never bridges a gap or assumes sea level \u2014 a route with no elevation data reports 0.0 as "no data", not "flat". Enrichment status persisted starting at PENDING; no auto-enrichment trigger wired (left for whichever future issue owns "when does enrichment run").\n\nCaught and fixed before merge: the PR shipped KSP 2.3.11 (latest tag, explicitly flagged by the PR itself as unverified against this project's Kotlin 2.4.10). Checked kotlinlang.org's own KSP quickstart doc live \u2014 it pairs Kotlin 2.4.10 with KSP 2.3.10 specifically \u2014 and corrected the version before merging (one extra commit on the branch). Still unexecuted end-to-end (no Android SDK in this sandbox), so this is the vendor-documented pairing, not a confirmed-working build.\n\nAlso unverified, same reason: :companion:route's Compose UI (RouteLibraryScreen, ElevationProfile, RoutePreview) and Room codegen \u2014 hand-reviewed against documented API shapes only, first real compile will be the actual test.

Closed by PR #88 (merged): RouteLibrary (pure JVM business logic \u2014 import/list/rename/delete/select-active, 83 host tests) over a RouteRecordStorage/ActiveRoutePointerStorage interface pair, backed by Room (`:companion:route`) for structured route data and SharedPreferences for the one scalar (active-route pointer). Ascent computed honestly: sums positive deltas only across point pairs where both carry elevation, never bridges a gap or assumes sea level \u2014 a route with no elevation data reports 0.0 as \"no data\", not \"flat\". Enrichment status persisted starting at PENDING; no auto-enrichment trigger wired (left for whichever future issue owns \"when does enrichment run\").\n\n**Caught and fixed before merge**: the PR shipped KSP 2.3.11 (latest tag, explicitly flagged by the PR itself as unverified against this project's Kotlin 2.4.10). Checked kotlinlang.org's own KSP quickstart doc live \u2014 it pairs Kotlin 2.4.10 with KSP **2.3.10** specifically \u2014 and corrected the version before merging (one extra commit on the branch). Still unexecuted end-to-end (no Android SDK in this sandbox), so this is the vendor-documented pairing, not a confirmed-working build.\n\n**Also unverified, same reason**: `:companion:route`'s Compose UI (RouteLibraryScreen, ElevationProfile, RoutePreview) and Room codegen \u2014 hand-reviewed against documented API shapes only, first real compile will be the actual test.
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
robert/PedalPebble#25
No description provided.