v1.4.0: strength tiers
The "am I strong?" release.
liftmath tier --sex m --bodyweight 82 --total 500 now places a squat/bench/deadlift total against Strength Level's published powerlifting-total standards (5th/20th/50th/80th/95th percentile bands), interpolated to your bodyweight, kg or lb. standards --tier folds the same answer into the existing strength-score report, and the web app's Standards tab grew a matching section.
The caveats ship with the feature instead of hiding in a footnote: the source data is Strength Level's user population (people who log their lifts, which skews strong), between-bracket values are linearly interpolated, and out-of-range bodyweights get clamped and flagged rather than silently extrapolated. The numbers come from the published TOTAL tables, not per-lift tables summed together - summing overestimates the low tiers by up to a third, so we didn't.
Also in this release:
- a version-sync CI guard, so CITATION.cff can't quietly disagree with pyproject.toml again (it had been stuck on 1.0.0 for two releases before anyone noticed)
- CI actions bumped off deprecated Node 20 runners, pinned by SHA as usual
435 Python tests, 372 JS parity tests, all guards green. First release with an outside contributor's work in it too: rep-fraction entries for pendlay rows, landmine presses, nordic curls and friends, from #4.