Furlong · the engine, step by step

One question at a time, until one of them answers

Read it downward. Each step asks one question about your training; a "no" carries on down the line, and the first "yes" decides the day and stops — every question below it goes unasked. The dials sit on the questions that read them, so you can change an answer and watch where the line stops instead.

Today Easy
The day begins
Who's running — this sets the limits the questions below compare against.
Level Age
Then, and only then
Overnight signals — can only narrow, never extend—
Strength placement—
Single-session ceiling—
Sleep, resting HR and HRV

This page ports the cascade — the ordered questions and their thresholds — from the app's own engine, written in Swift, into JavaScript. It does not re-derive the training metrics from a run history; those are the dials. A hand-written port drifts, so it is checked rather than asserted: the Swift test suite dumps the metrics it computed plus the rule that fired for a spread of situations, and this page replays every one through the JavaScript on load. The line above is computed in your browser.

Two caveats, so the number isn't oversold. The down-week and progression flags are derived from the calendar and run history inside Swift, so the replay supplies them rather than re-deriving them — the check verifies the ordering, which is what decides your day. And distances round independently here, so treat them as indicative to within half a kilometre.