← All metrics

Recovery & readiness

MyThreshold’s readiness composite, Garmin’s ingested readiness score, and rolling HRV status — surfaced side by side, never conflated.

Illustrative readiness composite over a training week Illustrative example — not a real athlete
Illustrative readiness composite over a training week
MonWedFriSun

score (0-100)

MyThreshold readiness composite

A 0–100 recovery estimate blended from sleep, HRV status, resting-HR trend, form (TSB), and yesterday’s training strain — labeled MyThreshold’s own estimate, shown alongside (never instead of) your device’s own readiness score.

Worked example Illustrative example — not a real athlete
  1. sleep=80 (weight .30), hrv_status=balanced→100 (weight .25), rhr_trend=90 (weight .15), tsb=70 (weight .20), prior_day_strain=60 (weight .10).
  2. score = 80×.30 + 100×.25 + 90×.15 + 70×.20 + 60×.10 = 82.5

82.5 lands in the GREEN band — no public individual readiness-composite dataset exists to verify against (it’s a MyThreshold-original blend), so this stays illustrative for the number; the individual signals it blends each trace to published research.

Formula, provenance & citation
Formula
score = Σ(present_subscore × weight) / Σ(present_weights); weights: sleep .30, hrv_status .25, tsb .20, rhr_trend .15, prior_day_strain .10
Inputs
sleep_score, hrv_status, rhr_today, rhr_baseline, tsb, prior_day_strain (renormalized over whichever are present, min 3 of 5).
Provenance
estimated
Unit
score (0–100)
Method
MyThreshold-original v1 weighted composite
Citation
MyThreshold readiness composite (v1) — documented blend of sleep, HRV status, resting-HR trend, TSB (Coggan Form), and prior-day training load.
Licensing note
A MyThreshold-original blend, not a vendor score — explicitly designed to be surfaced alongside, never instead of, Garmin’s proprietary Firstbeat Training Readiness.
Implementation pointer
api/backend/backend/pipeline/metrics/recovery.py:165 (readiness_composite). Tests: api/backend/tests/pipeline/test_metrics_recovery.py.

Garmin Firstbeat Training Readiness (ingested)

Garmin’s own proprietary 0–100 readiness score, passed through to you exactly as your device computed it — MyThreshold never reimplements or second-guesses this number.

Worked example Illustrative example — not a real athlete
  1. Garmin’s API reports training_readiness = 72 for a given day.
  2. MyThreshold wraps it as-is: measured, not recomputed.

No public per-athlete dataset exists to cite here — the number itself comes straight from your own device, unmodified.

Formula, provenance & citation
Formula
No MyThreshold computation — the ingested value is wrapped as-is.
Inputs
Garmin’s ingested training_readiness field.
Provenance
measured
Unit
score (0–100)
Method
Garmin/Firstbeat proprietary algorithm (ingested verbatim)
Citation
N/A — proprietary vendor score, not a published academic method.
Licensing note
Garmin Firstbeat Training Readiness is a Garmin/Firstbeat proprietary feature; MyThreshold only ingests and displays the number your own account already receives — it does not reimplement or reverse-engineer Garmin’s algorithm.
Implementation pointer
api/backend/backend/pipeline/metrics/recovery.py:271 (garmin_readiness). Tests: api/backend/tests/pipeline/test_metrics_recovery.py.

Rolling HRV status

Whether your recent heart-rate-variability trend is running low, high, or balanced relative to YOUR OWN historical baseline — not a fixed population number.

Worked example Illustrative example — not a real athlete
  1. Rolling 7-night mean ln(rMSSD) = 3.9; 60-night baseline mean = 4.1, SD = 0.15.
  2. z = (3.9 − 4.1) / 0.15 ≈ −1.33

z ≤ −1.0 classifies as "low" — the method is drawn from real published HRV literature; this specific z-score is illustrative, not a real athlete’s data.

Formula, provenance & citation
Formula
rolling = mean(ln(rMSSD), trailing 7 nights); baseline = mean ± SD of ln(rMSSD) over 60 nights; z = (rolling − baseline_mean) / baseline_sd; low if z ≤ −1.0, high if z ≥ 1.0
Inputs
Nightly rMSSD series (gaps dropped, never interpolated); window_days=7, baseline_days=60, min_baseline_nights=14 (config).
Provenance
computed
Unit
z (SD units)
Method
Rolling ln-rMSSD HRV status vs. individual baseline
Citation
Task Force of the ESC/NASPE (1996), Circulation; Plews D. et al. (2013), Sports Medicine.
Licensing note
No trademarked vendor term — the underlying nightly rMSSD reading is Garmin-ingested sensor data; only the rolling mean/baseline statistics are recomputed here.
Implementation pointer
api/backend/backend/pipeline/metrics/recovery.py:400 (compute_hrv_status). Tests: api/backend/tests/pipeline/test_metrics_recovery.py.
← Back to mythreshold.ai