| Commit message (Collapse) | Author | Age | |
|---|---|---|---|
| * | Expose ride data as components and make algorithms consume only the slices ↵ | Martin Kagamino Lehoux | 2026-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. | ||
| * | Add progress bars to the long-running CLI processes (backtest, backfill, ↵ | Martin Kagamino Lehoux | 2026-08-24 |
| | | | | | extract-osm) | ||
| * | Add hardcore ride categorisation with bike and ride types | Martin Kagamino Lehoux | 2026-08-23 |
| | | |||
| * | Suppress overlapping detected climbs when official claims are unsorted | Martin Kagamino Lehoux | 2026-08-23 |
| | | |||
| * | Merge ride and rides packages into ride/store following mountain_pass structure | Martin Kagamino Lehoux | 2026-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 stretches | Martin Kagamino Lehoux | 2026-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 climbs | Martin Kagamino Lehoux | 2026-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 scores | Martin Kagamino Lehoux | 2026-08-21 |
| | | |||
| * | refactor(ride,mountain_pass): remove dead code identified by deadcode analyzer | Martin Kagamino Lehoux | 2026-08-21 |
| | | |||
| * | refactor(ride,rideanalysis): replace magic numbers with named constants | Martin Kagamino Lehoux | 2026-08-21 |
| | | |||
| * | feat(ride): skip rides without track points in backtest | Martin Kagamino Lehoux | 2026-08-20 |
| | | |||
| * | chore(bench): exclude rides with low moving time ratio | Martin Kagamino Lehoux | 2026-08-20 |
| | | |||
| * | chore(bench): exclude rides under 10 km | Martin Kagamino Lehoux | 2026-08-20 |
| | | |||
| * | chore(bench): exclude short rides | Martin Kagamino Lehoux | 2026-08-20 |
| | | |||
| * | fix(ride): use effort metrics for moving time | Martin Kagamino Lehoux | 2026-08-20 |
| | | |||
| * | fix(ride): improve moving time against Strava | Martin Kagamino Lehoux | 2026-08-20 |
| | | |||
| * | feat(ride): compute moving time from GPX with backtest | Martin Kagamino Lehoux | 2026-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 difficulty | Martin Kagamino Lehoux | 2026-08-16 |
| | | |||
| * | feat: add official climb workflow | Martin Kagamino Lehoux | 2026-08-14 |
| | | |||
| * | chore: remove legacy chart rendering | Martin Kagamino Lehoux | 2026-08-11 |
| | | |||
| * | feat: Persist Cotacol ride values | Martin Kagamino Lehoux | 2026-08-08 |
| | | |||
| * | feat: Add Strava stream metrics | Martin Kagamino Lehoux | 2026-08-07 |
| | | |||
| * | refactor: Store rides in columns | Martin Kagamino Lehoux | 2026-08-07 |
| | | |||
| * | feat: Add web ride library with Strava sync | Martin Kagamino Lehoux | 2026-08-05 |
| | | |||
| * | feat: Detect mountain pass crossings, name climbs after passes, render ride ↵ | Martin Kagamino Lehoux | 2026-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 climbs | Martin Kagamino Lehoux | 2026-08-01 |
| | | |||
| * | feat: Add Cotacol difficulty score for rides | Martin Kagamino Lehoux | 2026-08-01 |
| | | |||
| * | feat: Download mountain passes from centcols into SQLite | Martin Kagamino Lehoux | 2026-08-01 |
| | | |||
| * | Cleanup parsing | Martin Kagamino Lehoux | 2025-04-21 |
| | | |||
| * | Implement climb score | Martin Kagamino Lehoux | 2025-04-21 |
| | | |||
| * | First implem of similar KOM | Martin Kagamino Lehoux | 2025-04-21 |
| | | |||
| * | Add more data in climb & point | Martin Kagamino Lehoux | 2025-04-21 |
| | | |||
| * | Add some more tests | Martin Kagamino Lehoux | 2025-04-20 |
| | | |||
| * | chore: Add test & cleanup logs | Martin Kagamino Lehoux | 2024-12-30 |
| | | |||
| * | fix: Remove too short outliers | Martin Kagamino Lehoux | 2024-08-07 |
| | | |||
| * | fix: One more iteration to find the best climb | Martin Kagamino Lehoux | 2024-07-28 |
| | | |||
| * | test: Add failing test for climb inside long false flat | Martin Kagamino Lehoux | 2024-07-28 |
| | | |||
| * | fix: Fix climb finder when climb is not highest | Martin Kagamino Lehoux | 2024-07-28 |
| | | |||
| * | test: Add some test to fix behavior | Martin Kagamino Lehoux | 2024-07-28 |
