Trainora IV · Limitations

What this app cannot do, on its own page

Most of what follows is also said inside the app, on the panel behind each number. It is collected here because a limitation you have to discover by being wrong is not really disclosed at all.

First and plainly
Not a medical device

Trainora is a training tool. It is not a medical device, it performs no diagnosis, and nothing it displays is medical advice. It does not detect illness, does not predict injury, and will never tell you that you are overtrained as though that were a fact. If something hurts, the app is not the authority to consult.

Training carries physical risk, and deciding whether a prescribed session is appropriate for you today is your judgement, not the app's. If you have a medical condition, are injured, are pregnant, or are coming back after a long break, speak to somebody qualified before following any plan — including this one.

Apple Health: read only, and narrowly

Trainora asks for read access and never asks for write access. The permission screen says so in those words: Trainora never writes to Apple Health. It only reads what other apps have already saved there, and this permission is one it does not ask for. You can confirm it yourself in Settings, where Trainora will have no write toggles to grant.

The read set is short, and it is exactly this:

Workouts
The workout samples themselvesStart, duration, distance, sport, and the name of the app that wrote them — “Strava”, “Wahoo Fitness”, “Apple Watch”.
Heart rate
Beat-by-beat heart rate
Resting HR
Resting heart rate
HRV
Heart-rate variability (SDNN)
Distance
Walking and running distance

Nothing else. No sleep, no body mass, no VO₂ max, no route or location data. If you have seen a longer list in an older version of this site, that list was the design document's ambition rather than the shipped app's behaviour, and this page is the one that matches the code.

Only six sports are recognised: running, cycling, swimming, hiking and the two strength-training categories. A trail run arrives from Health as an ordinary run, because Health has no trail-running type — the distinction Trainora draws simply does not exist on the other side of that boundary. A yoga class or a long walk is real training to the person doing it, but scoring it against a running threshold would put a number on your fitness that means nothing, so it is left out rather than mislabelled.

If you deny Health access

The app still works, and there are three ways in for your training:

There is one thing you should know about denial that is a property of iOS rather than of this app: an app cannot ask iOS whether Health read access was granted. The system deliberately answers "not determined" either way, so that an app cannot infer from a refusal that you have something to hide. The consequence is that an empty result and a refused permission look identical from in here. Trainora therefore never treats "no workouts" as an error, never tells you that you have denied anything, and never nags — an athlete who simply has not trained gets the same screen. It also means that if your data is not appearing, checking the permission yourself in Settings is genuinely the first thing to do, because the app cannot check it for you.

Where the model is weakest
It treats all stress as one currency
Load has no idea about life stress, heat, altitude, dehydration, travel or illness. A session run at thirty-one degrees on four hours' sleep scores the same as the identical session run fresh in the cold.
Heart-rate load is the most distorted estimator
Cardiac drift inflates the second half of every long session. So do heat and caffeine. And if your maximum heart rate is an estimate rather than something you have actually seen, the whole scale it is measured against is off. None of this is correctable from here; all of it is stated as reduced confidence rather than silently absorbed.
It underestimates short, very hard efforts
Heart rate lags effort by design. A set of thirty-second maximal repetitions is over before heart rate has caught up, so it scores lower than it cost you.
The perceived-effort anchor is a choice, not a measurement
Effort 7 is treated as threshold. That is deliberately conservative and it is why a session logged this way never rises above low confidence. If you habitually rate effort higher or lower than most people, your loads from this route will be systematically high or low.
The time constants are population averages
42 days and 7 days are defaults, not truths about you. Some people clear fatigue faster. The values are tunable, but tuning them honestly requires more evidence about yourself than most people have.
The first six weeks understate everything
An exponential average starting from zero takes about six weeks to approach the level your training actually supports. Early figures are low by construction. The confidence label is the app's way of saying so; it is not a soft warning about data quality, it is a statement that the number is not yet the number.
A session you did not record did not happen
As far as the model is concerned. There is no credit for training that never reached Health and was never entered.
Monotony, strain and the load ramp need complete weeks
All three are computed only over full calendar weeks, on both sides of the comparison. The current week — the one you are living in — contributes nothing to the ramp until it is finished.
The plan is four weeks and rule-based
There is no season plan, no periodisation across months, and no machine-learned anything. The generator is a handful of rules you can read on the worked-week page, and it writes one block at a time.
The adjustment engine offers one thing or nothing
Two rules fire: a session inside a period you declared unavailable, and a key session that passed with nothing recorded. Both propose a move, within two days, and nothing else. Silence is the common answer and the honest one.
Thresholds: the thing people get stuck on

Heart-rate load needs max, resting and threshold heart rate, all three. It works in heart-rate reserve, so a threshold on its own has no denominator and the method is not offered. The setup screen says this before you hit it, not after: Without all three, your sessions carry no load and the Progress tab stays empty. The import screen says it again: Set your max, resting and threshold heart rates first — a load is measured against them, and without all three your sessions import with no load at all.

Threshold pace is used for zones and for prescriptions, but it feeds no load estimator at all. Threshold power, on the other hand, is enough on its own.

Each value is marked as measured, entered or estimated, and an estimated one costs a step of confidence on everything computed from it.

What syncs, and what does not

If you are signed into iCloud, your training mirrors to your own iCloud private database — Apple's CloudKit, your account, under Apple's transport and at-rest encryption. There is no server operated by me, and I have no ability to read any of it. If you are not signed in, the app says so plainly on the profile screen — Not signed into iCloud — your training stays on this device only — and everything stays local.

What syncs is what Trainora holds: your sessions, your plan, your thresholds, goals, notes and logged strength work. What does not sync is your Apple Health data, which is not Trainora's to move and which Health syncs on its own terms.

Sharing your training with a coach is built and tested but does not ship in 1.0. The coach's side is a Mac app that has not been submitted, so an invitation would be one nobody on earth could accept. Rather than show a control that cannot complete its purpose, the feature is withheld entirely — not just the button, but the whole transport underneath it, so nothing is published to iCloud for a relationship that cannot exist. The card on the profile screen reads No coach has access to your training, with no field and no button, and that is the literal truth of this release.

Deleting, exporting, and what survives

One action, called Delete everything. Its own description: Removes every session, plan, threshold, goal, note and coach link from this device and from your iCloud. It cannot be undone, and nothing here is kept anywhere else.

And immediately beneath it, the part that matters: Your Apple Health data stays in Health. Trainora only ever read it — deleting here does not delete anything Health holds. If you want those samples gone, that is done in the Health app, and no third-party app can do it for you.

Separately there is Export my data: one file with sessions, plan, thresholds, goals, notes and movements, in open JSON you can read yourself or take elsewhere. No support ticket, no waiting period, no export queue.

Deleting the app removes its local store with it. If iCloud sync was on and you want the iCloud copy gone too, use the in-app deletion before you delete the app.

And one about this website

The screenshots on these pages are from real builds of the app, in the French localisation, which is why some of them are in French — the app ships English and French. Where a page shows a chart of the model rather than a screen of the app, it says so, and that chart is drawn by running the real recurrence over a synthetic history. Nothing on this site is a mock-up of a feature that does not exist.

Next: questions — the specific ones, including several that are really this page asked in a different way.

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

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