Recovery, Freshness & Readiness

Readiness is a verdict, not a number. Recovery (heart, nervous system & sleep) comes from HRV, sleep and resting heart rate and snaps back overnight. Freshness (muscles, tendons & joints) comes from your recent training on two clocks — a fast one for muscles and glycogen that clears in a day or two, and a slow one for tendons, joints and deep fatigue that takes about a week. Every workout counts for what it was (a hard four-miler weighs far more than an easy one), and the total is graded against what your body has adapted to over the last six weeks — not last month’s average, so hard days never become free just because they are usual. You see the lower of the two clocks: a hard workout drops it, and it climbs back as your legs absorb the load. Both run 0–100 with 100 = good. Ready only shows when both are high; Steady means one system is still catching up; Recover means rest is the workout.

← Back to Coach Dashboard

Two Numbers, Two Clocks

Readiness in RunIntensity is a verdict — Ready, Steady or Recover — drawn from two independent measurements: Recovery (heart, nervous system & sleep, from HRV, sleep and resting heart rate) and Freshness (muscles, tendons & joints, from your recent training load and, in a coming update, logged soreness). Both run 0–100 and read the same way: 100 = good. The two numbers are shown side by side and are never blended into one, because the gap between them is the coaching signal: low Recovery with low Freshness is ordinary training fatigue, low Recovery with high Freshness is a red flag that running doesn’t explain, and high Recovery with low Freshness is an engine that’s back before the legs are.

Recovery

heart, nervous system & sleep

How your engine bounced back

A 0–100 score from overnight HRV, sleep and resting heart rate, each compared against your own recent baseline. It measures systemic recovery — the autonomic nervous system and cardiovascular response to load.

Snaps back overnight (24–48h).

Freshness

muscles, tendons & joints

How much recent training your legs have absorbed

A 0–100 score where 100 means recent training is fully absorbed and your legs are fresh. It runs on two tissue clocks — a fast one (a day or two) for muscles and glycogen, and a slow one (about a week) for tendons, joints and deep fatigue — over the dose of every workout (miles × intensity², so a hard four-miler weighs far more than an easy one), graded against what your body has adapted to over the last six weeks. You see the lower of the two. A hard workout drops it; it climbs back as the load decays. It stands in for mechanical recovery — the slower repair of muscle, tendon and bone.

Drops with a workout, climbs back over a day or two (fast clock) or about a week (slow clock).

Two clocks: Recovery snaps back overnight; Freshness climbs back over a day or two (fast clock — muscles & glycogen) or about a week (slow clock — tendons, joints & deep fatigue). Both numbers are computed on the athlete’s own phone (iPhone or Android) and synced as-is. Every other surface — the coach apps, this web dashboard, the morning push, Coach Brady — reads the stored pair and verdict. Nobody recomputes readiness, so an athlete, their coach and a connected friend always see the same values.

The Verdict

The verdict is a lookup, not a formula. Recovery falls into a band (≥70 high, 40–69 moderate, <40 low), Freshness falls into a band (≥65 high, 35–64 moderate, <35 low), and the pair picks one of nine cells:

Freshness HIGH ≥65 Freshness MODERATE 35–64 Freshness LOW <35
Recovery HIGH ≥70 Readyfull green light Steadyquality OK, cap volume Steadynever “Ready”
Recovery MODERATE 40–69 Steadyeasy to moderate Steadyeasy only Recoverrecovery day
Recovery LOW <40 Recover⚑ not load-related Recoverrecovery day Recoverfull recovery day

‘Ready’ only appears when both are green. Every other cell says Steady or Recover. Because both numbers read the same way, the grid is easy to remember: Ready is the top-left corner where both are high; the further a number falls, the further the verdict slides toward Recover. A high Recovery score is described as recharged or bounced back — never as a complete recovery — because it only speaks for one of the two clocks.

What each cell says

This is the exact guidance shown in the app, the coach views and the morning push. Where a cell mentions them, the session that is the biggest piece of what the legs are still carrying (the model’s dominant workout) and the time until Freshness (the lower of its two clocks) climbs back into the high band are filled in — shown here as Friday’s long run and ~2 days.

