Fix treadmill/indoor distance over-measure and clean up polluted PRs
Build and push images / validate (push) Successful in 3s
Build and push images / build-backend (push) Successful in 6s
Build and push images / build-worker (push) Successful in 6s
Build and push images / build-frontend (push) Successful in 5s

- Garmin Connect sync now applies Garmins corrected summary distance/moving time,
  overriding the raw wrist-estimated FIT distance for treadmill/indoor runs
- Exclude indoor (no-GPS) runs from distance personal records (bogus fast splits)
- backfill_indoor_distances task: re-fetch corrected distance for historical indoor runs
- recompute_personal_records_all task: wipe and rebuild PRs from valid activities

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 23:55:21 +01:00
parent e9cb1ea4e4
commit b5b838bddc
2 changed files with 175 additions and 3 deletions
+8 -1
View File
@@ -181,7 +181,14 @@ def sync_activities(garmin, user_id: int, since: Optional[datetime],
dest = dest_dir / f"{garmin_id}.fit"
dest.write_bytes(fit_data)
process_activity_file.delay(str(dest), user_id, "fit", garmin_id)
# Pass Garmin's corrected summary so treadmill/indoor wrist-distance is
# overridden by the authoritative displayed distance/moving time.
summary = {
"distance": act.get("distance"),
"moving": act.get("movingDuration"),
"elapsed": act.get("elapsedDuration") or act.get("duration"),
}
process_activity_file.delay(str(dest), user_id, "fit", garmin_id, summary)
queued += 1
if status_callback and (queued % 5 == 0 or queued == total):