Trainora III · On the wrist

What travels to the watch, and what does not

There are two separate things on your wrist and it is worth keeping them apart. One is the session itself, handed to Apple's own workout scheduler so the watch counts your intervals down for you. The other is a small Trainora app that shows today's plan and two numbers. Neither of them computes anything.

Sending a session, step by step
One
You open a session and tap Send to my watch.If this device cannot talk to a watch at all, the button is not there and the screen says so: This device cannot send workouts to a watch.
Two
Permission, once.Scheduling workouts is its own authorisation, separate from Health. If it has been refused: Trainora is not allowed to schedule workouts on your watch. You can change this in Settings.
Three
The prescription is translated.This is the interesting part, and the next section is about nothing else.
Four
It is scheduled at the exact minute the plan put it at, in your own calendar.Year, month, day, hour, minute. A workout that lands on the wrong day is one you will not find when you go looking for it.
Five
You are told what did not survive.Sent. It will be waiting on your watch. — and, if anything was lost, a short list of exactly what.

From there the session lives in the watch's own workout experience, scheduled through WorkoutKit: warm-up, intervals with their counts, recoveries, cool-down, counted down for you so that you are not doing arithmetic at threshold. Trainora does not run it and does not record it. Whatever the watch saves goes into Apple Health, and Trainora reads it back from there like any other session — which is the same path a Garmin or a Strava recording takes.

A Trainora session screen showing a key 10 km test: a prominent Send to my watch button, then the steps — ten minutes warm-up in the endurance zone, 10 km at threshold with a 178–186 bpm target, ten minutes cool-down.
A session ready to send, in the French build. The steps are listed exactly as they will be run: warm-up, the effort with its written heart-rate range, cool-down. The amber line above the button is a caveat about the chart, not about the watch — steps measured in distance cannot be drawn on a time axis, so the app says so instead of drawing something misleading.
The translation, and why anything is lost at all

A Trainora prescription is a tree. 6 × (3 min hard / 2 min easy) stays legible as a repeat, and repeats can nest inside repeats. What the watch accepts is flat: one optional warm-up, a list of interval blocks each with a repetition count, one optional cool-down, and one alert per step. Almost everything difficult here comes from that mismatch.

The rule throughout is that whatever does not survive is counted and reported, never dropped in silence. A session whose pace targets quietly did not travel is worse than one that never arrived, because you set off believing the watch will tell you when you are off pace and it will not. These are the real messages, in the app's own words:

“A watch shows one target per step, so only the first of each prescription travels.”
Where a step carried several facets — a pace and a heart rate, say — one alert goes and the rest do not. The message names which was kept.
“Zones without a written range are not sent — a watch uses its own zones, not ours.”
The watch's zone numbers are derived from the wearer's own Health history, not from Trainora's five-zone model. Passing zone 4 straight through would put you in a different zone from the prescribed one, displayed with the authority of a number the app computed. Refusing to map it is the honest option; the fix is to prescribe the range, which you can.
“Perceived effort has no equivalent on a watch.”
Common on strength and pool sessions, where it is often the only target written.
“Repeats inside repeats were unrolled — the session is identical, its shape is flatter.”
3 × (2 × (A/B)) becomes one block of A B A B run three times. Same session, coarser shape.
“A warm-up or cool-down inside the session became an ordinary step.”
There is exactly one slot for each, at each end. A second warm-up in the middle of a session still happens; it is just no longer labelled as one.
“Your watch does not support one of the targets for this sport.” / “One step became open-ended: your watch does not support its goal.”
Measured rather than assumed — a power alert on a swim genuinely comes back unsupported. An energy goal on a run is another. The step becomes open-ended rather than disappearing.

These are de-duplicated by kind rather than listed per step. A session of twelve intervals whose pace was dropped would otherwise produce twelve identical lines, which reads as twelve problems and buries the one that matters.

The watch app itself

One screen. It shows what the phone last said about today: the session, its planned size, its dominant zone, whether it is the key session — or a rest card, or a plain statement that there is no plan yet and where a plan gets made, since nothing on the watch can create one.

Under that, at most two numbers: fitness and form. They arrive from the phone with the value already removed when the phone was not willing to state it, so nothing on the watch decides what is presentable. There is one confidence ladder and it lives on one side.

The last delivery is kept on the watch, so a session started on a morning run with the phone left at home still shows what was planned rather than a hand-off screen. But a snapshot only describes the day it was built for: past midnight it stops being old and starts being wrong, so it expires and the screen falls back to Open Trainora on your iPhone, with the timestamp of the last thing it heard — As of 18 Aug, 07:12 — rather than implying it is current.

What the watch app cannot do One thing that cannot be tested without hardware

Everything above the scheduling call is verified by tests: the translation, every loss it can report, and the checks against the system's own support predicates — which are not politeness. Attaching an alert the watch refuses does not degrade gracefully; it stops the process dead. That was established by removing the check and watching a test process die rather than fail, which is why the check is there.

The handing-over itself needs a paired watch and cannot be verified on a development machine. It is also the step with no decisions in it. If a session does not arrive, the causes are almost always ordinary: the watch app not installed, the devices out of range, or scheduling permission refused.

Next: limitations — the page I would read first if I were deciding whether to trust this app.

Also in this notebook: the front page, the model, a week worked through, questions, the changelog, support, privacy and terms.

© 2026 Oshi Lab · contact@oshi-messenger.com