Recovered isn’t the same as healed HRV and resting heart rate rebound within 24–48 hours of a hard session; muscle micro-damage takes 3–7 days to repair, and tendons and bone longer still. A high Recovery score after a big long run means your engine is back — not that your legs are. That is what Freshness is for — its slow clock keeps counting the days your tendons and joints need even after the fast clock has cleared — and why the app says Steady instead of Ready on those mornings. Clarkson & Hubal 2002; Stanley, Peake & Buchheit 2013; Hickson 1981; Kubo 2010/2012

Recovery — How It’s Measured

Recovery is a re-weighted average of whichever of these three overnight signals is available, scaled so the weights always sum to 100%. If one is missing or reads zero (no HRV sample overnight, for example), that component is dropped and the remaining weights are re-scaled — nothing silently drags the score down. Together they represent the integrated recovery state of your autonomic nervous system.

35% · HRV

Heart Rate Variability

The variation in time between consecutive heartbeats, measured as SDNN. Higher HRV indicates a well-recovered parasympathetic nervous system; a sudden drop is one of the earliest markers of accumulated stress, illness, or under-recovery.

Source: Apple Health — HKQuantityType.heartRateVariabilitySDNN (Health Connect on Android)

30% · Sleep

Sleep Duration & Quality

Total sleep hours plus the share spent in restorative deep and REM stages. Sleep is the single largest driver of next-day recovery and the biggest lever most runners can actually control.

Source: Apple Health — HKCategoryType.sleepAnalysis (in bed / core / deep / REM)

20% · RHR

Resting Heart Rate

A lower RHR generally means better aerobic fitness and full systemic recovery. A spike of 5–10 bpm above your baseline is a reliable signal that your body is still working to repair the last session.

Source: Apple Health — HKQuantityType.restingHeartRate

Bands

Recovery bands

≥70 high · 40–69 moderate · <40 low

The bands only decide which row of the verdict matrix applies. Recovery itself is a measurement and is never altered by the verdict, the youth guardrail, or your training load.

These three are personalized to you. Every comparison is against your own 7–30 day baseline — not a population average. A 30-year-old with naturally high HRV and a 55-year-old with naturally lower HRV can both score 100 on the HRV component if each is at or above their own typical range.

Freshness — What It Measures

Freshness is descriptive: it says what you did and how much of it your legs have absorbed. It is not an injury forecast, and the word “risk” never appears next to it (see the ACWR note under Research below). Three ideas make it up: every workout carries a dose that grows faster than pace, two tissue clocks decay that dose at very different speeds, and both are graded against a capacity — what your body has adapted to over the last six weeks. The lower of the two clocks is the number you see.

Dose — a hard four-miler is not an easy four-miler

Each workout’s stress-adjusted miles (SAM) already fold in pace, terrain, surface and heat. Freshness goes one step further: the intensity of a run is its SAM per mile (how far above easy pace it sat, never below 1), and the workout’s dose is miles × intensity² — the same super-linear idea as a training-stress score. An easy four-miler at intensity 1 is a dose of 4; the same four miles run hard enough to score 10 SAM (intensity 2.5) is a dose of 25. Tissue stress rises faster than speed — ground-reaction force and eccentric load both scale with pace — so a hard session costs the legs far more than its mileage suggests. A session without a distance (a lift, a swim, a ride) counts its SAM as its dose.

Two tissue clocks

Fast clock

muscles & glycogen — a day or two

The muscular cost of a session: glycogen to restock, micro-damage and the neuromuscular heaviness you feel the same evening and the next morning. Its half-life is 24–48 hours depending on age (30 h at 30, floored at 24 h for younger athletes and capped at 48 h for older ones), summed over four half-lives. The evidence puts neuromuscular recovery after hard intervals or repeated sprints at 24–48 h — longer than the autonomic rebound HRV measures, which is why this clock is slower than the one earlier versions inherited.

Held down by the fast clock — muscles and glycogen are still restocking. Give it a day or two.

Slow clock

tendons, joints & deep fatigue — about a week

