Back to Roadmap

Training Load

Rolling training load calculation from accumulated stress scores — acute (7-day) vs chronic (28-day) load, training load balance, freshness/fatigue tracking. Helps users understand if they're overtraining or undertraining.

Updated for SYNTHESIS schema

Per-activity load → activity_statistics

  • Each activity gets a training load value stored as activity_statistics rows
  • Computation hierarchy:
    1. Power-based TSS when power data available (cycling, rowing): TSS = (duration × NP × IF) / (FTP × 3600) × 100
    2. HR-based TRIMP for HR-only activities: sum of (time_in_zone × zone_weight) using training_zones.trimp_weight
    3. sRPE (RPE × duration) as universal fallback: RPE from activity_statistics where stat_type = 'rpe'
  • Stat types: training_load, tss, intensity_factor, normalized_power
  • Trainstack-computed variants use ts_ prefix: ts_training_load, ts_tss

Rolling load → athlete_metrics

  • CTL (Chronic Training Load): 42-day exponentially weighted moving average
  • ATL (Acute Training Load): 7-day exponentially weighted moving average
  • TSB (Training Stress Balance): CTL - ATL (positive = fresh, negative = fatigued)
  • ACWR (Acute:Chronic Workload Ratio): ATL / CTL — safe range 0.8-1.3, flag injury risk >1.5
  • Stored in athlete_metrics with metric_type = 'ctl', 'atl', 'tsb', 'acwr'

Computation

  • Background job, not real-time
  • Triggered when new activities sync or when RPE is entered
  • Per-sport CTL/ATL (running load separate from cycling load)
  • Invalidation: recalculate when activity is edited/deleted

Coaching integration

  • Combine with HRV trend status from athlete_metrics (stable/coping/maladaptation/fatigue)
  • ACWR >1.5 + HRV downtrend = high injury risk warning
  • Display alongside planned workouts on calendar

Depends on

  • #31 Implement SYNTHESIS Schema
  • #35 Training Zones & Zone Analysis Schema (for TRIMP zone weights)
  • #34 Health & Sleep Data Schema (for athlete_metrics table)
  • #24 Training Stress Score (per-activity TSS must exist first)

Reference

See docs/api-research/SYNTHESIS.md §5 (Data Provenance), §7 (athlete_metrics, activity_statistics)._

Status
Backlog
Priority
Normal
Platform
iOS
Date
1 month ago