- sim/geom.ts: pure convex-polygon split by a line + pieceCV/cvWord ladder.
- sim/food.ts: convex polygon foods (bread/tomato/cheese/katsu/egg) with
toastsim material params (skin.resistance, flesh.moisture, wobble).
- sim/cutting.ts: blade pass-through detection -> split food into 2 real Matter
bodies along the chord; slow press on a wet food squashes into a splat decal
instead. Cut quality clean/ragged/crime by peak speed x chord fraction.
- Two traps fixed: (1) cut line through a vertex made lopsided halves -> split
now shares on-line verts (regression in geom.check.ts); (2) Matter setVelocity
is px/STEP not px/s -> piece launch was 60x too fast, flung halves to y=26000.
- Exit-bar: chop -> 2 clean pieces CV 0 (<0.1); push -> 0 pieces + splat 3.28;
wild swing -> piece offstage. Verified in-browser + npm run check (headless).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- sim/marionette.ts: control bar + 6 soft strings (head/back/2 hands/2 knees)
over a 9-segment silhouette. Bar snaps to mouse; the felt lag is string
stiffness<1 (worldConstraints), not an input buffer.
- Feet planted on floor + head+back strings keep the torso upright (no topple);
earlier pure-pendulum rig spun past 360deg — the back string fixed it.
- Sticky grip: while gripped, any empty hand latches the nearest target on
contact (puppet.update() each step). Reach = LMB drops the bar.
- Harness verbs: bar/sway/grip/pose/settle + dangle/walk/pickupTest + reset.
- Exit-bar measured: dangle settles 87 frames upright (lean 4.6); walk 8.84
units upright (>6 req, lean 30<45); grip 10/10. Verified in-browser + shot.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>