RIRLift recovery and volume balance

Reference material for an AI handed a RIRLift recovery pack. The glossary — RIR, hard sets, weighted volume — is on the analysis page.

Nothing here is personal or instructional. The pack works from its own inline text.

What "freshness" is

RIRLift models recovery as exponential decay of recent hard-set load, per muscle, with a time constant set by that muscle's recovery class:

decayed_load += session_load × effort × exp(−hours_since / τ)
freshness     = clamp(1 − decayed_load / reference_load, 0, 1)

Muscles are assigned a recovery class — fast (biceps, triceps, calves, forearms, abs, neck, shoulders), medium (traps, adductors, abductors, lower back), or slow (chest, lats, upper back, quads, glutes, hamstrings) — and each class recovers on its own time constant. Sets taken to failure count for more.

freshness runs 0 (just worked) to 1 (fully recovered). RIRLift's own thresholds: needsRest < 0.34 ≤ working < 0.75 ≤ fresh.

What it is not

It is a model over logged sets, not a measurement of a body. It knows nothing about sleep, stress, nutrition, soreness, illness, or age — the app does not collect them. It cannot tell a lifter how they feel, and neither can you from this data. If they say they feel wrecked and the model says "fresh", the lifter is right and the model is a curve fitted to set counts.

The thresholds and time constants are RIRLift's own tuning choices. They are a reasonable default, not a scientific finding, and not personalised.

Absent means untrained, not fresh. Muscles that were not trained inside the lookback window are missing from the table entirely.

Secondary accumulation

Per-muscle load is weighted: primary movers count 1.0, secondary movers 0.5. A muscle is flagged for secondary accumulation when most of its load arrived as a side effect of other lifts rather than from direct work — enough of it, and mostly indirect.

It is a description of where load lands, not a verdict. Whether it matters depends on the lifter's goals, which the pack does not carry.

Whose advice is it

RIRLift makes no recommendation from this model. It computed a decay curve over sets someone typed in. Any conclusion about what to train next is the AI's, and belongs to the lifter to accept or reject.