The structural cost: tendon and joint tissue, connective-tissue repair and the deep fatigue that a hard block leaves behind. The same doses are decayed on a half-life four times longer (96–192 h), again over four half-lives — so a big week keeps counting for two to four weeks. Muscle-damage markers after a marathon stay elevated for about six days and tendons remodel over weeks, which is the timescale this clock is built to.

Held down by the slow clock — tendons, joints and deep fatigue are still repairing. Give it days, not hours.

Capacity — graded against six weeks, not last month

Both clocks are read as a ratio of decayed dose to capacity: an exponentially weighted average of your daily dose with a 42-day time constant over the last 90 days — the same long-horizon step the Fitness line uses. Capacity moves slowly by design. Four hard days after an easy block shift it by less than ten percent, so they read low; ninety days of the same hard dose genuinely is your norm, and then it reads like steady easy training. An athlete with little history is scored against a floor of two easy-equivalent miles a day, so the very first runs still register.

Hard is hard, even when it’s your norm. An earlier version scored the slow clock only on load above your own 30-day average. An athlete who ran hard Friday, Saturday, Sunday and Monday read Freshness 100 — because hard days were what he usually did. That is not how tissue works: accumulated fatigue is real whether or not it is usual. Freshness now grades the absolute decayed dose against a capacity that adapts over six weeks, so a string of hard days reads low even for an athlete whose hard days are routine — and the copy says “adapted to over the last six weeks” instead of “above your usual”.

The app, the coach views and this dashboard show both clocks under the number (“Fast clock 24 · Slow clock 25”), name the one holding it down, and name the session that is the biggest piece of what your legs are carrying (“Still absorbing Sunday’s hard 4”). The coach dashboard also shows the capacity the load is graded against (“graded against what they’ve adapted to over six weeks: 8.8/day”). When both clocks read 100, nothing is limiting and Freshness is simply 100.

Freshness bands: ≥65 high · 35–64 moderate · <35 low. Same polarity as Recovery — high is green. Like Recovery, the bands only pick the column of the verdict matrix; the number is never altered.

What the numbers look like

The model’s own test vectors. Capacity is 5 easy-equivalent miles a day unless stated, Recovery is 97, and each reading is taken 14 hours after the last session (the next morning) unless stated. The bold clock is the one holding Freshness down.

Scenario Age 16 (half-lives 24 h / 96 h) Age 45 (39 h / 156 h) Verdict
Steady easy training, next morning72 (fast 73 / slow 80)67 (fast 67 / slow 77)Ready
Three full rest days95 (fast 99 / slow 95)89 (fast 94 / slow 89)Ready
Five full rest days9894Ready
One day at 2× the norm, next morning55 (fast 56 / slow 70) · absorbed in ~8h54 (fast 54 / slow 71) · ~14hSteady
Four days at 2× the norm, tonight (1 h after)30 (fast 30 / slow 43) · ~30h32 (fast 32 / slow 54) · ~38hSteady
…the next morning46 (fast 46 / slow 50) · ~21h42 (fast 42 / slow 57) · ~27hSteady
…then three rest days87 (fast 99 / slow 87)79 (fast 91 / slow 80)Ready
…or three easy days at half the norm76 (fast 89 / slow 76)71 (fast 77 / slow 72)Ready
A week-long camp at 3× the norm, next morning22 (fast 36 / slow 23) · ~62h29 (fast 30 / slow 33) · ~3 daysSteady
Four hard days in a row (real data, age 16, capacity 8.8) — Recovery 87, checked an hour after the last run23 (fast 24 / slow 25) · absorbed in ~60h · still absorbing Sunday’s hard 4—Steady
Hard every day for 90 days (capacity 12.2 — it is the norm), next morning69 (fast 70 / slow 78) at age 30Ready
No history at all (capacity floor 2.0), one easy run yesterday70 (fast 71 / slow 100) at age 30Ready

Two things to notice. First, four hard days read low tonight and moderate the next morning even for the athlete whose hard days are routine — that is the case the earlier model got wrong. Second, once the hard block stops, the slow clock takes over as the limiting one: the fast clock is back in the nineties after three rest days while tendons and joints are still at 87 (or 79 at 45). With Recovery at 97 every one of the moderate and low rows is Steady, not Ready — and with Recovery 87 the real four-hard-days case is Steady too, never Recover, because the verdict matrix never says Recover when the engine is high.

