Fix figure IK snapping and gate the library on a fail-hard motion checker

Three solver defects made limbs teleport, twist, or windmill: write-back
angles wrapped at ±180 and lerped the long way around; branch flips landed
on configurations the anatomical write-back cannot represent, silently
pulling pinned extremities off their pins; and the degenerate straight-limb
bend plane fell back to the camera axis instead of the anatomical anterior.
solve_limb now verifies each branch reproduces the solved end before
accepting it, resolve unwraps written-back angles toward the pose they
replace, and the degenerate plane comes from the parent's anterior axis.

render.py --check replays every exercise's full tween loop and fails hard
on six invariants (pin fidelity, continuity, wraps, authored-vs-resolved
drift, ground penetration, resolved ROM); --export refuses to ship a
failing exercise. All 66 motions re-authored or retouched to pass: honest
authored angles where pins used to override them silently, grounded feet
on the seated machines, a vertical bench-press bar path, straight-armed
child's pose, a butterfly stretch seated on the mat, and FK arms where
pins forced impossible reaches. MotionSolver.swift mirrors the solver
changes line for line, held by regenerated fixtures.

Claude-Session: https://claude.ai/code/session_01PKptrgbx74peTwHGRxBojv
This commit is contained in:
2026-07-12 00:37:23 -04:00
parent 400601283e
commit 79e75a9127
303 changed files with 3114 additions and 2272 deletions
@@ -0,0 +1,43 @@
# Running
Steady, easy-pace running — an upright posture with a slight forward lean from
the ankles, a light midfoot landing under the hips, and a relaxed, efficient
stride. Run in place, on a treadmill, or outdoors; your Apple Watch records
the real effort — heart rate, calories, and duration — as a running workout.
- **Category:** Cardio
- **Type:** Aerobic / conditioning
- **Targets:** Heart, lungs, legs, endurance
- **Prescription:** 1530 minutes at a conversational-to-brisk pace
- **Defaults:** 1 × 1200 s
## Setup
Stand tall with a slight forward lean from the ankles, not the waist. Let
your watch start the session so the effort is tracked on your wrist.
## Execution
1. Ease in for the first minute or two, letting your heart rate climb.
2. Land lightly on your midfoot, under your hips — not out in front.
3. Drive your knees forward and let your arms swing opposite your legs.
4. Favor a quicker cadence over a longer stride; settle into a pace you can
hold for the whole block.
5. Cool down with an easy minute before you stop.
## Cues
- Keep your posture tall, with the lean coming from the ankles.
- Relax your shoulders and keep your elbows around 90 degrees.
- Aim for a pace where you could speak in short sentences, not full paragraphs.
## Common Mistakes
- Overstriding — reaching the foot out ahead of the hips on landing.
- Starting too hard and fading long before the time is up.
- Hunching forward at the waist instead of leaning from the ankles.
## Progression
Add minutes, lift the pace, or fold in short faster intervals to raise the
challenge over time.