# NEXT11 V301 — Side/surface contact gate root

Generated: 2026-08-19T18:36:14Z

## Status

V301 is a real root derived from V300. It removes the explicit thumb-down gate from the active grip-entry approval path and replaces it with a generic side/surface/penetration gate.

This is not a finger-release production checkpoint. Finger writes are still deferred by default, but the gate now reports `preFingerReady: true` when palm-side contact is on the intended shifted outside surface with no gross penetration.

## Core policy

```text
Correct contact is geometry-owned, not thumb-owned.

- First palm point anchors to the shifted outside surface.
- The hand rolls around the active forearm/wrist axis to bring the second palm point to the same shifted surface.
- The gate checks palm-facing-object, correct side, both palm points on surface, object-meet limit and penetration.
- Thumb direction is an emergent result of the side and palm geometry, not a global constraint.
- Fingers remain child-layer and are not released by default in V301.
```

## Static audit

```json
{
  "passStatic": true,
  "markers": {
    "runtimeVersionV301": true,
    "v301SideSurfaceGate": true,
    "v301FingerGate": true,
    "explicitThumbDownGateRemovedFromV301Gate": true,
    "sideSurfaceStatusReady": true,
    "wrongSideOrPenetrationHold": true,
    "fingerReleaseFlagDefaultFalse": true,
    "noV292FootController": true,
    "cleanSolverV1Present": true,
    "v297EntryFrameGateStillPresent": true,
    "v300MeetAndRollStillPresent": true
  }
}
```

## Browser/WebGL audit

```json
{
  "passBrowserRuntime": true,
  "passSideSurfaceGate": true,
  "passNoFingerReleaseByDefault": true,
  "passSideDiagnostics": true
}
```

## Runtime summaries

### Right

```json
{
  "hasDebug": true,
  "hasModel": true,
  "boneCount": 165,
  "skinnedMeshCount": 12,
  "canvasCount": 1,
  "hasGripSolverV1": true,
  "runtimeGripVersion": "V301_SIDE_SURFACE_CONTACT_GATE_FROM_V300",
  "gripSide": "R",
  "gripPass": true,
  "gripStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
  "palmContactReady": true,
  "preFingerReady": true,
  "entryGate": "GRIP_ENTRY_FRAME_USABLE",
  "entryGatePass": true,
  "entryRequiredOutwardShiftM": 0,
  "sideSurfaceGateSchema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
  "sideSurfaceGatePass": true,
  "handPalmTowardObject": true,
  "outsideContact": true,
  "noGrossPenetration": true,
  "firstPenetrationM": 0,
  "secondPenetrationM": 0,
  "firstOutsideScore": 1,
  "secondOutsideScore": 0.76427,
  "v300RollPass": true,
  "v300RollDeg": 73,
  "v300ObjectMeetM": 0.00289,
  "v300ObjectMeetPass": true,
  "fingerGateSchema": "NEXPROD01_V301_FINGER_CHILD_LAYER_GATE",
  "fingerBlocked": true,
  "fingerReady": true,
  "fingerReleaseEnabled": false,
  "fingerReason": "side_surface_gate_passed_finger_release_deferred_to_V302_child_only_integration",
  "probeSide": "R",
  "meshTruthSide": null
}
```

### Left

```json
{
  "hasDebug": true,
  "hasModel": true,
  "boneCount": 165,
  "skinnedMeshCount": 12,
  "canvasCount": 1,
  "hasGripSolverV1": true,
  "runtimeGripVersion": "V301_SIDE_SURFACE_CONTACT_GATE_FROM_V300",
  "gripSide": "L",
  "gripPass": true,
  "gripStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
  "palmContactReady": true,
  "preFingerReady": true,
  "entryGate": "NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP",
  "entryGatePass": false,
  "entryRequiredOutwardShiftM": 0.02992,
  "sideSurfaceGateSchema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
  "sideSurfaceGatePass": true,
  "handPalmTowardObject": true,
  "outsideContact": true,
  "noGrossPenetration": true,
  "firstPenetrationM": 0,
  "secondPenetrationM": 0,
  "firstOutsideScore": 1,
  "secondOutsideScore": 0.90273,
  "v300RollPass": true,
  "v300RollDeg": 115,
  "v300ObjectMeetM": 0.07784,
  "v300ObjectMeetPass": true,
  "fingerGateSchema": "NEXPROD01_V301_FINGER_CHILD_LAYER_GATE",
  "fingerBlocked": true,
  "fingerReady": true,
  "fingerReleaseEnabled": false,
  "fingerReason": "side_surface_gate_passed_finger_release_deferred_to_V302_child_only_integration",
  "probeSide": "L",
  "meshTruthSide": null
}
```

## Interpretation

Right starts usable and passes the side/surface gate.

Left still starts with the V297 entry-frame warning (`NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP`, required outward shift ≈ 29.92 mm), but the V300/V301 shifted-surface/object-meet and forearm-roll sequence resolves the actual palm contact without hand-only translation. The final V301 side/surface gate passes: palm faces object, both palm points are on the shifted outside surface, outside contact is true, and penetration is zero in the runtime audit.

## Next safe step

V302 should integrate the V295 child-only finger module behind the V301 gate. Acceptance must prove zero writes to hand, wrist, arm, leg, foot and toe, and only approved finger bones may move.