The formulas (model v6, design §2.2) — including the Hill curve

All hours; age unknown → 30. Both clocks decay the same per-workout doses — only the half-life and the window differ — and both are graded against the same capacity.

// Dose per workout { date, sam, miles?, label? }
intensity = miles > 0 ? max(1, sam ÷ miles) : 1   SAM per mile ≈ the pace multiplier vs easy
dose = sam × intensity   = miles × intensity²; a non-distance session → dose = sam
// Clocks (tissue timescales)
hF       = clamp(30 × (1 + (age − 30) × 0.02), 24, 48)   fast — muscles & glycogen
hS       = 4 × hF   slow — tendons, joints, deep fatigue (96–192 h)
FF       = Σ dosei × 0.5(hoursAgoi / hF)   over 0 ≤ hoursAgo ≤ 4 × hF
FS       = Σ dosei × 0.5(hoursAgoi / hS)   over 0 ≤ hoursAgo ≤ 4 × hS
// Capacity (what the body has adapted to)
dailyDose[d] = Σ dose on UTC day d, over the last 90 days (zero days included)
ewma         = seed with the mean of the first 14 days, then f = f + (x − f) ÷ 42 per day
C = max(2.0, ewma)   floor: 2 easy-equivalent miles/day for athletes with no history
KF = 1 ÷ (1 − 0.5(24 / hF))   KS = 1 ÷ (1 − 0.5(24 / hS))   the load a daily dose C leaves just after a session
uF = FF ÷ (C × KF)   uS = FS ÷ (C × KS)   1.0 = exactly your sustained norm, right after a session
// Scores — a Hill (saturating dose–response) curve per clock
fast = 100 ÷ (1 + (uF ÷ 1.08)1.9)
slow = 100 ÷ (1 + (uS ÷ 1.22)4.0)
freshness = min(fast, slow)   truncated to an integer for the bands
limiting   = whichever clock is strictly lower; none on a tie
absorbedIn = smallest whole hour t in 0…336 with freshness(now + t) ≥ 65, capacity held at today’s value
dominantWorkout = the session with the largest decayed contribution on the limiting clock

Why a Hill curve. The two constants per clock are the load ratio at which it reads exactly 50 (1.08 fast, 1.22 slow) and how sharply it falls past that (1.9 fast, 4.0 slow). The first shape tried, a plain exponential 100 × 0.5(u / 0.6), could not meet the targets: “steady easy training next morning ≈ 70–78” and “one 2× day next morning ≈ 50–55” differ by only 1.4× in load ratio, so a single constant cannot separate them while also reaching the mid-twenties after four hard days. The Hill form is flat below the norm and steep just above it — the shape the targets describe. Read across the curve:

u (load ÷ norm)0.250.50.671.01.251.52.03.0
Fast clock9481715443352413
Slow clock1009792694830123

u = 0.67 is what a normal daily session looks like 14 hours later at age 16 (0.514/24) — the “steady training next morning” reading of 71–72. Right after that same session u = 1.0 and the fast clock reads 54, which is why an evening check after an ordinary run says Steady and the morning says Ready. K by age: 16 → 2.00 fast / 6.29 slow · 30 → 2.35 / 7.73 · 45 → 2.88 / 9.89 · 60 → 3.41 / 12.05. The legacy single score still runs on the original fixed-48h SAM clock (acuteLegacy) so older app versions and stored history do not move.

Why two tissue clocks — the evidence

The two clocks track two layers of post-exercise physiology that the literature keeps separate, and neither is the autonomic layer Recovery already measures. HRV and resting heart rate rebound within minutes to hours of a session (Stanley, Peake & Buchheit 2013; Seiler, Haugen & Kuffel 2007). Muscle glycogen resynthesis and neuromuscular recovery — jump height, force, soreness — take 24–48 hours after hard intervals and longer after repeated sprints or eccentric work (Yang et al. 2025; Clarkson & Hubal 2002): that is the fast clock. Creatine kinase peaks a day after a marathon and stays elevated for about six days, running mechanics are still altered at 48 h, and tendon stiffness adapts and de-adapts over weeks (Kubo 2010/2012; Bohm et al. 2015): that is the slow clock. Capacity adapting over six weeks follows the same evidence from the other side — VO₂max and enzyme adaptations rise with a half-time of 10–12 days and plateau after about three weeks at a given load (Hickson et al. 1981), so what the body is “used to” is a matter of weeks, not of last month’s average.

