# NEXT11 / Nex — V373 Separated Front-Shin Snap Handover

Generated: 2026-08-21 20:13 Europe/Oslo  
Base: V369 `SNAP_REPOSITION_TORSO_STRETCH_CHROMIUM_QA`  
Rejected prior visual checkpoint: V371, because upper and lower hand snap points collapsed into the same shoe/sole cluster.

## Purpose

Fix Figure Four upper-hand snap placement correctly:

- lower hand remains on underside of foot/sole;
- upper hand must be on the visible/front side of the lower shin, above the ankle;
- upper and lower snap points must remain spatially separated.

## User visual correction

V371 moved the shin snap to the opposite side of the mesh, but it moved too close to the sole snap. Result: right and left hands appeared on the same place.

V373 fixes that by adding separation as a hard QA criterion.

## What changed

### 1. Runtime radial semantic for explicit front-shin snap

File:
- `assets/nexprod/nexprod01-runtime-candidate.mjs`

For `front_lower_shin_above_ankle`, V373 adds/uses:

```text
radial = front_visible_separated_from_sole
meshRadial = safeNorm((-canonicalDepth) + (-0.55 * canonicalAxis))
```

This keeps the snap on the visible/front side, but biases it proximally along the lower-leg axis so it does not collapse into the sole/foot snap cluster.

### 2. Contact-rule data

File:
- `assets/js/data/nex-nexdatah-full-bank-physio-ik-keypose-specs.json`

For both `right_figure_four_peak` and `left_figure_four_peak`:

```text
front_lower_shin_above_ankle:
  proxy: LowerLeg existing collision mesh
  t: 0.70
  radial: front_visible_separated_from_sole
```

Foot underside snap is unchanged from V369:

```text
foot_underside_sole:
  proxy: FootShoe existing collision mesh
  t: 0.18
  radial: positive_foot_canonical_vertical_underside_surface
```

## What did not change

- No AI image generation.
- No Chromium/render image generation in this V373 patch.
- No new pose rebuild.
- No new grip solver.
- No Figure-Four-specific solver.
- Existing FootShoe collision mesh/proxy is still used.
- Existing lower-leg collision mesh/proxy is still used.
- Existing generic palm + finger solver is still used.
- Body/leg/foot IK inherited from V369.

## QA performed

Node generic grip probe only.

```text
Right Figure Four:
- lower hand -> foot underside: PASS
- upper hand -> separated front lower shin: PASS
- snap separation: 0.114799 m
- overall: PASS

Left mirrored Figure Four:
- lower hand -> foot underside: PASS
- upper hand -> separated front lower shin: PASS
- snap separation: 0.111051 m
- overall: PASS
```

Hard QA criteria:

```text
both peaks PASS
all palm PASS
all finger PASS
snap separation >= 0.10 m
```

## Files

- `diagnostics/v373/V373_FINAL_SEPARATED_SHIN_GRIP_PROBE.json`
- `diagnostics/v373/V373_FINAL_SEPARATED_SHIN_GRIP_PROBE_SUMMARY.json`
- `diagnostics/v373/V373_FINAL_SNAP_RULES.json`
- `diagnostics/v373/V373_T_SWEEP_COMPACT.json`
- `diagnostics/v373/V373_SEPARATED_SHIN_T_SWEEP.json`
- `HANDOVER_V373_SEPARATED_FRONT_SHIN_SNAP.md`
- `COLLISION_MESH_AND_GRIP_FUNCTION_INDEX_V373.md`

## Stop boundary

V373 is Node-grip verified. Next step is Chromium visual QA only, if screenshots are allowed.
Do not continue changing torso/head/snap until V373 is visually checked.
