fix: correct biomechanical form across 14 movements - #28
Merged
Conversation
Form corrections from a movement-library review, keeping the spine neutral under load, fully extending 'straight' limbs, and adding missing supporting- foot ground-locks so single-leg poses don't drift: - squat/box-squat/chair-pose: replace lumbar rounding (spine: flex) with a hip hinge + neutral/slightly-extended spine (real athletic squat form). - forward-lunge: deepen the trailing knee (flex 45 -> 80) and add a small forward travel so it reads as a lunge, not a static split squat. - bent-over-row: hang the arms from shoulder flex ~65 (arms vertical over a 70-deg hinge) instead of shoulder extend 55, which threw them backward. - pull-up: bring shoulders down toward the bar (flex 150 -> 105) during the pull instead of holding them locked overhead. - crunch: reduce neck flex 20 -> 8 (less chin-tuck). - seated-forward-fold: hinge at the hips (flex 90 -> 115) and cut spine flex 60 -> 25 so it folds instead of slouching from the mid-back. - bicycle-crunch/dead-bug: straighten the 'long' leg (knee ~5) and add chest counter-rotation so the twist reads. - glute-bridge: raise hip extension 15 -> 20. - single-leg-calf-raise/standing-hamstring-curl/standing-quad-stretch: add ground-lock: feet so the stance foot stays planted. All ground-lock/pin changes use the real DSL vocab (groups 'hands'/'feet'); per-foot ground-lock names the reviewer suggested (foot_left) are not valid ground-lock effectors, so supporting-foot locks use the feet group with the existing near-floor planted-foot filter. 194 tests + 361/361 eval pass.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Applies form corrections surfaced by a movement-library review (analyzed with an external LLM, then verified against the actual DSL grammar, ROM tables, and the live renderer before applying). I rejected the report's suggestions that were factually wrong for this codebase — details below.
What changed
Neutral spine under load (the report's strongest, correct point):
squat,box-squat,chair-pose: replaced lumbar rounding (spine: flex) with apelvis: hinge+ neutral / slightly-extended spine. The forward lean now comes from the hips, not a rounded back — real athletic squat form. Verified in the viewer: torso is upright, chest proud.Lunge reads as a lunge, not a static split squat:
forward-lunge: deepened the trailing knee (flex 45 → 80) and added a smalltravel: 0 0.3. Verified: the back knee now drops toward the floor.Arms hang / pull correctly:
bent-over-row:shoulders: extend 55(arms thrown backward) →shoulders: flex 65, which over a 70° hinge hangs the arms vertically; the row pull usesextend 10.pull-up: pull the shoulders down toward the bar during the pull (flex 150 → 105) instead of holding them locked overhead.Straighter 'long' limbs + cleaner detail:
crunch:neck: flex 20 → 8(less chin-tuck).seated-forward-fold: hinge at the hips (flex 90 → 115), cutspine: flex 60 → 25so it folds instead of slouching from the mid-back.bicycle-crunch,dead-bug: straighten the extended leg (knee ≈ 5) and add chest counter-rotation so the twist reads.glute-bridge:hips: extend 15 → 20.Supporting-foot planting:
single-leg-calf-raise,standing-hamstring-curl,standing-quad-stretch: addedground-lock: feetso the stance foot stays planted.Where I disagreed with the report
pinon the floor exercises. The real cause was solver ordering (floor safety clamp running before reach-IK) — already fixed separately in fix: run reach-IK before the floor safety clamp (levitating cobra) #27. So I did not add the report'spin: hips floor/pin: pelvis floorlines (there is nofloorpin anchor in the renderer; pins resolve against props/landmarks, and floor grounding is handled byground-lock+ the clamp).ground-lock: foot_leftis invalid DSL.ground-lockonly accepts the effector groupshands/feet(resolved viamannequin.effectors); a barefoot_leftresolves to nothing. So mountain-climber's per-foot suggestion wouldn't work as written, and supporting-foot locks here use thefeetgroup, which the renderer already filters to only plant feet near the floor.ground-lock: hands, feet, the driving foot lifts off the floor (hip/knee flex), so the near-floor planted-foot filter naturally excludes it — it isn't frozen. Left unchanged.Type of Change
Checklist
npm run typecheckpassesnpm run buildcompilesnpm test— 194/194 passnpm run eval— 361/361 checks, 73 movements, 0 parse failures, 0 clamp warnings