# Physics gate — friction-only replay of every matrix pick

Every recorded pick trajectory re-executed in the native physics
simulation: torque-integrated arm (computed-torque tracking of the recorded reference), CAD fixture boxes as colliders for the object AND the arm (penalty + Coulomb friction, point-Jacobian torque coupling), object stepped ONLY by contact forces - the grasp holds because mu*2F beats gravity+inertia, or it measurably slips.

- traces replayed: **33**
- held through the full pick: **32** (97%)
- crush events: 0
- worst object penetration into any fixture: **8.68 mm** (gate: < 3 mm resting, brief transients reported)
- DRIVE+CARRY (stage C): 32/32 held objects also survived the full accel-limited drive back to dock (worst carry slip 0.38 mm)

## Findings this gate produced (fixed upstream)

- carried-object clearance: the plate's disc clipped the neighboring jar lid during the park swing (arm was clear, object was not) -> traces now lift clear before swinging.
- carry-speed budget: rim pinches slid out of the pads during 0.6-scale park swings -> post-grasp moves run at carry-safe speed, matching the 1.2 m/s^2 clamp sizing.
- grasp planner pre-pose gap (found by the trace recorder, enforced before this gate).

## Analytic-vs-physics disagreements

(The 28 mm tomato is no longer replayed: the planner now enforces fingertip-support clearance against the TRUE capsule extent, and no vertical pinch of a 28 mm object on a hard counter satisfies it - an honest mechanism limit; angled approaches are future work.)

- cheap_drive / cluttered_family / clutter_box: closed on air (323.3 mm off)

## Contact-policy violations (default-deny enforcement)

Every contact of every physics step is classified by the contact policy (kitchenbot/sim/contact_policy.py). Forbidden contacts are BLOCKED by the penalty physics and logged here; nonphysical depths (beyond what the contact forces can explain) must never appear.


Worst ENGAGED-GRIP pad-patch penetration of the carried object's true shape: **13.0 mm** (('cheap_drive', 'island', 'tray_serving')) - the pad-compliance class is 0-6 mm; readings above that are the capsule hand's un-force-resolved finger placement under slop (measured, not asserted); beyond the SLIDE_OUT+pad+slop mechanism bound is impossible while engaged and flags as a violation.
- **cheap_drive / cluttered_family / clutter_box**: obj:clutter_box vs env:cart_shelf_1 [nonphysical_depth] 6.16 mm (tol 5.89) n=8 t=2.68..2.68s
- **cheap_drive / cluttered_family / clutter_box**: obj:clutter_box vs env:cart_leg_10 [forbidden_contact] 2.64 mm (tol 43.27) n=6592 t=2.66..6.4s
- **cheap_drive / cluttered_family / clutter_box**: obj:clutter_box vs env:cart_shelf_1 [forbidden_contact] 2.23 mm (tol 451.42) n=357 t=3.43..3.74s
- **cheap_drive / lshape / pot_sauce**: obj:pot_sauce vs env:dryrack_bar_1 [forbidden_contact] 2.23 mm (tol 158.43) n=123 t=4.64..5.16s
