# Collision Mesh + Grip Function Index — V374

## Purpose

This file tells the next chat where collision and grip logic lives and what must not be replaced.

## Source model

```text
assets/nex/models/nex_fbx_clean_v001.fbx
```

## Runtime

```text
assets/nexprod/nexprod01-runtime-candidate.mjs
```

## Lower-leg mesh receiver

Search terms:

```text
NEX_COLLISION_LOWER_LEG_PROXY_V1
central_mesh_derived_lower_leg_proxy_v1
front_lower_shin_above_ankle
front_visible_separated_from_sole
```

Used for:

```text
upper hand -> front lower shin above ankle
```

Current accepted values:

```text
proxy: LowerLeg
axis: Calf -> Foot
t: 0.70
radial: front_visible_separated_from_sole
minimum separation from foot snap: 0.10 m
```

## Foot/shoe mesh receiver

Search terms:

```text
NEX_COLLISION_FOOT_SHOE_PROXY_V1
central_mesh_derived_foot_shoe_proxy_v1
foot_underside_sole
```

Used for:

```text
lower hand -> underside/sole of raised foot
```

Current accepted values:

```text
proxy: FootShoe
axis: Foot -> ToeBase/MidToe
t: 0.18
radial: positive_foot_canonical_vertical_underside_surface
```

## Generic grip function

Search terms in runtime:

```text
genericGripIntentsFromSourceContact
genericGripReceivingZoneFromIk
genericGripCylinderFromReceiver
genericGripSelectReceiverPoint
solveGenericGripContact
STEP3_PER_SIDE_Z_SEQUENTIAL_FOUR_FINGER_CONTACT
```

Pipeline:

```text
source contact rule
-> generic grip intent
-> explicit mesh snap point
-> existing collision proxy surface
-> palm/MCP snap
-> finger close
```

No Figure-Four-specific solver.

## QA gates

```text
Right overall grip PASS
Left overall grip PASS
foot↔shin separation >= 0.10 m
palm PASS both contacts
finger PASS both contacts
visual Chromium QA shows upper/lower hands separated
```

Current numeric result:

```json
[
  {
    "label": "right",
    "overallPass": true,
    "footPass": true,
    "shinPass": true,
    "separationM": 0.114799,
    "separationPass_ge_0_10m": true,
    "footErrM": 0.000327,
    "shinErrM": 0.000378,
    "footStatus": "PALM_PLUS_FOUR_FINGERS_READY_FOR_VISUAL_QA",
    "shinStatus": "PALM_PLUS_FOUR_FINGERS_READY_FOR_VISUAL_QA"
  },
  {
    "label": "left",
    "overallPass": true,
    "footPass": true,
    "shinPass": true,
    "separationM": 0.111051,
    "separationPass_ge_0_10m": true,
    "footErrM": 0.001791,
    "shinErrM": 0.00028,
    "footStatus": "PALM_PLUS_FOUR_FINGERS_READY_FOR_VISUAL_QA",
    "shinStatus": "PALM_PLUS_FOUR_FINGERS_READY_FOR_VISUAL_QA"
  }
]
```
