Furlong · the engine, step by step
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.
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.