e1RM policy changelog
3.0.0 — 2026-09-04
Breaking update that keeps the pinned Nuzzo 2024 curve and replaces the five-band perceived-effort input with a single RPE number (issue #1237).
- The effort input is
exercise_sets.perceived_rpe(1.0..10.0, one decimal). Thelift-guild.perceived-effort@1.0.0five-level wire contract is retired; stored levels were converted once asRPE = level + 5. - RIR is derived directly as
10 − RPE. RPE ≥ 6.0 is a closed RIR (medium confidence inside support); RPE < 6.0 keeps an open upper bound (low confidence); a missing RPE keeps the conservative RIR 0 open estimate. - Half steps (8.5 → RIR 1.5) feed effective repetitions directly through the source-knot inverse interpolation.
- Legacy difficulty (June–July 1..10 numbers) was converted once at cutover (≤3→7, ≤6→8, ≤8→9, else 10) and the column was dropped; raw values stay in
raw_payload.legacy_difficulty. - Requires a full historical strength-projection replay.
2.0.0 — 2026-08-12
Breaking update that keeps the pinned Nuzzo 2024 curve and changes how observed repetition failures contribute strength evidence.
- Positive-repetition failures now use actual completed repetitions with observed
RIR 0and participate as medium-confidence e1RM candidates inside the supported range. - Subjective effort is ignored for failed sets because the failed next repetition is the stronger effort observation.
- Zero-repetition failures remain non-voting
censored_highobservations and retain the attempted load as a finite upper bound. - Measured
1..20RMfacts remain based on actual completed repetitions and stay separate from e1RM and PR notifications. - Requires a full historical strength-projection replay.
1.0.0 — 2026-07-24
Breaking hard cutover from the legacy universal Epley estimate to the pinned Nuzzo 2024 general inverse population curve.
- Added the application-owned
100%1RM = 1 repetitionanchor. - Added direct inverse piecewise-linear lookup from source knots, including fractional effective reps.
- Added the five-level RIR range contract, missing/legacy safeguards, aggregation and stale rules.
- Added explicit
training | rm_testsession intent without changing the v1 estimation formula. - Defined failed attempts as low/censored e1RM evidence while preserving positive actual completed repetitions as measured NRM facts; zero-repetition failures create no NRM.
- Kept e1RM separate from measured
1..20RMPR state/events and required a full replay.