Run315

Does the engine hold up

What this is measured against

3:58 /km
Critical speed
The pace you could hold for roughly half an hour to an hour.
54m
Reserve above it
The finite distance available faster than critical speed.
193bpm
Highest heart rate seen
Taken from your training, so it is a floor on the real one.

Critical speed is fitted to your own best efforts of two to fifteen minutes (Smyth and Muniz-Pumares, MSSE 2020). It is not a race predictor — extrapolated to a half marathon it reads far too fast, because critical speed is only sustainable for half an hour or so. The race projections on the dashboard use a different model, and should.

Over this block

18 comparable long runs

You are holding together better over distance than you were.

1.19
Earlier half
1.14
Recent half
1.09
Best

Only runs within a fifth of your longest are compared. Durability over eighty minutes and over three hours are not the same measurement, and the literature has not settled how to make them one.

Long runs

40 with enough distance to measure

How far your heart rate drifted away from your pace between the early part of the run and the late part, with both sides expressed as a fraction of your own ceiling. 1.00 means the same pace cost the same effort at the end as at the start.

RunDistanceDrift How muchFade beganEffort
Run
2026-09-06
25.4 km 1.16 20.3 km 78%
Run
2026-08-30
19.5 km 1.10 77%
Run
2026-08-23 · 21°C
20.1 km 1.14 18.1 km 76%
Run
2026-08-16 · 22°C
19.9 km 1.13 76%
Run
2026-08-09 · 22°C
18.9 km 1.28 15.1 km 75%
Run
2026-08-02 · 23°C
22.7 km 1.14 76%
Run
2026-07-26 · 24°C
18.1 km 1.23 14.5 km 75%
Run
2026-07-19 · 24°C
18.8 km 1.24 15.0 km 76%
Run
2026-07-12 · 24°C
17.9 km 1.12 16.1 km 74%
Run
2026-07-05 · 24°C
21.3 km 1.09 20.2 km 75%
Run
2026-06-28 · 24°C
20.9 km 1.12 16.7 km 74%
Run
2026-06-21 · 23°C
21.7 km 1.25 17.4 km 76%
Run
2026-06-14 · 23°C
20.9 km 1.10 19.9 km 75%
Run
2026-06-07 · 22°C
20.8 km 1.13 16.6 km 76%
Run
2026-05-31 · 21°C
22.6 km 1.16 75%
Run
2026-05-24 · 20°C
18.9 km 1.29 15.1 km 76%
Run
2026-05-17
22.3 km 1.22 17.8 km 76%
Run
2026-05-10
22.3 km 1.26 17.8 km 76%
Run
2026-05-03
22.2 km 1.19 17.8 km 77%
Run
2026-04-26
16.2 km 1.08 76%
Run
2026-04-19
21.9 km 1.20 17.5 km 77%
Run
2026-04-12
17.2 km 1.33 13.8 km 75%
Run
2026-04-05
19.5 km 1.25 15.6 km 77%
Run
2026-03-29
16.3 km 1.07 15.5 km 76%
Run
2026-03-22
18.7 km 1.06 77%
Run
2026-03-15
16.9 km 1.17 75%
Run
2026-03-08
15.6 km 1.07 10.1 km 79%
Run
2026-03-01
16.8 km 1.11 16.0 km 75%
Run
2026-02-22
18.7 km 1.18 75%
Run
2026-02-15
16.9 km 1.32 13.6 km 75%
Run
2026-02-08
19.1 km 1.14 76%
Run
2026-02-01
20.2 km 1.09 76%
Run
2026-01-25
20.9 km 1.18 16.7 km 75%
Run
2026-01-18
17.3 km 1.12 16.5 km 75%
Run
2026-01-11
18.4 km 1.14 76%
Run
2026-01-04
15.5 km 0.87 77%
Run
2025-12-28
16.4 km 1.17 13.1 km 75%
Run
2025-12-21
19.9 km 1.24 15.9 km 76%
Run
2025-12-14
19.7 km 1.10 18.7 km 75%
Run
2025-12-07
19.9 km 1.23 75%

Effort is your average speed as a share of critical speed. “Fade began” is the first point where the drift passed 2.5% and stayed there. A blank means it never did.

Run

most recent measurable long run

16% drift between the start and the end: the ordinary amount of fade for a long run.

What this number is not

It is not comparable with anyone else’s. Fast runners race at around 96% of critical speed from the gun and have no room to drift, so their fade shows up as slowing rather than as a climbing heart rate. Men decouple more than women, and earlier. The bands here come from a study of 82,303 recreational marathon runners, and the thresholds in it are described by its own authors as arbitrary.

It is also not a health measurement, and a single run says little. What is worth reading is the direction across a block of similar long runs.

, so the check has to wait for the parsed document. addEventListener('DOMContentLoaded', function () { try { var dm = ['standalone', 'minimal-ui', 'fullscreen', 'window-controls-overlay']; if (!document.getElementById('frozen-note') && (navigator.standalone || dm.some(function (m) { return matchMedia('(display-mode: ' + m + ')').matches; }))) { var pk = 'portal-installed', reg = JSON.parse(localStorage.getItem(pk) || '{}'); reg.Run315 = Date.now(); localStorage.setItem(pk, JSON.stringify(reg)); } } catch (e) { /* private mode - ignore */ } }); // Installable, and readable on the train. See templates/sw.js. if ('serviceWorker' in navigator) { addEventListener('load', function () { navigator.serviceWorker.register('/Run315/sw.js'); }); }
Static demo. A synthetic athlete, frozen to files — every page here is the real app rendering real analysis, but anything that writes (Garmin sync, adding a race, the coach review) is switched off, because a file server has nothing to write to. Source & how to run it for real.