v0.3.1 — Assisted-machine sign fix & non-English CSV coverage
Two related hotfixes from community feedback on v0.3.0. No breaking
change, no engine architecture change — mostly non-English users
benefit.
🐞 Bug fix — assisted-machine sign
Assisted pull-ups, chin-ups and dips (Assisted / Assistée /
Band / equivalents in FR / ES / DE / PT / IT) were treated as
added weight instead of subtracted when the CSV title didn't
exactly match the English template catalog. Result:
more assistance = higher Back / Chest score, which is obviously
backwards.
The engine now detects assisted / weighted bodyweight variants
directly from the title using a multilingual keyword list, and
overrides the load semantics accordingly. Assistance that meets or
exceeds bodyweight now correctly skips the set (was silently
producing 0 before).
Big thanks to the Reddit user who caught this — it's exactly the
kind of feedback that makes the project mature.
🌍 Non-English CSV coverage (ES + DE + PT + IT)
Hevy's exercise catalog is English-only, so users on other Hevy
locales were bleeding accuracy in three places. All three are now
fixed:
- Muscle group inference (
GROUP_HINTS): Spanish, German,
Portuguese and Italian keywords added across all groups and the
cardio/mobility skip list. 36 multilingual test cases pass. - Per-exercise coefficients (
GROUP_COEFFS): same
multilingual pass on the coefficient table, so aPrensa/
Beinpresse/Pressa Gambepicks up the leg-press coefficient
(3.0) instead of falling through to the group default (which was
over-crediting foreign users on machine-friendly lifts). - Fuzzy catalog lookup:
buildCatalog()now indexes each
template by a canonical form (sorted tokens, parens stripped)
so titles likeBarbell Bench Pressmatch
Bench Press (Barbell), and so on.
🇩🇪 German compound words
matchesWord() now allows a trailing compound tail for single-word
needles of ≥ 5 chars, so Bankdrucken / Bizepscurl /
Schulterdrucken match their base keywords (bank, bizeps,
schulter). Multi-word needles stay strict.
🧹 Also
corda(PT/IT jump rope keyword) no longer incorrectly skips
triceps rope pushdowns.- Many missing EN/FR variants added (
Meadows Row,
Landmine Press,Belt Squat,Muscle Up,Cable Crossover,
Farmer Carry,Ab Wheel,Sissy Squat,Pallof Press, etc.). bodyweightFraction()extended to cover FR/ES/DE/PT/IT variants
of pull-up / squat / push-up so bodyweight-only sets stay
scorable across languages.
Upgrade notes
Existing users' ranks are essentially unchanged — the ranking
engine, coefficients and thresholds are the same as v0.3.0.
Non-English users will see more accurate ranks (previously
over-inflated on assisted work and machine-friendly foreign
titles). No action required.
Full changelog
See CHANGELOG.md.