aboutsummaryrefslogtreecommitdiff
path: root/ride/ride.go
Commit message (Collapse)AuthorAge
* Tame the deadcode gate and remove dead web helpersMartin Kagamino Lehoux2026-08-27
| | | | | | | | | Run deadcode with -test and without the vendored node_modules package so the check reports only genuinely unreachable code instead of test-only helpers and vendored functions. Remove the three web helpers it still flagged (formatBikeType, formatRideType, dataQualityURL) that had no callers. Apply the go fix modernizations the check gate performs (range-over-int loops and embedded-field composite literals) that the gate had rewritten in the working tree.
* Extract climb detection into a dedicated climb packageMartin Kagamino Lehoux2026-08-27
| | | | | | | | | | | | | | | | | | | Move climb detection, slope, and Cotacol scoring out of ride into a new climb package that operates on a geometry-only Route (distances, elevations, coords). Ride embeds climb.Route and keeps its timing and telemetry columns. - climb.Detect returns []DetectedClimb (Climb + ride-absolute Start). - Climb owns its sliced geometry; indices are local, with Start reported at the detection boundary for absolute position. - Detected bounds use core.Interval; freeRegions claim suppression fixed. - ride no longer builds slices: ClimbFromDist/ClimbFromIndexes/climbFrom and ride.Climb/Interval/Range are removed; rideanalysis, mountain_pass MatchClimb, and web views are rewired to climb types. - New internal/routetest builds climb.Route from the ride DSL; ridetest reuses it and adds timestamps and telemetry. - Tests moved to climb (synthetic detection and difficulty) and kept in ride for GPX-example integration; ride.comparison detection coverage retained. - mountain_pass.nearestCrossing now reuses geo.Nearest.
* Describe test rides as plain strings with a ridetest DSLMartin Kagamino Lehoux2026-08-25
| | | | | | | | Add internal/ridetest parsing "2km at 7% | 1km at -7%" sections into a ride.Ride, with Sampling, StartCoord, StartTime and StartElevation options, plus per-section hr/cad/w metrics. Replace the package-private RideBuilder in climb/difficulty tests and export FromColumnsWithMetrics so metric columns can be built outside the ride package.
* Remove per-index ride accessors now dead after the component migrationMartin Kagamino Lehoux2026-08-25
| | | | | | | | The DistanceM, ElevationM, Coord, Timestamp and optional metric index accessors (HeartRateBpm, CadenceRpm, PowerW) are no longer used by any production code now that algorithms and consumers read ride components. Tests that asserted metric parsing and coordinates now read the component slices (Distances, Coords, HeartRates, Cadences, Powers).
* Expose ride data as components and make algorithms consume only the slices ↵Martin Kagamino Lehoux2026-08-25
| | | | | | | | | | | they read Ride now exposes its columns as component getters (Distances, Elevations, Coords, Timestamps, and the optional Powers, Cadences, HeartRates) with the coords field unexported. difficultyScore, movingTime, Slope and the climb detection internals are pure functions over the specific slices they use, and Climb carries only the component slices it needs instead of a whole Ride.
* feat: bound climb detection by matched official climbsMartin Kagamino Lehoux2026-08-21
| | | | | | | | | | | | | | | Detected climbs no longer absorb an official climb's range: official climbs matched to the route by coordinates claim their stored start/end range, and climb detection now runs only in the free regions around them. On ride 263 a single absorbed Cat 2 ascent is split so creating a first-half official climb lets the second half be detected on its own. - ride: add Range, freeRegions, and DetectClimbs(claimed); exclude claimed ranges so a climb never overlaps one - official_climb: MatchClimb now bounds-matches purely by coordinates without needing a detected climb; extract geo.Nearest shared helper - rideanalysis: Analyze builds claimed climbs from matched official climbs and detects only in free regions; render official vs unmatched climbs separately
* refactor(ride,rideanalysis): replace magic numbers with named constantsMartin Kagamino Lehoux2026-08-21
|
* feat(ride): skip rides without track points in backtestMartin Kagamino Lehoux2026-08-20
|
* fix(web): use Cotacol for climb difficultyMartin Kagamino Lehoux2026-08-16
|
* feat: add official climb workflowMartin Kagamino Lehoux2026-08-14
|
* chore: remove legacy chart renderingMartin Kagamino Lehoux2026-08-11
|
* feat: Persist Cotacol ride valuesMartin Kagamino Lehoux2026-08-08
|
* feat: Add Strava stream metricsMartin Kagamino Lehoux2026-08-07
|
* refactor: Store rides in columnsMartin Kagamino Lehoux2026-08-07
|
* feat: Add web ride library with Strava syncMartin Kagamino Lehoux2026-08-05
|
* feat: Detect mountain pass crossings, name climbs after passes, render ride ↵Martin Kagamino Lehoux2026-08-03
| | | | | | | | | | charts - osmpass: extract mountain_pass=yes nodes from an OSM PBF, enrich centcols passes with OSM coordinates, resumable -fetch-osm download - mountain_pass: DetectCrossings for a ride, MatchClimb to name a climb after the pass it tops - ride: expose Points(), add Climb.Top() and Climb.Name - chart: -chart renders elevation profile with climb bands and pass markers - commands: -fetch-osm, -extract-osm, -import-cached, -enrich
* feat: Add Cotacol difficulty score to climbsMartin Kagamino Lehoux2026-08-01
|
* feat: Add Cotacol difficulty score for ridesMartin Kagamino Lehoux2026-08-01
|
* Cleanup parsingMartin Kagamino Lehoux2025-04-21
|
* Implement climb scoreMartin Kagamino Lehoux2025-04-21
|
* First implem of similar KOMMartin Kagamino Lehoux2025-04-21
|
* Add more data in climb & pointMartin Kagamino Lehoux2025-04-21
|
* fix: Remove too short outliersMartin Kagamino Lehoux2024-08-07
|
* test: Add failing test for climb inside long false flatMartin Kagamino Lehoux2024-07-28
|
* test: Add some test to fix behaviorMartin Kagamino Lehoux2024-07-28