Trainora II · A week, worked

A block, session by session, with the reason attached

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 from

Two 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 · building
Tue 07:00
15 min easy · 4 × (4 min threshold / 2 min recovery) · 10 min easykeyWhy: the first training day of your week gets the one hard session, and only when there are at least three training days — two hard days out of two is not a week, it is an accident waiting to happen.49 minutes. The repetitions are the thing that grows across the block, not the warm-up.
Thu 07:00
60 min easyeasyWhy: sixty per cent of your own recent weekly volume, split across the days that are not the long one. This is your volume handed back to you, not a target somebody chose for you.
Sun 07:00
80 min easylongWhy: the long session goes on the last training day of your week, and it is forty per cent of what you have actually been doing. If that looks modest, that is the point — it is a step from where you are, not a leap to where you would like to be.
Week two · +10%
Tue
15 min easy · 5 × (4 min threshold / 2 min recovery) · 10 min easykeyWhy: one more repetition. Adding repetitions is what building means here; holding the easy minutes flat while quietly raising the hard work would be the dishonest version of the same graph.
Thu
66 min easyeasyWhy: ten per cent on last week.
Sun
88 min easylongWhy: ten per cent on last week. Your load ramp is now being watched; above roughly 1.5 on the four-week baseline, the app will say so.
Week three · +20%
Tue
15 min easy · 6 × (4 min threshold / 2 min recovery) · 10 min easykeyWhy: the third and last build week. Six repetitions is 24 minutes at threshold, which is a real session by anybody's standard.
Thu
72 min easyeasy
Sun
96 min easylongWhy: the peak of the block. This is where form will be at its most negative, and where the chart will look worst while the training is going best.
Week four · recovery, 70%
Tue
42 min easyeasyWhy: every fourth week is lighter and the key session disappears entirely — not moved, not softened, gone. Tuesday reverts to an ordinary easy day.
Thu
42 min easyeasy
Sun
56 min easylongWhy: seventy per cent of week one, not of week three. The down week is measured against the bottom of the block, which is what makes it an actual recovery week rather than a slightly smaller hard one.

At 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 card

Separately 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:

Learning
“Still learning your response — this session is a starting point, not a verdict.”Whenever the model's confidence is below the floor. It is checked first, so nothing else can be claimed on top of too little data.
Race close
“Your race is close, so today sharpens rather than builds.”Within 21 days of a race you entered.
Loaded
“You are carrying fatigue, so today stays controlled.”Form below zero.
Base
“Your form is good and this session builds the aerobic base your goal needs.”Everything else.

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.


When you miss a day

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.

When you overshoot

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.

When you are ill

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