Skip to content

Make traveling gait moves carry the body to their waypoints#97

Merged
a-baran-orhan merged 3 commits into
mainfrom
fix/gait-travel-planting
Jul 21, 2026
Merged

Make traveling gait moves carry the body to their waypoints#97
a-baran-orhan merged 3 commits into
mainfrom
fix/gait-travel-planting

Conversation

@a-baran-orhan

Copy link
Copy Markdown
Member

Problem

Traveling dance/locomotion moves didn't obey their authored positions — the figure marched in place while the floor-guide circles moved away:

  • box-step never traced its box
  • grapevine / chassé skipped their circles; chassé even drifted backward
  • the body reached travel=(0, 0.32) at only (0, 0.00)

Root cause: a pin: foot floor was solved by translating the whole body back onto the planted foot. During authored travel: that cancels the travel. Phases using ground-lock instead of pin (which only corrects Y) travelled correctly — the tell.

Fix

Solver. In a gait clip — authors travel and alternates floor foot-pins between both feet — a floor foot-pin is now a stance foot: solved by leg IK to the fixed plant while the travelled root stays put, so the figure steps across the floor. Same-foot travel pins (a forward-lunge weight-shift) and vertical supports (pull-up bar, box, calf-raise, pirouette) keep the body-translate behavior. Applied in both the viewer (index.ts) and the headless eval probe (probe.ts), which are kept in parity.

Reconciliation. The leg chain is hip+knee only (a planted foot can't roll onto its toe), so a stance foot's contact point shifts a few cm as the body passes over it:

  • checks.ts: foot→floor contacts in a traveling clip use a 6 cm locomotion tolerance (real push-off roll); static contacts keep the strict 3 cm bar.
  • Trimmed over-authored travel so the body stays balanced over its feet: chassé → compact 0.2/0.4, waltz-box 0.32→0.2, walk-cycle 0.4/0.8→0.34/0.66.

Float-warning false positives. Flat-foot heel/sole warnings now require the shin near-vertical, so a plank / mountain-climber foot on its ball (shin laid flat, sole legitimately steep) is no longer flagged as a failed flat plant. Real heel-lift (deadlift, superhero-landing, deep squats) stays flagged. These clip-* warnings are advisory and don't affect the gate.

Pirouette. Its spin isn't on-axis yet (the body orbits the off-center supporting foot); marked experimental in the playground pending a focused spin-axis fix.

Result

before after
box-step body vs circles marched in place traces the real box
grapevine jumped around, skipped circles 0.3 → 1.0 → home, on every circle
chassé drifted backward compact balanced chassé, on the circles

Test plan

  • npm run eval1561/1561 checks on both shipped proportions (XBot + procedural), 0 clamp warnings; constraint warnings 165 → 151
  • npm test — 397/397 pass, incl. new travel-planting.test.ts (asserts the body reaches each authored travel waypoint)
  • tsc --noEmit clean on render, eval, playground
  • Visual spot-check of the traveling moves in the playground

🤖 Generated with Claude Code

Floor foot-pins were solved by translating the whole body back onto the
planted foot. During authored `travel:` that cancelled the travel — the
figure marched in place while the floor-guide circles moved away (box-step
never traced its box, grapevine/chassé skipped their circles, chassé even
drifted backward). Phases that used `ground-lock` instead of `pin` travelled
correctly, which was the tell.

Solver: in a GAIT clip (authors travel AND alternates floor foot-pins between
both feet) a floor foot-pin is now a STANCE foot — solved by leg IK to the
fixed plant while the travelled root stays put, so the body steps across the
floor instead of marching in place. Same-foot travel pins (a forward lunge's
weight-shift) and vertical supports (pull-up bar, box, calf-raise, pirouette)
keep the body-translate behavior. Mirrored in both the viewer (index.ts) and
the headless eval probe (probe.ts), which are kept in parity.

Reconcile the last centimetres of stance reach (the leg chain is hip+knee
only, so a planted foot can't roll onto its toe):
- checks.ts: foot->floor contacts in a traveling clip use a 6cm locomotion
  tolerance (real push-off roll); static contacts keep the strict 3cm bar.
- Trimmed over-authored travel so the body stays balanced over its feet:
  chassé to a compact 0.2/0.4, waltz-box 0.32->0.2, walk-cycle 0.4/0.8->0.34/0.66.

Also silence float-warning false positives: heel/sole flat-foot warnings now
require the shin near-vertical, so a plank/mountain-climber foot resting on its
ball (shin laid flat, sole legitimately steep) is no longer flagged as a failed
flat plant. Real heel-lift (deadlift, superhero-landing, deep squats) stays
flagged. These clip warnings are advisory and do not affect the gate.

Pirouette's spin is not yet on-axis (the body orbits the off-center supporting
foot); marked experimental in the playground pending a focused spin-axis fix.

Eval: 1561/1561 checks on both shipped proportions, 0 clamp warnings,
constraint warnings 165 -> 151. New test: travel-planting.test.ts asserts the
body reaches each authored travel waypoint.
@vercel

vercel Bot commented Jul 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
posecode Ready Ready Preview, Comment Jul 21, 2026 7:58pm

@a-baran-orhan
a-baran-orhan merged commit 094d453 into main Jul 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant