Files
samplez/rippr-src/docs/v2/README.md
uhryniuk 280fd7f988 Add Rippr source snapshot and full-history bundle
Two copies for two jobs. rippr-src/ is a browsable git archive export of
the tracked tree at 2f76983 - no build outputs, no local.properties, no
nested .git - which is convenient to read in gitea but carries no history
and will drift.

rippr-full-history.bundle is the real backup: all 18 commits, verified as
"records a complete history" and test-cloned before committing. This
matters because ~/dojo/rippr has no git remote and otherwise exists only
on one machine.

rippr-src/SNAPSHOT.md explains the difference and how to restore.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 08:30:25 -05:00

4.1 KiB
Raw Blame History

Rippr v2 — Task Index

Trips, path rendering, and export. Full rationale lives in the plan; this directory holds one document per task, each self-contained enough to implement from.

Why v2

v1 records GPS telemetry reliably — a real ride confirmed the whole pipeline including speedKmh. What it lacks is structure: track_points is one unbounded append-only table with no boundary between rides. "No reset", "no pause", and "no trips" are all the same missing concept.

Path data is already captured (latitude, longitude, altitudeM, bearingDeg at 1–2 Hz). v2 adds rendering, not capture.

Decisions

Decision Choice
Map library osmdroid — Apache-2.0, no API key, no billing
Trip lifecycle Manual only — explicit Start/Stop
Reset Discard current trip, behind a confirm
Live map None. Phone rides in a pocket; the map is a post-ride artifact
Map visibility Behind a toggle, trip detail only, never touched by the service
v1 data Nuked — v1 was a test, so no migration
Trip management Rename, delete, merge
Group ride view Deferred to v3+

Tasks

# Task Phase Depends Status
T01 Repo + dependency baseline 0 — Done
T02 Schema v2 entities + DAOs 1 T01 Done
T03 Trip repository + reactive state 1 T02 Done
T04 Geo utilities 2 T01 Done
T05 Ride statistics 2 T04 Done
T06 Trip lifecycle in the service 3 T03 Done
T07 Live aggregate accumulation 3 T04, T06 Done
T08 Navigation shell + ViewModels 4 T01 Done
T09 Record screen v2 4 T06, T08 Done
T10 Trips list 4 T02, T08 Done
T11 Trip detail (stats only) 4 T05, T08 Done
T12 Rename / delete / merge 4 T10, T11 Done
T13 osmdroid integration + toggle 5 T11 Done
T14 Path rendering 5 T04, T13 Done
T15 GPX + GeoJSON writers 6 T04 Done
T16 Export UI 6 T15 Done
T17 Uploader trip-awareness 7 T02 Done
T18 Verification + remove destructive migration 7 all Done (real-ride checklist outstanding)

Dependency graph

T01 ──┬─► T02 ──► T03 ──► T06 ──► T07 ──┐
      │    ├─────────► T10 ──┐          │
      │    └─────────► T17   │          │
      ├─► T04 ──► T05 ──► T11├─► T12    │
      │      └──────────► T14│          │
      └─► T08 ──► T09 ───────┘          │
                  T11 ──► T13 ──► T14   │
          T04 ──► T15 ──► T16           ▼
                                       T18

Critical path: T01 → T02 → T03 → T06 → T07 → T09 → T18. T04/T05, T08, and T15 are parallelisable early wins requiring no device.

Progress log with per-task outcomes and hiccups: PROGRESS.md.

Conventions

  • Package layout: data/, geo/, stats/, export/, ui/ under com.rippr
  • Pure logic stays Android-free so it is JVM-unit-testable — the pattern Telemetry.kt already follows
  • Comments explain why, not what, matching the existing codebase
  • Each task ends green: ./gradlew assembleDebug testDebugUnitTest lintDebug

Standing constraints

  • minSdk 26 ⇒ SQLite 3.18 ⇒ no window functions. Consecutive-point maths cannot be done in SQL; it is accumulated in Kotlin.
  • Migrations are now mandatory. The destructive fallback was removed in T18. Any schema change must ship a Migration against schemas/com.rippr.data.AppDatabase/2.json.
  • Decimation is render-only. Storage and export always use raw points.