The dose term follows the training-stress-score tradition: tissue stress rises faster than pace (the SAM pace multiplier itself is a power law above baseline, and ground-reaction and eccentric load scale with speed), so dose is super-linear in intensity. Fitness–fatigue models in the Banister tradition make the structural point: fatigue and adaptation are separate exponentials with very different time constants, and the fatigue half of the model is a useful description rather than a validated individual forecast — which is why RunIntensity pairs it with a directly observed Recovery number instead of leaning on modelled fatigue alone. The injury-prediction claims around acute:chronic ratios have not held up (Impellizzeri et al. 2020), so Freshness says “your legs are still carrying a lot, give it days” — never a probability of getting hurt.

Coming next: soreness reaches the scorer (Phase 2)

One addition is still pending, and the final number becomes the lowest of the three:

Readiness History

Two lines — Recovery snaps back overnight, Freshness drops with a workout and climbs back over a day or two when it’s the fast clock, about a week when the slow clock is holding it down. The history chart in the app and in the Coach Dashboard plots both stored values for the last 30 days with a color band for each day’s verdict. Watch the two lines diverge: Recovery climbing while Freshness is still low is the classic day-after-a-long-run picture; Recovery falling while Freshness sits near 100 is the not-load-related flag showing up as a trend. Three consecutive Steady or Recover days are a signal to pull back; one is usually noise.

Youth Training Safety (Under 14)

For athletes under 14, growth-plate injury is a cumulative-load problem — weekly volume, progression rate, and rest-day spacing — not an acute-fatigue problem. Young athletes actually recover faster autonomically than adults, so their Recovery score will often say “go” while growing bones and tendons are still accumulating stress from yesterday’s run. For that reason, a separate guardrail caps the verdict — it never changes the Recovery or Freshness measurements themselves:

The guardrail runs automatically when a birth year is entered in Settings and the athlete is under 14. When it acts, the verdict carries the line “Growing-athlete guardrail applied to today’s verdict.” so a coach can see the cap was applied — it is separate and explicit, not a hidden fudge.

Why not just lengthen the recovery half-life for youth? Because that would fight the autonomic physiology. Children and adolescents clear lactate ~30% faster and restore phosphocreatine quicker than adults (Armstrong & Welsman, 2007; Ratel et al., 2006). A longer half-life would falsely suggest they’re autonomically fatigued when they feel fine, they’d ignore the low score, and the real risk (cumulative load) still wouldn’t be caught. The guardrail is the right tool.

Stress-Adjusted Miles (SAM)

Each workout contributes a SAM value rather than raw mileage. SAM is a 5‑factor model that captures the real physiological cost of the run — not just the distance on the GPS:

SAM = miles × intensity × terrain × fatigue × surface

Training Adaptation

Readiness answers today. The training-adaptation features answer the next question a coach asks: when is the next hard session, how is the base trending, and what does the last stretch before a race look like? Everything below is descriptive or a minimum — never a prediction. The app says “earliest recommended” for the hard-session gap, “usually” for what the evidence says most athletes do, and “keeps” for what a taper maintains. There is no injury language and no “optimal” hour or day.

Earliest recommended hard session

Every completed workout is classified from its own segments — plyometrics, strength, sprints, VO₂max intervals, threshold/tempo, long run, hills, or easy — and a race milestone in the last two weeks counts as a hard session too. Each hard type carries a base recovery gap (longer for plyometrics and long runs, shorter for tempo), scaled up for a longer-than-usual or hillier-than-usual effort and by age (the same 2%-per-year-after-30 coefficient the Freshness clock uses). The earliest recommended hard session is the latest of session date + gap over the last fourteen days — so a Tuesday tempo does not shorten the gap a Sunday long run already set. The Today card and the Coach Dashboard show it as one line: “Earliest recommended hard session: Thu”, or “Ready for quality today” once the gap has elapsed and Recovery and Freshness agree (Recovery ≥ 70, Freshness ≥ 85). When the gap has passed but the morning numbers have not caught up, the line says so and asks for a Recovery check first.

