- Elbow stored as an angle around the arm axis vs a torso-frame reference: 85% hand-suggested,
from the controller pose (not the physics palm), clamped +-110 deg, 6 rad/s rate limit
(flip spike: 1.8 cm/tick max vs 13.8 unclamped)
- PhysicsArms.ConstrainHand: while an arm segment is in contact the hand may lead the
forearm end by 3 cm; PhysicsHands applies it and suspends stuck-snap while active
- ArmSpike: forearm-rest-over-anvil (owner pose: collider fine, drawn forearm 3.9 cm -> 0),
flip sweep, bar test now asserts the hand is held back; all six spikes PASS x3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- PhysicsArms: per side 2.0 kg upper arm + 1.2 kg forearm RigidBody3D PD-chasing their
analytic 2-bone IK pose, solved per physics tick from the physical chest shoulders to the
physical hands; no joints (Box3D has no usable shoulder/wrist joint; AGENTS forbids joints
between tracked bodies). Budgets from a 60 kg mass stat: hand 90 < forearm 180 < upper
arm 360 < chest 2400 N. Owns calibration + reach budget (moved from BodyRig); 1 m snap,
non-finite reset, BodyMath.RotationError servo.
- Layer 5 = player arms (mask 1); props/table/floor masks include it; no self-collision.
- BodyRig: visuals only, arms drawn shoulder -> physical elbow -> wrist.
- ArmSpike: track gap 0, swing lag <= 6 cm, arm pushes prop with hand clear, forearm blocked
by bar without tunneling and quiet when pinned, teleport snap, NaN reset — PASS x3.
- CollapseSpike now runs the full body (49/49 x3); all six spikes PASS x3.
- HANDOFF/AGENTS: Stage 2 entry (item 10), layers, tuning table, Stage 2b next steps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- BodyMath.RotationError: atan2-based shortest-arc error (no NaN, no GetAxis gain collapse
inside 0.16 deg); used by PhysicsTorso orientation servo and PhysicsHands rotation lock
- BodyMath.ResetIfNonFinite escape hatch on torso + hands
- PhysicsHands.Drive extracted (static) so spikes run the real hand chase
- CollapseSpike: deterministic repro (slow yaw drift across a parked chest, 7/40 NaN on old
code) + solver-stacking scenarios (seated chest in table, two-hand-welded 50 kg anvil,
real PropShop) — 49/49 clean after fix, x3; all other spikes PASS x3
- Failure brief RESOLUTION section; HANDOFF/AGENTS updated
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>