# V307 actual MCP palm snap browser audit

Generated: 2026-08-19T20:23:33Z

## Result

- Browser/WebGL runtime: PASS
- Actual MCP palm gate present: PASS
- Finger release by default: BLOCKED

## Summaries

```json
[
  {
    "hasModel": true,
    "boneCount": 165,
    "skinnedMeshCount": 12,
    "runtimeVersion": "V307_ACTUAL_MCP_PALM_SNAP",
    "side": "R",
    "gripApplied": true,
    "gripPass": true,
    "gripStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
    "gripReason": null,
    "nextPhase": "finger_child_layer_ready_but_deferred_to_v302_integration",
    "entryPass": true,
    "entryGate": "GRIP_ENTRY_FRAME_USABLE",
    "entryRequiredOutwardShiftM": 0,
    "entrySignedOutsideM": 0.12338,
    "repairApplied": false,
    "repairPass": true,
    "repairReason": "initial_entry_frame_pass",
    "repairRollDeg": null,
    "sideSurfacePass": true,
    "sideSurfaceStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
    "v307GatePass": true,
    "v307EntryOk": true,
    "v307SolverOk": true,
    "actualMcpPass": true,
    "actualMcpStatus": "ACTUAL_MCP_PALM_CONTACT_READY",
    "actualMcpPalmFacesObject": 0.99246,
    "actualMcpIndexDist": 0.00073,
    "actualMcpPinkyDist": 0.00049,
    "actualMcpIndexPen": 0.00073,
    "actualMcpPinkyPen": 0.00049,
    "actualMcpIndexSide": true,
    "actualMcpPinkySide": true,
    "fingerSchema": "NEXPROD01_V307_ZPLUS_SEQUENTIAL_FINGER_CONTACT_CHILD_LAYER",
    "fingerActive": false,
    "fingerBlocked": true,
    "fingerReason": "side_surface_gate_passed_finger_release_deferred_to_V302_child_only_integration",
    "fingerReady": true,
    "fingerReleaseEnabled": false
  },
  {
    "hasModel": true,
    "boneCount": 165,
    "skinnedMeshCount": 12,
    "runtimeVersion": "V307_ACTUAL_MCP_PALM_SNAP",
    "side": "L",
    "gripApplied": true,
    "gripPass": true,
    "gripStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
    "gripReason": null,
    "nextPhase": "finger_child_layer_ready_but_deferred_to_v302_integration",
    "entryPass": false,
    "entryGate": "NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP",
    "entryRequiredOutwardShiftM": 0.0136,
    "entrySignedOutsideM": 0.0414,
    "repairApplied": true,
    "repairPass": true,
    "repairReason": "rotated_entry_frame_repaired_orientation_continue_to_point_snap",
    "repairRollDeg": -180,
    "sideSurfacePass": true,
    "sideSurfaceStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
    "v307GatePass": false,
    "v307EntryOk": true,
    "v307SolverOk": true,
    "actualMcpPass": false,
    "actualMcpStatus": "ACTUAL_MCP_PALM_CONTACT_FAIL",
    "actualMcpPalmFacesObject": 0.85035,
    "actualMcpIndexDist": 0.02331,
    "actualMcpPinkyDist": 0.0051,
    "actualMcpIndexPen": 0.02331,
    "actualMcpPinkyPen": 0,
    "actualMcpIndexSide": true,
    "actualMcpPinkySide": true,
    "fingerSchema": "NEXPROD01_V307_ZPLUS_SEQUENTIAL_FINGER_CONTACT_CHILD_LAYER",
    "fingerActive": false,
    "fingerBlocked": true,
    "fingerReason": "v306_actual_surface_or_entry_frame_gate_not_passed",
    "fingerReady": false,
    "fingerReleaseEnabled": false
  }
]
```

## Interpretation

V307 fixes the previous phantom-marker problem: palm debug/contact points are now derived from actual Index/Pinky MCP roots plus a 20 mm palm offset.

Right side passes the new actual MCP palm gate. Left side no longer false-passes: it fails because the actual index-derived palm point is still inside the leg capsule by about 23 mm while pinky is on surface. Fingers remain blocked.

This is the correct stop: the next solver step must use the new actual MCP palm gate to drive the left wrist/forearm roll or first-contact selection, rather than accepting the old target-space shifted-surface pass.
