The athlete in this example has finished their first block and has been recording about 200 minutes a week. They train Tuesday, Thursday and Sunday. They completed most of what was asked of them last time. Everything below is what the generator produces from those facts — the minutes are arithmetic, not editorial.
Where the numbers come fromTwo figures drive the whole block. The long session takes roughly forty per cent of the weekly volume, so 200 minutes gives eighty. The remaining sixty per cent is split across the other training days, so 120 minutes over two days gives sixty each. There are floors under both — forty-five minutes for the long one, thirty for an easy day — so a very small week does not collapse into something pointless.
Week one · buildingAt the end of this the plan says: Your block ends here. The next one starts from what you have actually been doing these past weeks, not from where you began. That is the loop. There is no season plan behind the curtain that this is a window onto; there is only one block at a time, each written from the evidence the last one produced.
One more rule worth knowing: if you have entered a race, nothing at all is scheduled on race day or in the two days before it. The plan you are following must not be the reason you arrive tired.
The sentence on the Today cardSeparately from the plan, the app's Today screen carries one sentence explaining why today is what it is. There are four of them, and which one you get is decided by a rule you can check:
Four templates, not a generated sentence. A template that is always true beats a fluent sentence that is sometimes invented, and I would rather you found this page slightly underwhelming than found the app confidently wrong.
First, the reconciliation rule, because everything else depends on it: a planned session and a recorded one are matched by calendar day and sport, not by timestamp. A session planned for Tuesday morning and run on Tuesday evening is that session, whatever the clock says. Each recorded session matches at most one planned session, and the pairing is deterministic, so the same week never reconciles two different ways on two devices.
Miss one ordinary day and nothing happens. The plan does not panic, does not send you a notification about your streak, and does not silently pile the session onto tomorrow. The day is simply recorded as missed, and it decays your fatigue exactly as a planned rest day would.
Miss a session marked key, and within two days you will see one suggestion. Just one: A key session went by with nothing recorded. Move it to Thursday? with Move it and Leave it. Two days is the whole rescue window, because a threshold session pushed a week lands in the middle of whatever was planned there, and proposing that is how an adjustment engine starts making a mess you have to clean up. If there is no free day inside the window, the app says nothing rather than proposing a pile-up.
If you decline, that question is never asked again. The decline is keyed on what was proposed — this signal, this session — rather than on when it was proposed, so recomputing the screen cannot mint a new identity for the same question and ask it a second time. Declining one session's move also does not suppress a different session's; each refusal silences exactly the decision it was about.
Miss a week or more and there is a blunter tool: Missed some training? pushes everything still to come back by a few days or by a week. Sessions already past stay exactly where they are, because they are the record of what happened and rewriting them would make the history a fiction. It is one action and there is an undo.
The engine will only ever offer you one proposal at a time. A screen offering three adjustments has stopped being a suggestion and become a review queue, and a review queue is a thing nobody reads by the second week.Sessions you did that were not on the plan are counted, and counted separately from the ones you missed. This sounds like bookkeeping pedantry; it is not. If extras were netted off against misses, a week where you skipped the key session and added two easy runs would read as a complete week. It reads as what it was instead: one key session missed, two unplanned sessions done.
Adherence is matched sessions over planned sessions. A week with nothing planned scores zero at insufficient confidence — never 1.0. "Nothing planned, therefore perfect adherence" is the kind of flattering nonsense that destroys trust in every other number in an app.
The consequence arrives at the end of the block, when the next one is generated. Your weekly volume is taken from what you actually recorded, so extra work does raise the next block — that is the honest mechanism, and it is slow on purpose. And there is a brake in the other direction: if you completed less than two thirds of the last block, the next one does not add ten per cent and the key session does not gain a repetition. Volume holds until you are on top of it. Adding ten per cent to a block somebody could not complete is how an app talks itself into prescribing a season nobody is training.
The load ramp figure is the early warning for the other direction: the latest complete week against the average of up to four before it, with anything above about 1.5 in the range usually described as where injury risk rises.
The app cannot tell. It has no illness detection and it makes no claim to have any — there is no resting-heart-rate trigger that decides you are unwell, and if there were, you should not believe it. What it has is a screen called When I can't train, where you declare a period and give it a reason: Away, Injured, Ill, or Something else. Dates are inclusive at both ends, because that is how a person says it.
The screen's own words, when nothing is declared, are these: Nothing declared. If you are away or hurt, say so here — the plan cannot tell the difference between a quiet week and a broken ankle.
Declaring a period does two things. It marks those days as ones you cannot train, and it changes what the app tells you to expect. For Away: Trainora will move the work rather than drop it. For Ill or Injured: Trainora will rebuild what comes next, not just shift it — coming back from this is not the same as coming back from a holiday.
Be precise about what that means in this release. The declaration is the strongest signal the engine has, and it outranks anything inferred from your silence — so where a session falls inside a period you declared, the app proposes moving it to the first free day after the absence that has nothing else on it, keeping the hour you train at, within the same two-day window. Where it cannot find such a day, it says nothing. The rebuilding after illness or injury is not an automatic rewrite of the remaining weeks in 1.0: it is the next block, generated from the volume you actually recorded, which after a fortnight in bed will be a much smaller number than before it. The distinction between "move it" and "rethink it" is carried through the app and shown to you; the rethinking itself happens at the block boundary, and I would rather you knew that than discovered it.
If something hurts, none of this is the authority to consult. See the limitations page, which says so at more length and means it.
Next: on the wrist — how a session written here becomes something your watch counts down for you, and the parts of it that do not survive the journey.
Also in this notebook: the front page, the model behind these numbers, where this is weakest, questions, the changelog, support, privacy and terms.
© 2026 Oshi Lab · contact@oshi-messenger.com