Skip to content

v3.9.0 — Workout names that tell you what they are

Choose a tag to compare

@github-actions github-actions released this 08 Aug 21:02
· 83 commits to clean-main since this release
  • Every workout is now named for its structure. The library had 408 files called threshold_clean_<N>min and 234 called endurance_clean_<N>min, told apart only by their length — sorted in a folder they were indistinguishable, and the one thing you want from a name was the one thing missing. All 4,306 workouts now read like threshold_4x8min-4min_98pct_62min: the class, the structure, the intensity, the duration. The worst pile of identical names went from 86 files to 8.
  • The structure is read from the workout itself, not from its old name. Which matters, because the old names were often simply wrong: one called anaerobic_18x2min_60min is really 90 seconds at 97% alternating with 30 seconds at 119%, and runs 66 minutes.
  • Interval sets keep their shape. A Rønnestad 4×9 is named 4x9x30s-15s, not 36x30s-15s. Thirty-six reps straight through is a different session from four sets of nine — the recoveries between sets are most of what makes the protocol work — and "4x9" is what you search the folder for. 423 workouts carry a set count.
  • Ladders say so, with their rung count and their top rung. They used to be named after whichever block repeated most, which on a ladder is the cadence warm-up: one session running 108% to 154% was filed as "3x30s at 82pct", and two completely different ladders collided onto the same name.
  • Fixed: the plan stopped adapting the moment you stopped riding. Missing a day is the absence of a ride, but the whole catch-up routine only ran when a ride arrived — so the rider who most needed the plan to react was the one it ignored. Sessions were never marked missed, nothing was rescheduled, and the week kept the shape it was generated with until you pressed Update plan by hand. It now also runs once a day, so a day that passed unridden is noticed on its own.
  • Fixed: missed sessions could be forgotten again minutes later. If two syncs landed within five minutes of each other, the second one discarded the missed-day bookkeeping the first had just done.
  • Fixed: "Plan rebalanced to today's fitness" when nothing had been rebalanced. After a missed week the plan would report that it had adjusted while being completely unchanged. It now says when there was nothing to change.
  • Fixed: on Linux, Domestique could show you a different program's web page. It served on port 8080 and decided it was "already running" if anything at all answered there. A tester on Pop!_OS had another program on 8080, so the window opened onto that program instead — no intervals.icu prompt, no error, and nothing to send us. Domestique now checks that the thing answering is actually Domestique.
  • Domestique has moved to its own port and no longer fights for one. It serves on 127.0.0.1:22400, falls back to two alternatives if something already has it, and remembers which one worked so the address stays put. Nothing to configure; set DOMESTIQUE_PORT if you want to choose. If every port is taken you now get a dialog naming them, instead of the app dying with no message at all.
  • Fixed: losing the port killed the app silently. Launched from a desktop icon there was no terminal to print to, so it exited with nothing on screen and nothing on disk.