aboutsummaryrefslogtreecommitdiff
path: root/ride
Commit message (Collapse)AuthorAge
* Merge ride and rides packages into ride/store following mountain_pass structureMartin Kagamino Lehoux2026-08-23
| | | | | | | | Consolidate persistence (Save, List, Backfill) into ride/store.go alongside ride.go/climb.go/moving_time.go, rename rides.Ride to ride.StoredRide to avoid collision with parsed ride.Ride, update all web/cli consumers and RideView to use named Ride field, adjust templates and regenerate templ files, and remove rides directory.
* Require a 3.5% minimum slope on detected climbs, re-segmenting gentler stretchesMartin Kagamino Lehoux2026-08-21
| | | | | | | | | | | | | | A detected climb must now average at least 3.5% slope with re-segmentation: gentle drags are split into their qualifying steeper parts instead of being reported wholesale or dropped. Qualifying climbs keep their previous boundaries exactly; only regions whose classic best climb averages below the threshold get re-segmented (full-scan for the best qualifying sub-segment, found=false when none exists). QA: A/B across data/rides (362 rides) went from 137 to 133 climbs, 23 rides changed; the 7 fully-dropped rides were audited to contain zero qualifying sub-segments. Example-ride tests updated for the new behavior; the resolved "minimum slope" TODO was removed.
* 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): express category thresholds as inclusive min scoresMartin Kagamino Lehoux2026-08-21
|
* refactor(ride,mountain_pass): remove dead code identified by deadcode analyzerMartin Kagamino Lehoux2026-08-21
|
* 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
|
* chore(bench): exclude rides with low moving time ratioMartin Kagamino Lehoux2026-08-20
|
* chore(bench): exclude rides under 10 kmMartin Kagamino Lehoux2026-08-20
|
* chore(bench): exclude short ridesMartin Kagamino Lehoux2026-08-20
|
* fix(ride): use effort metrics for moving timeMartin Kagamino Lehoux2026-08-20
|
* fix(ride): improve moving time against StravaMartin Kagamino Lehoux2026-08-20
|
* feat(ride): compute moving time from GPX with backtestMartin Kagamino Lehoux2026-08-20
| | | | | | | | Add ride.MovingTime, a speed-threshold algorithm over track timestamps. Add a -backtest CLI command comparing computed values against Strava's reference across all stored rides, with a percentile distribution summary. Baseline: mean err 3.9%, p50 1.6, p75 4.6, p90 8.4, p95 12.1, p99 44.9.
* 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
|
* feat: Download mountain passes from centcols into SQLiteMartin 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
|
* Add some more testsMartin Kagamino Lehoux2025-04-20
|
* chore: Add test & cleanup logsMartin Kagamino Lehoux2024-12-30
|
* fix: Remove too short outliersMartin Kagamino Lehoux2024-08-07
|
* fix: One more iteration to find the best climbMartin Kagamino Lehoux2024-07-28
|
* test: Add failing test for climb inside long false flatMartin Kagamino Lehoux2024-07-28
|
* fix: Fix climb finder when climb is not highestMartin Kagamino Lehoux2024-07-28
|
* test: Add some test to fix behaviorMartin Kagamino Lehoux2024-07-28