Why a minimum and not a schedule. The gap is the floor the evidence supports for most athletes after that kind of session; it is not a claim about the best day. A coach can always override it — the planner only flags a quality workout that lands before the earliest recommended day, it never blocks it.

Fitness and Form

Fitness is a 42-day exponentially weighted average of daily SAM — a slow, descriptive read on the athlete’s base, shown as a 90-day line with the 6-week change (“Fitness up 8% over 6 weeks”). It rises when weeks stack and drifts down through a break; it is the same fitness–fatigue construction the Freshness clocks come from, viewed on the long clock. Form is a band, not a score — Fresh, Neutral, Fatigued, or Over-reached — read from the Freshness score and whether Fitness is holding. Over-reached means Freshness has sat low for several consecutive days or the last seven days ran well above Fitness; the guidance is to ease off and let it settle. Neither number predicts anything.

Race priority and the taper proposal

Each race milestone carries a priority: Target (★ — the race the block is built around), Supporting (the default — training continues through it), or Tune-up (raced as a workout; counts as a hard session, no taper). For the next Target race the app proposes a taper it can size from the athlete’s own history: one to three weeks depending on distance, with the longer option when the last three weeks ran above the 8-week average (the “overload” case). Weekly SAM steps down exponentially to about half of the recent average by race week; each week keeps one to two quality sessions and cuts the number of runs by at most 20%. The proposal is shown as a preview — “Week of 10/6: 38 SAM · 2 quality” — and only becomes the weekly budget when the athlete, the coach, or Coach Brady applies it. A Supporting race gets a three-day freshen-up at about 70% volume with intensity kept; a Tune-up gets nothing. Once a taper is in place the planner reads the plan against it and flags a week with no quality session, a week planning more SAM than the tapered budget, or a week that cuts sessions below the minimum — warnings, never blocks.

Volume down, intensity kept. Both the taper sizing and the “keeps quality” rule follow the meta-analytic picture: the tapers that usually help cut volume by roughly 40–60% over about two weeks while keeping frequency and intensity, and the aerobic base built over months holds for weeks when intensity is maintained even as volume drops (see the citations below).

Research & Citations

Every weight, coefficient, and threshold in the model is grounded in peer-reviewed literature or professional-society position statements. The citations are grouped by the clock they inform.

Two numbers instead of one

The previous model (v2) computed the same physiology base and the same workout-load term, then subtracted one from the other into a single score — its rationale was to avoid double-counting yesterday’s session, which the overnight signals already carry. That rationale still holds, and the split completes it: instead of subtracting load from physiology, the two are shown side by side so their divergence is visible. The legacy single score is exactly max(0, Recovery − (100 − Freshness) ÷ 2) and is still synced for older app versions; it is deprecated and will be retired. (The second number first shipped as an inverted “load” scale, higher = worse; it was flipped to Freshness so both numbers read the same way — 100 = good.)

The Recovery clock (HRV, Sleep, RHR)

The Freshness clock (muscle, tendon, bone)

Training adaptation (hard-session gap, Fitness, taper)

Load ratios describe; they don’t predict

Youth recovery physiology (ages 9–17)

Youth training safety (injury prevention)

SAM and surface multipliers

Data Sources

Every signal is read from Apple HealthKit (or Health Connect on Android) on the athlete’s phone — nothing is inferred from third-party services or stored on our servers beyond what’s needed for the Coach and Friends views.

Computed on the device, verified by the server. Recovery, Freshness and the verdict are computed on your phone from your health data. Only those results (plus the summary inputs behind them) are synced, so your coach and connected friends see the same numbers you do — the raw HealthKit samples never leave your device. The server re-runs the same published model on the summary inputs purely to check that every app version agrees; it never changes what you saw.

Where You’ll See It

Questions?

If a verdict doesn’t match what you’re feeling, the in-app detail card shows which clock is holding it — and logging soreness tells the model what your legs know. For deeper questions, reach out at support@zerodi.net — we’re always happy to explain the math.