{
  "schema": "NEXT11_V300_BROWSER_RUNTIME_AUDIT",
  "generatedAt": "2026-08-19T18:23:27Z",
  "root": "/mnt/data/nex_v300_grip_entry_contract/NEXT11_V300_GRIP_ENTRY_CONTRACT_REHYDRATED_ROOT",
  "cases": [
    {
      "case": {
        "name": "right",
        "caseId": "v94_right_full",
        "exercise": "hurdle-stretch",
        "phase": 0.75
      },
      "url": "http://127.0.0.1:39279/assets/nexprod/nexprod01-player.html?exercise=hurdle-stretch&caseId=v94_right_full&phase=0.75&play=0&debug=0&visualMode=nex&nativeRuntimeParity=1&nativeSkin=1&skinPreset=freeridehuman&readyTimeoutMs=12000&hostLifecycle=v300-grip-entry-contract-browser-audit&build=NEXPROD01_RUNTIME_V300_GRIP_ENTRY_CONTRACT_REHYDRATED_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V300_right",
      "navigationError": null,
      "polls": [
        {
          "t": 1,
          "hasDebug": true,
          "hasModel": true,
          "boneCount": 165,
          "markerCount": 22,
          "gripSchema": "NEXPROD01_GRIP_SOLVER_V1",
          "fingerGateSchema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE"
        }
      ],
      "final": {
        "href": "http://127.0.0.1:39279/assets/nexprod/nexprod01-player.html?exercise=hurdle-stretch&caseId=v94_right_full&phase=0.75&play=0&debug=0&visualMode=nex&nativeRuntimeParity=1&nativeSkin=1&skinPreset=freeridehuman&readyTimeoutMs=12000&hostLifecycle=v300-grip-entry-contract-browser-audit&build=NEXPROD01_RUNTIME_V300_GRIP_ENTRY_CONTRACT_REHYDRATED_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V300_right",
        "ready": "complete",
        "hasDebug": true,
        "hasModel": true,
        "boneCount": 165,
        "skinnedMeshCount": 12,
        "canvasCount": 1,
        "windowMarkers": [
          "__NEXPROD01_DEBUG_SCENE",
          "__NEXPROD01_GRIP_SOLVER_V1",
          "__NEXPROD01_PUBLISH",
          "__NEXPROD01_V100_GRIP_CAPSULE_SURFACE",
          "__NEXPROD01_V102_HEEL_TO_GLUTE_REACH",
          "__NEXPROD01_V110_DISTAL_GRIP_COUPLED",
          "__NEXPROD01_V140_GRIP_HAND_QA_TINT",
          "__NEXPROD01_V151_ACTUAL_MESH_TRUTH",
          "__NEXPROD01_V153_MESH_FEEDBACK",
          "__NEXPROD01_V157_REAL_MEDIAPIPE_HAND_FRAME",
          "__NEXPROD01_V169_LEG_CLOSER_ONLY",
          "__NEXPROD01_V175_LEG_OUT",
          "__NEXPROD01_V184_SNAP_ONLY_FEASIBILITY",
          "__NEXPROD01_V189_PRE_SNAP_NEUTRAL_APPROACH",
          "__NEXPROD01_V198_V195_DELTA_SINGLE_WRITER",
          "__NEXPROD01_V199_LOCK_GREEN_ROLL_PINK",
          "__NEXPROD01_V266_CLEAN_GRIP_CONTRACT",
          "__NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
          "__NEXPROD01_V69_SHIN_GRIP_FINGER_LAYER",
          "__NEXPROD01_V70_BIORIG_FULL_GRIP_LAYER",
          "__NEXPROD01_V93_ACTIVE_HAND_CONTROL_PROBE",
          "__NEXPROD01_V93_RIGHT_HAND_CONTROL_PROBE"
        ],
        "markerCount": 22,
        "gripSolverV1": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1",
          "version": "V300_GRIP_ENTRY_CONTRACT_REHYDRATED_FROM_V267",
          "side": "R",
          "applied": true,
          "implemented": true,
          "policy": "V300 rehydrated clean grip solver: V267 palm-contract owner plus explicit five-step grip-entry contract. Neutralization is an approach/contact gate; object/leg meet uses shifted-surface validation; fingers remain blocked until separate visual approval.",
          "pass": false,
          "palmContactReady": true,
          "preFingerReady": false,
          "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
          "ruleType": "v94_space_control_right_finger_grip",
          "targetLimb": "R_lower_shin_heel_cylinder",
          "targetSide": "outside_shifted_surface",
          "palmPoints": {
            "pointA": {
              "x": 0.93966,
              "y": 0.70339,
              "z": 0.42636,
              "vertex": 58174,
              "anatomy": "inside palm / thumb-thenar surface, R_Thumb2-weighted"
            },
            "pointB": {
              "x": -0.08284,
              "y": 0.62487,
              "z": 0.34506,
              "vertex": 58358,
              "anatomy": "inside palm surface, R_Hand-weighted"
            }
          },
          "limb": {
            "axisA": "R_Foot",
            "axisB": "R_Calf",
            "axisPoint": {
              "x": -0.07875,
              "y": 0.94635,
              "z": -0.32161
            },
            "outside": {
              "x": -0.99311,
              "y": 0.07015,
              "z": -0.09385
            },
            "target": {
              "x": -0.13338,
              "y": 0.95021,
              "z": -0.32677
            },
            "radiusM": 0.052,
            "clearanceM": 0.003,
            "t": 0.16
          },
          "beforeBasis": null,
          "afterAngles": {
            "palmRay_vs_forearm": 35.44,
            "mcpCenter_vs_forearm": 29.94,
            "mcpAxis_vs_forearm": 104.94,
            "palmNormal_vs_forearm": 66.17
          },
          "stages": {
            "neutralPalm": {
              "applied": true,
              "xSource": "raw_index_minus_pinky_projected",
              "beforeAngles": {
                "palmRay_vs_forearm": 68.28,
                "mcpCenter_vs_forearm": 65.66,
                "mcpAxis_vs_forearm": 134.88,
                "palmNormal_vs_forearm": 119.49
              },
              "afterAngles": {
                "palmRay_vs_forearm": 10.68,
                "mcpCenter_vs_forearm": 6.37,
                "mcpAxis_vs_forearm": 90,
                "palmNormal_vs_forearm": 90
              },
              "pass": true,
              "policy": "Solver V1 neutral palm: visible palm/MCP axis follows the forearm before object contact. This is a named solver step, not a historical patch."
            },
            "v297EntryFrameGate": {
              "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
              "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
              "active": true,
              "mutatesTargets": false,
              "side": "R",
              "pass": true,
              "gate": "GRIP_ENTRY_FRAME_USABLE",
              "desiredOutsideDistanceM": 0.055,
              "signedOutsideM": 0.12338,
              "palmBaseOutsideM": 0.11954,
              "requiredOutwardShiftM": 0,
              "palmAcrossOutsideDot": -0.82552,
              "limbAxisA": "R_Foot",
              "limbAxisB": "R_Calf",
              "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
            },
            "pointASnap": {
              "applied": true,
              "pointA0": {
                "x": -0.1507,
                "y": 0.9247,
                "z": -0.27468
              },
              "pointB0": {
                "x": -0.19695,
                "y": 0.94318,
                "z": -0.30344
              },
              "limbTargetBefore": {
                "x": -0.13344,
                "y": 0.94777,
                "z": -0.32833
              },
              "limbTargetAfter": {
                "x": -0.13338,
                "y": 0.95021,
                "z": -0.32677
              },
              "shift": {
                "x": 0.01726,
                "y": 0.02307,
                "z": -0.05365
              },
              "shiftM": 0.0609,
              "pointAAfter": {
                "x": -0.13338,
                "y": 0.95021,
                "z": -0.32677
              },
              "pointBAfter": {
                "x": -0.17963,
                "y": 0.96868,
                "z": -0.35553
              },
              "arm": {
                "ok": true,
                "distance": 0.45140559268217767,
                "minReach": 0.010498007252821183,
                "maxReach": 0.45141,
                "segmentErrorM": {
                  "upperarm": 0,
                  "forearm": 0
                },
                "clamped": true,
                "desiredDistance": 0.4543,
                "handDelta": {
                  "x": 0.01732,
                  "y": 0.02551,
                  "z": -0.05209
                },
                "legDelta": {
                  "x": 6e-05,
                  "y": 0.00243,
                  "z": 0.00156
                },
                "legDeltaM": 0.00289,
                "segmentLengths": {
                  "thighM": 0.38297,
                  "calfM": 0.39537,
                  "rawThighM": 0.30323,
                  "rawCalfM": 0.37435
                },
                "policy": "Arm could not reach the one outside limb point; move the target limb contact body by the residual instead of inventing a hand point. This encodes the prior learning explicitly inside the solver."
              },
              "policy": "Step 1-2 of V300 contract: arm reach / approach places first inside-palm contact on the outside limb snap. If the arm cannot reach, object/leg-meet is the only allowed compensation; fingers/hand-only patches are not owners."
            },
            "v300ObjectMeetGate": {
              "schema": "NEXPROD01_V300_OBJECT_LEG_MEET_SHIFTED_SURFACE_GATE",
              "active": true,
              "applied": true,
              "meetM": 0.00289,
              "maxObjectMeetM": 0.08,
              "pass": true,
              "legDelta": {
                "x": 6e-05,
                "y": 0.00243,
                "z": 0.00156
              },
              "clamped": true,
              "policy": "V300 keeps neutralization in the approach/contact layer. If arm reach cannot place first palm contact, the lower-leg/object target surface may meet the hand up to 80 mm before palm-frame validation. Surface checks must then use the shifted surface, not the original one."
            },
            "v300ForearmAxisSecondPalmRoll": {
              "schema": "NEXPROD01_V300_FOREARM_AXIS_SECOND_PALM_ROLL",
              "active": true,
              "applied": true,
              "pass": true,
              "rollDeg": 73,
              "axis": {
                "x": -0.02199,
                "y": -0.84069,
                "z": -0.54107
              },
              "before": {
                "first": {
                  "radialM": 0.055,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.055,
                  "outsideScore": 1,
                  "distanceToSurfaceM": 0,
                  "penetrationM": 0,
                  "surfaceOk": true,
                  "sideOk": true
                },
                "second": {
                  "radialM": 0.10646,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.10493,
                  "outsideScore": 0.98565,
                  "distanceToSurfaceM": 0.05146,
                  "penetrationM": 0,
                  "surfaceOk": false,
                  "sideOk": true
                },
                "pointA": {
                  "x": -0.13338,
                  "y": 0.95021,
                  "z": -0.32677
                },
                "pointB": {
                  "x": -0.17963,
                  "y": 0.96868,
                  "z": -0.35553
                }
              },
              "after": {
                "first": {
                  "radialM": 0.055,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.055,
                  "outsideScore": 1,
                  "distanceToSurfaceM": 0,
                  "penetrationM": 0,
                  "surfaceOk": true,
                  "sideOk": true
                },
                "second": {
                  "radialM": 0.05537,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.04232,
                  "outsideScore": 0.76427,
                  "distanceToSurfaceM": 0.00037,
                  "penetrationM": 0,
                  "surfaceOk": true,
                  "sideOk": true
                },
                "pointA": {
                  "x": -0.13338,
                  "y": 0.95021,
                  "z": -0.32677
                },
                "pointB": {
                  "x": -0.11424,
                  "y": 0.97832,
                  "z": -0.37315
                },
                "palmFacesObject": 0.93477,
                "thumbDownProxy": 0.36582,
                "grossPenetration": false,
                "arm": {
                  "ok": true,
                  "distance": 0.45739882884412997,
                  "minReach": 0.0015090627052331263,
                  "maxReach": 0.46341066264023184,
                  "segmentErrorM": {
                    "upperarm": 0,
                    "forearm": 0
                  }
                }
              },
              "policy": "V300 contract step 3: keep the first palm contact fixed, then rotate the rigid hand/palm frame around the active wrist/forearm axis to bring the second palm point toward the shifted outside limb surface. Fingers remain blocked for visual approval."
            },
            "v300PalmFrameGate": {
              "schema": "NEXPROD01_V300_PALM_FRAME_GATE",
              "active": true,
              "pass": false,
              "palmContactReady": true,
              "preFingerReady": false,
              "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
              "checks": {
                "handPalmTowardObject": true,
                "thumbDownVerified": false,
                "thumbDownGate": "UNVERIFIED_THUMB_AXIS_NO_THUMB_WRITE_IN_V300",
                "thumbDownProxyTelemetry": 0.36582,
                "firstPalmOnShiftedSurface": true,
                "secondPalmOnShiftedSurface": true,
                "outsideContact": true,
                "noGrossPenetration": true,
                "objectMeetWithinLimit": true
              },
              "policy": "V300 implements the recovered five-step grip-entry contract. Palm contact may be solved, but the thumb-down gate is explicitly pending because no approved thumb-axis writer/probe is active. Fingers remain blocked."
            }
          },
          "nextPhase": "thumb_down_gate_pending_finger_child_layer_blocked",
          "notes": [
            "V300 palm contact is solved, but thumb-down gate is pending; pass remains false so v68/V200 finger layer stays blocked",
            "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
            "shifted-surface gate is evaluated after object/leg meet"
          ]
        },
        "v297FingerGate": {
          "schema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
          "active": false,
          "side": "R",
          "blocked": true,
          "reason": "grip_solver_v1_palm_contract_not_passed",
          "gripPass": false,
          "gripReason": null,
          "entryFrameGate": {
            "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
            "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
            "active": true,
            "mutatesTargets": false,
            "side": "R",
            "pass": true,
            "gate": "GRIP_ENTRY_FRAME_USABLE",
            "desiredOutsideDistanceM": 0.055,
            "signedOutsideM": 0.12338,
            "palmBaseOutsideM": 0.11954,
            "requiredOutwardShiftM": 0,
            "palmAcrossOutsideDot": -0.82552,
            "limbAxisA": "R_Foot",
            "limbAxisB": "R_Calf",
            "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
          },
          "policy": "V297 enforces the V267/V286/V291 contract: fingers are child-layer only after palm/hand/object entry passes. While blocked, there are no finger, thumb, hand, wrist, arm, snap-point, leg, foot or toe writes."
        },
        "v110DistalGrip": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1_BRIDGE",
          "applied": true,
          "pass": false,
          "reason": "clean grip solver completed palm contract; finger layer may run only if contract passes",
          "contract": {
            "schema": "NEXPROD01_GRIP_SOLVER_V1",
            "version": "V300_GRIP_ENTRY_CONTRACT_REHYDRATED_FROM_V267",
            "side": "R",
            "applied": true,
            "implemented": true,
            "policy": "V300 rehydrated clean grip solver: V267 palm-contract owner plus explicit five-step grip-entry contract. Neutralization is an approach/contact gate; object/leg meet uses shifted-surface validation; fingers remain blocked until separate visual approval.",
            "pass": false,
            "palmContactReady": true,
            "preFingerReady": false,
            "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
            "ruleType": "v94_space_control_right_finger_grip",
            "targetLimb": "R_lower_shin_heel_cylinder",
            "targetSide": "outside_shifted_surface",
            "palmPoints": {
              "pointA": {
                "x": 0.93966,
                "y": 0.70339,
                "z": 0.42636,
                "vertex": 58174,
                "anatomy": "inside palm / thumb-thenar surface, R_Thumb2-weighted"
              },
              "pointB": {
                "x": -0.08284,
                "y": 0.62487,
                "z": 0.34506,
                "vertex": 58358,
                "anatomy": "inside palm surface, R_Hand-weighted"
              }
            },
            "limb": {
              "axisA": "R_Foot",
              "axisB": "R_Calf",
              "axisPoint": {
                "x": -0.07875,
                "y": 0.94635,
                "z": -0.32161
              },
              "outside": {
                "x": -0.99311,
                "y": 0.07015,
                "z": -0.09385
              },
              "target": {
                "x": -0.13338,
                "y": 0.95021,
                "z": -0.32677
              },
              "radiusM": 0.052,
              "clearanceM": 0.003,
              "t": 0.16
            },
            "beforeBasis": null,
            "afterAngles": {
              "palmRay_vs_forearm": 35.44,
              "mcpCenter_vs_forearm": 29.94,
              "mcpAxis_vs_forearm": 104.94,
              "palmNormal_vs_forearm": 66.17
            },
            "stages": {
              "neutralPalm": {
                "applied": true,
                "xSource": "raw_index_minus_pinky_projected",
                "beforeAngles": {
                  "palmRay_vs_forearm": 68.28,
                  "mcpCenter_vs_forearm": 65.66,
                  "mcpAxis_vs_forearm": 134.88,
                  "palmNormal_vs_forearm": 119.49
                },
                "afterAngles": {
                  "palmRay_vs_forearm": 10.68,
                  "mcpCenter_vs_forearm": 6.37,
                  "mcpAxis_vs_forearm": 90,
                  "palmNormal_vs_forearm": 90
                },
                "pass": true,
                "policy": "Solver V1 neutral palm: visible palm/MCP axis follows the forearm before object contact. This is a named solver step, not a historical patch."
              },
              "v297EntryFrameGate": {
                "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
                "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
                "active": true,
                "mutatesTargets": false,
                "side": "R",
                "pass": true,
                "gate": "GRIP_ENTRY_FRAME_USABLE",
                "desiredOutsideDistanceM": 0.055,
                "signedOutsideM": 0.12338,
                "palmBaseOutsideM": 0.11954,
                "requiredOutwardShiftM": 0,
                "palmAcrossOutsideDot": -0.82552,
                "limbAxisA": "R_Foot",
                "limbAxisB": "R_Calf",
                "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
              },
              "pointASnap": {
                "applied": true,
                "pointA0": {
                  "x": -0.1507,
                  "y": 0.9247,
                  "z": -0.27468
                },
                "pointB0": {
                  "x": -0.19695,
                  "y": 0.94318,
                  "z": -0.30344
                },
                "limbTargetBefore": {
                  "x": -0.13344,
                  "y": 0.94777,
                  "z": -0.32833
                },
                "limbTargetAfter": {
                  "x": -0.13338,
                  "y": 0.95021,
                  "z": -0.32677
                },
                "shift": {
                  "x": 0.01726,
                  "y": 0.02307,
                  "z": -0.05365
                },
                "shiftM": 0.0609,
                "pointAAfter": {
                  "x": -0.13338,
                  "y": 0.95021,
                  "z": -0.32677
                },
                "pointBAfter": {
                  "x": -0.17963,
                  "y": 0.96868,
                  "z": -0.35553
                },
                "arm": {
                  "ok": true,
                  "distance": 0.45140559268217767,
                  "minReach": 0.010498007252821183,
                  "maxReach": 0.45141,
                  "segmentErrorM": {
                    "upperarm": 0,
                    "forearm": 0
                  },
                  "clamped": true,
                  "desiredDistance": 0.4543,
                  "handDelta": {
                    "x": 0.01732,
                    "y": 0.02551,
                    "z": -0.05209
                  },
                  "legDelta": {
                    "x": 6e-05,
                    "y": 0.00243,
                    "z": 0.00156
                  },
                  "legDeltaM": 0.00289,
                  "segmentLengths": {
                    "thighM": 0.38297,
                    "calfM": 0.39537,
                    "rawThighM": 0.30323,
                    "rawCalfM": 0.37435
                  },
                  "policy": "Arm could not reach the one outside limb point; move the target limb contact body by the residual instead of inventing a hand point. This encodes the prior learning explicitly inside the solver."
                },
                "policy": "Step 1-2 of V300 contract: arm reach / approach places first inside-palm contact on the outside limb snap. If the arm cannot reach, object/leg-meet is the only allowed compensation; fingers/hand-only patches are not owners."
              },
              "v300ObjectMeetGate": {
                "schema": "NEXPROD01_V300_OBJECT_LEG_MEET_SHIFTED_SURFACE_GATE",
                "active": true,
                "applied": true,
                "meetM": 0.00289,
                "maxObjectMeetM": 0.08,
                "pass": true,
                "legDelta": {
                  "x": 6e-05,
                  "y": 0.00243,
                  "z": 0.00156
                },
                "clamped": true,
                "policy": "V300 keeps neutralization in the approach/contact layer. If arm reach cannot place first palm contact, the lower-leg/object target surface may meet the hand up to 80 mm before palm-frame validation. Surface checks must then use the shifted surface, not the original one."
              },
              "v300ForearmAxisSecondPalmRoll": {
                "schema": "NEXPROD01_V300_FOREARM_AXIS_SECOND_PALM_ROLL",
                "active": true,
                "applied": true,
                "pass": true,
                "rollDeg": 73,
                "axis": {
                  "x": -0.02199,
                  "y": -0.84069,
                  "z": -0.54107
                },
                "before": {
                  "first": {
                    "radialM": 0.055,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.055,
                    "outsideScore": 1,
                    "distanceToSurfaceM": 0,
                    "penetrationM": 0,
                    "surfaceOk": true,
                    "sideOk": true
                  },
                  "second": {
                    "radialM": 0.10646,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.10493,
                    "outsideScore": 0.98565,
                    "distanceToSurfaceM": 0.05146,
                    "penetrationM": 0,
                    "surfaceOk": false,
                    "sideOk": true
                  },
                  "pointA": {
                    "x": -0.13338,
                    "y": 0.95021,
                    "z": -0.32677
                  },
                  "pointB": {
                    "x": -0.17963,
                    "y": 0.96868,
                    "z": -0.35553
                  }
                },
                "after": {
                  "first": {
                    "radialM": 0.055,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.055,
                    "outsideScore": 1,
                    "distanceToSurfaceM": 0,
                    "penetrationM": 0,
                    "surfaceOk": true,
                    "sideOk": true
                  },
                  "second": {
                    "radialM": 0.05537,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.04232,
                    "outsideScore": 0.76427,
                    "distanceToSurfaceM": 0.00037,
                    "penetrationM": 0,
                    "surfaceOk": true,
                    "sideOk": true
                  },
                  "pointA": {
                    "x": -0.13338,
                    "y": 0.95021,
                    "z": -0.32677
                  },
                  "pointB": {
                    "x": -0.11424,
                    "y": 0.97832,
                    "z": -0.37315
                  },
                  "palmFacesObject": 0.93477,
                  "thumbDownProxy": 0.36582,
                  "grossPenetration": false,
                  "arm": {
                    "ok": true,
                    "distance": 0.45739882884412997,
                    "minReach": 0.0015090627052331263,
                    "maxReach": 0.46341066264023184,
                    "segmentErrorM": {
                      "upperarm": 0,
                      "forearm": 0
                    }
                  }
                },
                "policy": "V300 contract step 3: keep the first palm contact fixed, then rotate the rigid hand/palm frame around the active wrist/forearm axis to bring the second palm point toward the shifted outside limb surface. Fingers remain blocked for visual approval."
              },
              "v300PalmFrameGate": {
                "schema": "NEXPROD01_V300_PALM_FRAME_GATE",
                "active": true,
                "pass": false,
                "palmContactReady": true,
                "preFingerReady": false,
                "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
                "checks": {
                  "handPalmTowardObject": true,
                  "thumbDownVerified": false,
                  "thumbDownGate": "UNVERIFIED_THUMB_AXIS_NO_THUMB_WRITE_IN_V300",
                  "thumbDownProxyTelemetry": 0.36582,
                  "firstPalmOnShiftedSurface": true,
                  "secondPalmOnShiftedSurface": true,
                  "outsideContact": true,
                  "noGrossPenetration": true,
                  "objectMeetWithinLimit": true
                },
                "policy": "V300 implements the recovered five-step grip-entry contract. Palm contact may be solved, but the thumb-down gate is explicitly pending because no approved thumb-axis writer/probe is active. Fingers remain blocked."
              }
            },
            "nextPhase": "thumb_down_gate_pending_finger_child_layer_blocked",
            "notes": [
              "V300 palm contact is solved, but thumb-down gate is pending; pass remains false so v68/V200 finger layer stays blocked",
              "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
              "shifted-surface gate is evaluated after object/leg meet"
            ]
          },
          "policy": "V267 active path: solveGrip V1 owns palm contact. Historical V189/V198/V199 are not active decision nodes."
        },
        "v151MeshTruth": {
          "active": true,
          "handVertexCount": 10755,
          "palmVertexCount": 4763,
          "legVertexCount": 2337,
          "meshToMeshNearestM": 0.005294404096676208,
          "nearest": {
            "d": 0.005294404096676208,
            "h": {
              "x": -0.10039452660024349,
              "y": 0.8340919874692001,
              "z": -0.34097278467324016,
              "i": 57619
            },
            "l": {
              "x": -0.0951794993391814,
              "y": 0.8334906273269227,
              "z": -0.3416602229501503,
              "i": 70541
            }
          },
          "bones": {
            "H": {
              "x": -0.1207373126595309,
              "y": 0.8287622234497477,
              "z": -0.34626184849153424
            },
            "M": {
              "x": -0.14622623476027347,
              "y": 0.7554488428881334,
              "z": -0.38340844433259197
            },
            "I": {
              "x": -0.15004161396429636,
              "y": 0.7470407133717458,
              "z": -0.3648686743639632
            },
            "P": {
              "x": -0.127346343680383,
              "y": 0.7733320004394392,
              "z": -0.4084250653669186
            },
            "Th": {
              "x": -0.12582677959211,
              "y": 0.8027314534034363,
              "z": -0.3376040789372039
            },
            "Rg": {
              "x": -0.13704539923973577,
              "y": 0.7643756361257313,
              "z": -0.3962865236989054
            },
            "F": {
              "x": -0.07290194572114439,
              "y": 0.8026745637279653,
              "z": -0.34332861346683674
            },
            "K": {
              "x": -0.11123658208556227,
              "y": 0.4303332072896015,
              "z": -0.21599821708689507
            }
          },
          "radial": {
            "M": {
              "r": 0.08784796075032177,
              "vec": {
                "x": -0.06957432594844352,
                "y": -0.010802619535141587,
                "z": -0.05253551929874481
              },
              "axial": -0.02458364878784054
            },
            "I": {
              "r": 0.08189929248700385,
              "vec": {
                "x": -0.07200718434891397,
                "y": -0.0057824314745615665,
                "z": -0.038587860762878845
              },
              "axial": -0.01032466691215729
            },
            "P": {
              "r": 0.08899426790935908,
              "vec": {
                "x": -0.05328597707820339,
                "y": -0.01809091091674219,
                "z": -0.06894420432310797
              },
              "axial": -0.05131218213252554
            },
            "Th": {
              "r": 0.05278166820724334,
              "vec": {
                "x": -0.05225374045306206,
                "y": 0.006575168110244445,
                "z": 0.003495464450623483
              },
              "axial": -0.0563383585534965
            },
            "Rg": {
              "r": 0.08802887022108719,
              "vec": {
                "x": -0.06169702177680781,
                "y": -0.014536925414179662,
                "z": -0.06108385462440701
              },
              "axial": -0.03802795272208741
            }
          },
          "sourceRadialSupport": {
            "legSurfaceM": 0.029305549030179977,
            "handContactFaceM": 0.02173014202576943,
            "gapM": -0.007575407004410548,
            "legCountBand": 208,
            "handCountBand": 8721
          },
          "palmSourceRadialSupport": {
            "legSurfaceM": 0.029305549030179977,
            "palmContactFaceM": 0.02173014202576943,
            "gapM": -0.007575407004410548,
            "legCountBand": 208,
            "palmCountBand": 3502
          },
          "note": "V153 actual posed skinned-mesh truth after all writers. palmSourceRadialSupport excludes distal fingers so wrap-around cannot masquerade as palm penetration."
        },
        "activeHandProbe": {
          "schema": "V93_RIGHT_HAND_CONTROL_PROBE",
          "side": "R",
          "profileId": "warmup_hurdle_stretch_right_pose_v50_ik_v1",
          "caseId": "v94_right_full",
          "phase": 0.75,
          "purpose": "Locate whether the bad heel-grab hand rotation is authored/normalized, one-writer commit/IK, or post-finger-layer.",
          "sourceContactRule": [
            {
              "type": "v94_space_control_right_finger_grip",
              "gripSide": "R",
              "handPreset": "v83_compact_heel_hook",
              "contactStyle": "v94_space_control_normalized_same_side_fingertip_targets_thumb_down",
              "wristPolicy": "lock_v86_v91_roll_no_v87_90deg_compensation",
              "thumbVectorConstraint": "thumb_tip_world_y_negative_down_opposition"
            },
            {
              "type": "support_foot_contact",
              "gripSide": null,
              "handPreset": null,
              "contactStyle": null,
              "wristPolicy": null,
              "thumbVectorConstraint": null
            }
          ],
          "rawAuthored": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": -0.1499619285617507,
                "y": -0.9122683987506505,
                "z": -0.38115323509444926
              },
              "palmRay": {
                "x": 0.5525321015128176,
                "y": -0.589367574947006,
                "z": -0.589367574947006
              },
              "mcpAxis": {
                "x": 0.6400261077368842,
                "y": 0.39227406603228293,
                "z": 0.6606721112122673
              },
              "palmNormal": {
                "x": 0.1641411504193291,
                "y": 0.7702007827368496,
                "z": -0.6163184542187287
              },
              "wristToIndex": {
                "x": 0.9678215817483968,
                "y": -0.24195539543709932,
                "z": -0.06913011298202934
              },
              "wristToPinky": {
                "x": -0.06991886350763156,
                "y": -0.6059634837328055,
                "z": -0.7924137864198243
              },
              "mcpCenter": {
                "x": -0.137,
                "y": 0.817,
                "z": -0.32199999999999995
              },
              "mcpCenterRay": {
                "x": 0.4556766353603054,
                "y": -0.6014931586756037,
                "z": -0.6561743549188405
              },
              "angles": {
                "palmRay_vs_forearm": 47.2,
                "mcpCenter_vs_forearm": 43.07,
                "mcpAxis_vs_forearm": 134.88,
                "palmNormal_vs_forearm": 119.49
              }
            },
            "points": {
              "R_Forearm": {
                "x": -0.138,
                "y": 0.996,
                "z": -0.225
              },
              "R_Hand": {
                "x": -0.162,
                "y": 0.85,
                "z": -0.286
              },
              "R_PalmBase": {
                "x": -0.132,
                "y": 0.818,
                "z": -0.318
              },
              "R_PalmIndexBase": {
                "x": -0.106,
                "y": 0.836,
                "z": -0.29
              },
              "R_PalmPinkyBase": {
                "x": -0.168,
                "y": 0.798,
                "z": -0.354
              },
              "R_Foot": {
                "x": -0.108,
                "y": 0.812,
                "z": -0.325
              },
              "R_ToeBase": {
                "x": -0.048,
                "y": 0.834,
                "z": -0.405
              }
            }
          },
          "finalNormalized": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": 0.2654564293088304,
                "y": -0.7287446770652007,
                "z": -0.6312401126257285
              },
              "palmRay": {
                "x": -0.2962145585214026,
                "y": -0.8519971108657594,
                "z": -0.4316918558374361
              },
              "mcpAxis": {
                "x": -0.4073914090513697,
                "y": -0.4719417108863736,
                "z": 0.7818588500213974
              },
              "palmNormal": {
                "x": 0.8851957066070935,
                "y": -0.4146420895481806,
                "z": 0.21095141284069827
              },
              "wristToIndex": {
                "x": -0.33004692820556286,
                "y": -0.920408611868654,
                "z": -0.20956386229521884
              },
              "wristToPinky": {
                "x": -0.07910348948186957,
                "y": -0.66344470658621,
                "z": -0.7440320955809161
              },
              "mcpCenter": {
                "x": -0.13829910859535297,
                "y": 0.7584687061064759,
                "z": -0.38947394318922346
              },
              "mcpCenterRay": {
                "x": -0.22009881400016468,
                "y": -0.8405495158700073,
                "z": -0.49500810442498566
              },
              "angles": {
                "palmRay_vs_forearm": 35.44,
                "mcpCenter_vs_forearm": 29.94,
                "mcpAxis_vs_forearm": 104.94,
                "palmNormal_vs_forearm": 66.17
              }
            },
            "points": {
              "R_Forearm": {
                "x": -0.18205,
                "y": 0.99645,
                "z": -0.20235
              },
              "R_Hand": {
                "x": -0.12034,
                "y": 0.82704,
                "z": -0.34909
              },
              "R_PalmBase": {
                "x": -0.14583,
                "y": 0.75373,
                "z": -0.38624
              },
              "R_PalmIndexBase": {
                "x": -0.14965,
                "y": 0.74532,
                "z": -0.3677
              },
              "R_PalmPinkyBase": {
                "x": -0.12695,
                "y": 0.77161,
                "z": -0.41125
              },
              "R_Foot": {
                "x": -0.07262,
                "y": 0.80502,
                "z": -0.34198
              },
              "R_ToeBase": {
                "x": -0.0005,
                "y": 0.83147,
                "z": -0.43815
              }
            }
          },
          "afterCommitBeforeFingers": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": 0.26545641834222355,
                "y": -0.7287446574495333,
                "z": -0.6312401398831357
              },
              "palmRay": {
                "x": -0.2962145200523702,
                "y": -0.851997104885133,
                "z": -0.4316918940372817
              },
              "mcpAxis": {
                "x": -0.40739138860937385,
                "y": -0.471941678281189,
                "z": 0.7818588803537766
              },
              "palmNormal": {
                "x": 0.885195715988438,
                "y": -0.4146420673611113,
                "z": 0.2109514170851194
              },
              "wristToIndex": {
                "x": -0.3300468991461368,
                "y": -0.9204086019412488,
                "z": -0.2095639516629124
              },
              "wristToPinky": {
                "x": -0.07910354408653247,
                "y": -0.6634447736420137,
                "z": -0.7440320299826124
              },
              "mcpCenter": {
                "x": -0.1386939788223397,
                "y": 0.7601863569055924,
                "z": -0.3866468698654409
              },
              "mcpCenterRay": {
                "x": -0.22009881541649412,
                "y": -0.8405495126812135,
                "z": -0.49500810920997124
              },
              "angles": {
                "palmRay_vs_forearm": 35.44,
                "mcpCenter_vs_forearm": 29.94,
                "mcpAxis_vs_forearm": 104.94,
                "palmNormal_vs_forearm": 66.17
              }
            },
            "errors": [
              {
                "joint": "R_Forearm",
                "ok": true,
                "distance": 0.00893,
                "target": {
                  "x": -0.18205,
                  "y": 0.99645,
                  "z": -0.20235
                },
                "actual": {
                  "x": -0.17926,
                  "y": 0.98942,
                  "z": -0.2071
                },
                "delta": {
                  "x": 0.00279,
                  "y": -0.00703,
                  "z": -0.00475
                }
              },
              {
                "joint": "R_Hand",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.12034,
                  "y": 0.82704,
                  "z": -0.34909
                },
                "actual": {
                  "x": -0.12074,
                  "y": 0.82876,
                  "z": -0.34626
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_PalmBase",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.14583,
                  "y": 0.75373,
                  "z": -0.38624
                },
                "actual": {
                  "x": -0.14623,
                  "y": 0.75545,
                  "z": -0.38341
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_PalmIndexBase",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.14965,
                  "y": 0.74532,
                  "z": -0.3677
                },
                "actual": {
                  "x": -0.15004,
                  "y": 0.74704,
                  "z": -0.36487
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_PalmPinkyBase",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.12695,
                  "y": 0.77161,
                  "z": -0.41125
                },
                "actual": {
                  "x": -0.12735,
                  "y": 0.77333,
                  "z": -0.40843
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_Foot",
                "ok": true,
                "distance": 0.00272,
                "target": {
                  "x": -0.07262,
                  "y": 0.80502,
                  "z": -0.34198
                },
                "actual": {
                  "x": -0.0729,
                  "y": 0.80267,
                  "z": -0.34333
                },
                "delta": {
                  "x": -0.00028,
                  "y": -0.00235,
                  "z": -0.00135
                }
              },
              {
                "joint": "R_ToeBase",
                "ok": true,
                "distance": 0.00272,
                "target": {
                  "x": -0.0005,
                  "y": 0.83147,
                  "z": -0.43815
                },
                "actual": {
                  "x": -0.00078,
                  "y": 0.82912,
                  "z": -0.43949
                },
                "delta": {
                  "x": -0.00028,
                  "y": -0.00235,
                  "z": -0.00135
                }
              }
            ]
          },
          "afterFingerLayer": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": 0.26545641834222355,
                "y": -0.7287446574495333,
                "z": -0.6312401398831357
              },
              "palmRay": {
                "x": -0.2962145200523702,
                "y": -0.851997104885133,
                "z": -0.4316918940372817
              },
              "mcpAxis": {
                "x": -0.40739138860937385,
                "y": -0.471941678281189,
                "z": 0.7818588803537766
              },
              "palmNormal": {
                "x": 0.885195715988438,
                "y": -0.4146420673611113,
                "z": 0.2109514170851194
              },
              "wristToIndex": {
                "x": -0.3300468991461368,
                "y": -0.9204086019412488,
                "z": -0.2095639516629124
              },
              "wristToPinky": {
                "x": -0.07910354408653247,
                "y": -0.6634447736420137,
                "z": -0.7440320299826124
              },
              "mcpCenter": {
                "x": -0.1386939788223397,
                "y": 0.7601863569055924,
                "z": -0.3866468698654409
              },
              "mcpCenterRay": {
                "x": -0.22009881541649412,
                "y": -0.8405495126812135,
                "z": -0.49500810920997124
              },
              "angles": {
                "palmRay_vs_forearm": 35.44,
                "mcpCenter_vs_forearm": 29.94,
                "mcpAxis_vs_forearm": 104.94,
                "palmNormal_vs_forearm": 66.17
              }
            },
            "errors": [
              {
                "joint": "R_Forearm",
                "ok": true,
                "distance": 0.00893,
                "target": {
                  "x": -0.18205,
                  "y": 0.99645,
                  "z": -0.20235
                },
                "actual": {
                  "x": -0.17926,
                  "y": 0.98942,
                  "z": -0.2071
                },
                "delta": {
                  "x": 0.00279,
                  "y": -0.00703,
                  "z": -0.00475
                }
              },
              {
                "joint": "R_Hand",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.12034,
                  "y": 0.82704,
                  "z": -0.34909
                },
                "actual": {
                  "x": -0.12074,
                  "y": 0.82876,
                  "z": -0.34626
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_PalmBase",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.14583,
                  "y": 0.75373,
                  "z": -0.38624
                },
                "actual": {
                  "x": -0.14623,
                  "y": 0.75545,
                  "z": -0.38341
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_PalmIndexBase",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.14965,
                  "y": 0.74532,
                  "z": -0.3677
                },
                "actual": {
                  "x": -0.15004,
                  "y": 0.74704,
                  "z": -0.36487
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_PalmPinkyBase",
                "ok": true,
                "distance": 0.00333,
                "target": {
                  "x": -0.12695,
                  "y": 0.77161,
                  "z": -0.41125
                },
                "actual": {
                  "x": -0.12735,
                  "y": 0.77333,
                  "z": -0.40843
                },
                "delta": {
                  "x": -0.00039,
                  "y": 0.00172,
                  "z": 0.00283
                }
              },
              {
                "joint": "R_Foot",
                "ok": true,
                "distance": 0.00272,
                "target": {
                  "x": -0.07262,
                  "y": 0.80502,
                  "z": -0.34198
                },
                "actual": {
                  "x": -0.0729,
                  "y": 0.80267,
                  "z": -0.34333
                },
                "delta": {
                  "x": -0.00028,
                  "y": -0.00235,
                  "z": -0.00135
                }
              },
              {
                "joint": "R_ToeBase",
                "ok": true,
                "distance": 0.00272,
                "target": {
                  "x": -0.0005,
                  "y": 0.83147,
                  "z": -0.43815
                },
                "actual": {
                  "x": -0.00078,
                  "y": 0.82912,
                  "z": -0.43949
                },
                "delta": {
                  "x": -0.00028,
                  "y": -0.00235,
                  "z": -0.00135
                }
              }
            ]
          },
          "comparisons": [
            {
              "label": "raw_authored_to_final_normalized_target",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": 72.65,
              "roll_palmray_about_target_forearm_deg": -129.46,
              "angle_forearm_deg": 30.05,
              "angle_palmray_deg": 53.64,
              "angle_mcp_axis_deg": 85.95,
              "angle_palm_normal_deg": 107.7
            },
            {
              "label": "final_target_to_after_one_writer_commit_before_fingers",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": -0.0,
              "roll_palmray_about_target_forearm_deg": 0,
              "angle_forearm_deg": 0,
              "angle_palmray_deg": 0,
              "angle_mcp_axis_deg": 0,
              "angle_palm_normal_deg": 0
            },
            {
              "label": "after_commit_to_after_finger_layer",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": 0,
              "roll_palmray_about_target_forearm_deg": 0,
              "angle_forearm_deg": 0,
              "angle_palmray_deg": 0,
              "angle_mcp_axis_deg": 0,
              "angle_palm_normal_deg": 0
            },
            {
              "label": "final_target_to_after_finger_layer",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": -0.0,
              "roll_palmray_about_target_forearm_deg": 0,
              "angle_forearm_deg": 0,
              "angle_palmray_deg": 0,
              "angle_mcp_axis_deg": 0,
              "angle_palm_normal_deg": 0
            }
          ],
          "summary": {
            "maxPointErrorAfterCommitM": 0.00893,
            "maxPointErrorAfterFingerM": 0.00893,
            "firstBreak": "normalization/authoring-frame changes raw hand roll before runtime commit"
          },
          "fingerLayer": {
            "schema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
            "active": false,
            "side": "R",
            "blocked": true,
            "reason": "grip_solver_v1_palm_contract_not_passed",
            "gripPass": false,
            "gripReason": null,
            "entryFrameGate": {
              "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
              "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
              "active": true,
              "mutatesTargets": false,
              "side": "R",
              "pass": true,
              "gate": "GRIP_ENTRY_FRAME_USABLE",
              "desiredOutsideDistanceM": 0.055,
              "signedOutsideM": 0.12338,
              "palmBaseOutsideM": 0.11954,
              "requiredOutwardShiftM": 0,
              "palmAcrossOutsideDot": -0.82552,
              "limbAxisA": "R_Foot",
              "limbAxisB": "R_Calf",
              "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
            },
            "policy": "V297 enforces the V267/V286/V291 contract: fingers are child-layer only after palm/hand/object entry passes. While blocked, there are no finger, thumb, hand, wrist, arm, snap-point, leg, foot or toe writes."
          }
        },
        "bodyText": "NEXPROD01\none writer\nsleep\nNEXPLAYER RUNTIME\nDynamic Warm Up \u00b7 02 \u00b7 Hurdle stretch\nhurdle-stretch \u2192 warmup_hurdle_stretch_right_pose_v50_ik_v1 \u00b7 for_nex_approval \u00b7 ikHash 21f3711c \u00b7 phase 0.750\nCHECK"
      },
      "screenshot": "/mnt/data/nex_v300_grip_entry_contract/diagnostics/v300_browser_screens/V300_right_contract_player.png",
      "summary": {
        "hasDebug": true,
        "hasModel": true,
        "boneCount": 165,
        "skinnedMeshCount": 12,
        "canvasCount": 1,
        "hasGripSolverV1": true,
        "gripSchema": "NEXPROD01_GRIP_SOLVER_V1",
        "gripSide": "R",
        "gripApplied": true,
        "gripPass": false,
        "gripReason": null,
        "gripStatus": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
        "preFingerReady": false,
        "entryGateSchema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
        "entryGate": "GRIP_ENTRY_FRAME_USABLE",
        "entryGatePass": true,
        "entrySignedOutsideM": 0.12338,
        "entryRequiredOutwardShiftM": 0,
        "v300PalmFrameGateSchema": "NEXPROD01_V300_PALM_FRAME_GATE",
        "v300PalmFrameGatePass": false,
        "v300RollPass": true,
        "v300RollDeg": 73,
        "v300ObjectMeetM": 0.00289,
        "v300ObjectMeetPass": true,
        "fingerGateSchema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
        "fingerBlocked": true,
        "fingerActive": false,
        "probeSide": "R",
        "meshTruthSide": null
      }
    },
    {
      "case": {
        "name": "left",
        "caseId": "v94_left_full",
        "exercise": "hurdle-stretch",
        "phase": 0.25
      },
      "url": "http://127.0.0.1:39279/assets/nexprod/nexprod01-player.html?exercise=hurdle-stretch&caseId=v94_left_full&phase=0.25&play=0&debug=0&visualMode=nex&nativeRuntimeParity=1&nativeSkin=1&skinPreset=freeridehuman&readyTimeoutMs=12000&hostLifecycle=v300-grip-entry-contract-browser-audit&build=NEXPROD01_RUNTIME_V300_GRIP_ENTRY_CONTRACT_REHYDRATED_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V300_left",
      "navigationError": null,
      "polls": [
        {
          "t": 1,
          "hasDebug": true,
          "hasModel": true,
          "boneCount": 165,
          "markerCount": 21,
          "gripSchema": "NEXPROD01_GRIP_SOLVER_V1",
          "fingerGateSchema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE"
        }
      ],
      "final": {
        "href": "http://127.0.0.1:39279/assets/nexprod/nexprod01-player.html?exercise=hurdle-stretch&caseId=v94_left_full&phase=0.25&play=0&debug=0&visualMode=nex&nativeRuntimeParity=1&nativeSkin=1&skinPreset=freeridehuman&readyTimeoutMs=12000&hostLifecycle=v300-grip-entry-contract-browser-audit&build=NEXPROD01_RUNTIME_V300_GRIP_ENTRY_CONTRACT_REHYDRATED_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V300_left",
        "ready": "complete",
        "hasDebug": true,
        "hasModel": true,
        "boneCount": 165,
        "skinnedMeshCount": 12,
        "canvasCount": 1,
        "windowMarkers": [
          "__NEXPROD01_DEBUG_SCENE",
          "__NEXPROD01_GRIP_SOLVER_V1",
          "__NEXPROD01_PUBLISH",
          "__NEXPROD01_V100_GRIP_CAPSULE_SURFACE",
          "__NEXPROD01_V102_HEEL_TO_GLUTE_REACH",
          "__NEXPROD01_V110_DISTAL_GRIP_COUPLED",
          "__NEXPROD01_V140_GRIP_HAND_QA_TINT",
          "__NEXPROD01_V151_ACTUAL_MESH_TRUTH",
          "__NEXPROD01_V153_MESH_FEEDBACK",
          "__NEXPROD01_V157_REAL_MEDIAPIPE_HAND_FRAME",
          "__NEXPROD01_V169_LEG_CLOSER_ONLY",
          "__NEXPROD01_V175_LEG_OUT",
          "__NEXPROD01_V184_SNAP_ONLY_FEASIBILITY",
          "__NEXPROD01_V189_PRE_SNAP_NEUTRAL_APPROACH",
          "__NEXPROD01_V198_V195_DELTA_SINGLE_WRITER",
          "__NEXPROD01_V199_LOCK_GREEN_ROLL_PINK",
          "__NEXPROD01_V266_CLEAN_GRIP_CONTRACT",
          "__NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
          "__NEXPROD01_V69_SHIN_GRIP_FINGER_LAYER",
          "__NEXPROD01_V70_BIORIG_FULL_GRIP_LAYER",
          "__NEXPROD01_V93_ACTIVE_HAND_CONTROL_PROBE"
        ],
        "markerCount": 21,
        "gripSolverV1": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1",
          "version": "V300_GRIP_ENTRY_CONTRACT_REHYDRATED_FROM_V267",
          "side": "L",
          "applied": true,
          "implemented": true,
          "policy": "V300 rehydrated clean grip solver: V267 palm-contract owner plus explicit five-step grip-entry contract. Neutralization is an approach/contact gate; object/leg meet uses shifted-surface validation; fingers remain blocked until separate visual approval.",
          "pass": false,
          "palmContactReady": true,
          "preFingerReady": false,
          "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
          "ruleType": "v94_space_control_left_finger_grip",
          "targetLimb": "L_lower_shin_heel_cylinder",
          "targetSide": "outside_shifted_surface",
          "palmPoints": {
            "pointA": {
              "x": 0.98367,
              "y": 0.76385,
              "z": -0.12841,
              "vertex": 46363,
              "anatomy": "left homolog of right thenar surface, L_Thumb2-weighted"
            },
            "pointB": {
              "x": -0.01101,
              "y": 0.62481,
              "z": 0.30647,
              "vertex": 39744,
              "anatomy": "left homolog of right palm surface, L_Hand-weighted"
            }
          },
          "limb": {
            "axisA": "L_Foot",
            "axisB": "L_Calf",
            "axisPoint": {
              "x": 0.12016,
              "y": 1.01636,
              "z": -0.32949
            },
            "outside": {
              "x": 0.99445,
              "y": -0.09524,
              "z": -0.04478
            },
            "target": {
              "x": 0.17485,
              "y": 1.01112,
              "z": -0.33196
            },
            "radiusM": 0.052,
            "clearanceM": 0.003,
            "t": 0.16
          },
          "beforeBasis": null,
          "afterAngles": {
            "palmRay_vs_forearm": 46.7,
            "mcpCenter_vs_forearm": 42.21,
            "mcpAxis_vs_forearm": 125.46,
            "palmNormal_vs_forearm": 83
          },
          "stages": {
            "neutralPalm": {
              "applied": true,
              "xSource": "raw_index_minus_pinky_projected",
              "beforeAngles": {
                "palmRay_vs_forearm": 63.25,
                "mcpCenter_vs_forearm": 60.87,
                "mcpAxis_vs_forearm": 129.3,
                "palmNormal_vs_forearm": 58.85
              },
              "afterAngles": {
                "palmRay_vs_forearm": 10.53,
                "mcpCenter_vs_forearm": 6.09,
                "mcpAxis_vs_forearm": 90,
                "palmNormal_vs_forearm": 90
              },
              "pass": true,
              "policy": "Solver V1 neutral palm: visible palm/MCP axis follows the forearm before object contact. This is a named solver step, not a historical patch."
            },
            "v297EntryFrameGate": {
              "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
              "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
              "active": true,
              "mutatesTargets": false,
              "side": "L",
              "pass": false,
              "gate": "NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP",
              "desiredOutsideDistanceM": 0.055,
              "signedOutsideM": 0.02508,
              "palmBaseOutsideM": 0.02224,
              "requiredOutwardShiftM": 0.02992,
              "palmAcrossOutsideDot": -0.76411,
              "limbAxisA": "L_Foot",
              "limbAxisB": "L_Calf",
              "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
            },
            "pointASnap": {
              "applied": true,
              "pointA0": {
                "x": 0.11428,
                "y": 0.95475,
                "z": -0.25105
              },
              "pointB0": {
                "x": 0.17274,
                "y": 0.97181,
                "z": -0.26103
              },
              "limbTargetBefore": {
                "x": 0.18943,
                "y": 0.95093,
                "z": -0.3791
              },
              "limbTargetAfter": {
                "x": 0.17485,
                "y": 1.01112,
                "z": -0.33196
              },
              "shift": {
                "x": 0.07515,
                "y": -0.00382,
                "z": -0.12806
              },
              "shiftM": 0.14853,
              "pointAAfter": {
                "x": 0.17485,
                "y": 1.01112,
                "z": -0.33196
              },
              "pointBAfter": {
                "x": 0.23331,
                "y": 1.02818,
                "z": -0.34194
              },
              "arm": {
                "ok": true,
                "distance": 0.45253411647940833,
                "minReach": 0.014049215156796717,
                "maxReach": 0.45253,
                "segmentErrorM": {
                  "upperarm": 0,
                  "forearm": 0
                },
                "clamped": true,
                "desiredDistance": 0.53037,
                "handDelta": {
                  "x": 0.06057,
                  "y": 0.05637,
                  "z": -0.08091
                },
                "legDelta": {
                  "x": -0.01458,
                  "y": 0.06019,
                  "z": 0.04715
                },
                "legDeltaM": 0.07784,
                "segmentLengths": {
                  "thighM": 0.30846,
                  "calfM": 0.39526,
                  "rawThighM": 0.30323,
                  "rawCalfM": 0.37435
                },
                "policy": "Arm could not reach the one outside limb point; move the target limb contact body by the residual instead of inventing a hand point. This encodes the prior learning explicitly inside the solver."
              },
              "policy": "Step 1-2 of V300 contract: arm reach / approach places first inside-palm contact on the outside limb snap. If the arm cannot reach, object/leg-meet is the only allowed compensation; fingers/hand-only patches are not owners."
            },
            "v300ObjectMeetGate": {
              "schema": "NEXPROD01_V300_OBJECT_LEG_MEET_SHIFTED_SURFACE_GATE",
              "active": true,
              "applied": true,
              "meetM": 0.07784,
              "maxObjectMeetM": 0.08,
              "pass": true,
              "legDelta": {
                "x": -0.01458,
                "y": 0.06019,
                "z": 0.04715
              },
              "clamped": true,
              "policy": "V300 keeps neutralization in the approach/contact layer. If arm reach cannot place first palm contact, the lower-leg/object target surface may meet the hand up to 80 mm before palm-frame validation. Surface checks must then use the shifted surface, not the original one."
            },
            "v300ForearmAxisSecondPalmRoll": {
              "schema": "NEXPROD01_V300_FOREARM_AXIS_SECOND_PALM_ROLL",
              "active": true,
              "applied": true,
              "pass": true,
              "rollDeg": 115,
              "axis": {
                "x": 0.18892,
                "y": -0.77222,
                "z": -0.60662
              },
              "before": {
                "first": {
                  "radialM": 0.055,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.055,
                  "outsideScore": 1,
                  "distanceToSurfaceM": 0,
                  "penetrationM": 0,
                  "surfaceOk": true,
                  "sideOk": true
                },
                "second": {
                  "radialM": 0.11198,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.11196,
                  "outsideScore": 0.9998,
                  "distanceToSurfaceM": 0.05698,
                  "penetrationM": 0,
                  "surfaceOk": false,
                  "sideOk": true
                },
                "pointA": {
                  "x": 0.17485,
                  "y": 1.01112,
                  "z": -0.33196
                },
                "pointB": {
                  "x": 0.23331,
                  "y": 1.02818,
                  "z": -0.34194
                }
              },
              "after": {
                "first": {
                  "radialM": 0.055,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.055,
                  "outsideScore": 1,
                  "distanceToSurfaceM": 0,
                  "penetrationM": 0,
                  "surfaceOk": true,
                  "sideOk": true
                },
                "second": {
                  "radialM": 0.05512,
                  "requiredRadialM": 0.055,
                  "signedOutsideM": 0.04976,
                  "outsideScore": 0.90273,
                  "distanceToSurfaceM": 0.00012,
                  "penetrationM": 0,
                  "surfaceOk": true,
                  "sideOk": true
                },
                "pointA": {
                  "x": 0.17485,
                  "y": 1.01112,
                  "z": -0.33196
                },
                "pointB": {
                  "x": 0.16757,
                  "y": 0.96917,
                  "z": -0.28729
                },
                "palmFacesObject": 0.94225,
                "thumbDownProxy": -0.78297,
                "grossPenetration": false,
                "arm": {
                  "ok": true,
                  "distance": 0.46887050894149274,
                  "minReach": 0.017543664772971035,
                  "maxReach": 0.4841249964091761,
                  "segmentErrorM": {
                    "upperarm": 0,
                    "forearm": 0
                  }
                }
              },
              "policy": "V300 contract step 3: keep the first palm contact fixed, then rotate the rigid hand/palm frame around the active wrist/forearm axis to bring the second palm point toward the shifted outside limb surface. Fingers remain blocked for visual approval."
            },
            "v300PalmFrameGate": {
              "schema": "NEXPROD01_V300_PALM_FRAME_GATE",
              "active": true,
              "pass": false,
              "palmContactReady": true,
              "preFingerReady": false,
              "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
              "checks": {
                "handPalmTowardObject": true,
                "thumbDownVerified": false,
                "thumbDownGate": "UNVERIFIED_THUMB_AXIS_NO_THUMB_WRITE_IN_V300",
                "thumbDownProxyTelemetry": -0.78297,
                "firstPalmOnShiftedSurface": true,
                "secondPalmOnShiftedSurface": true,
                "outsideContact": true,
                "noGrossPenetration": true,
                "objectMeetWithinLimit": true
              },
              "policy": "V300 implements the recovered five-step grip-entry contract. Palm contact may be solved, but the thumb-down gate is explicitly pending because no approved thumb-axis writer/probe is active. Fingers remain blocked."
            }
          },
          "nextPhase": "thumb_down_gate_pending_finger_child_layer_blocked",
          "notes": [
            "V300 palm contact is solved, but thumb-down gate is pending; pass remains false so v68/V200 finger layer stays blocked",
            "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
            "shifted-surface gate is evaluated after object/leg meet"
          ]
        },
        "v297FingerGate": {
          "schema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
          "active": false,
          "side": "L",
          "blocked": true,
          "reason": "grip_solver_v1_palm_contract_not_passed",
          "gripPass": false,
          "gripReason": null,
          "entryFrameGate": {
            "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
            "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
            "active": true,
            "mutatesTargets": false,
            "side": "L",
            "pass": false,
            "gate": "NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP",
            "desiredOutsideDistanceM": 0.055,
            "signedOutsideM": 0.02508,
            "palmBaseOutsideM": 0.02224,
            "requiredOutwardShiftM": 0.02992,
            "palmAcrossOutsideDot": -0.76411,
            "limbAxisA": "L_Foot",
            "limbAxisB": "L_Calf",
            "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
          },
          "policy": "V297 enforces the V267/V286/V291 contract: fingers are child-layer only after palm/hand/object entry passes. While blocked, there are no finger, thumb, hand, wrist, arm, snap-point, leg, foot or toe writes."
        },
        "v110DistalGrip": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1_BRIDGE",
          "applied": true,
          "pass": false,
          "reason": "clean grip solver completed palm contract; finger layer may run only if contract passes",
          "contract": {
            "schema": "NEXPROD01_GRIP_SOLVER_V1",
            "version": "V300_GRIP_ENTRY_CONTRACT_REHYDRATED_FROM_V267",
            "side": "L",
            "applied": true,
            "implemented": true,
            "policy": "V300 rehydrated clean grip solver: V267 palm-contract owner plus explicit five-step grip-entry contract. Neutralization is an approach/contact gate; object/leg meet uses shifted-surface validation; fingers remain blocked until separate visual approval.",
            "pass": false,
            "palmContactReady": true,
            "preFingerReady": false,
            "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
            "ruleType": "v94_space_control_left_finger_grip",
            "targetLimb": "L_lower_shin_heel_cylinder",
            "targetSide": "outside_shifted_surface",
            "palmPoints": {
              "pointA": {
                "x": 0.98367,
                "y": 0.76385,
                "z": -0.12841,
                "vertex": 46363,
                "anatomy": "left homolog of right thenar surface, L_Thumb2-weighted"
              },
              "pointB": {
                "x": -0.01101,
                "y": 0.62481,
                "z": 0.30647,
                "vertex": 39744,
                "anatomy": "left homolog of right palm surface, L_Hand-weighted"
              }
            },
            "limb": {
              "axisA": "L_Foot",
              "axisB": "L_Calf",
              "axisPoint": {
                "x": 0.12016,
                "y": 1.01636,
                "z": -0.32949
              },
              "outside": {
                "x": 0.99445,
                "y": -0.09524,
                "z": -0.04478
              },
              "target": {
                "x": 0.17485,
                "y": 1.01112,
                "z": -0.33196
              },
              "radiusM": 0.052,
              "clearanceM": 0.003,
              "t": 0.16
            },
            "beforeBasis": null,
            "afterAngles": {
              "palmRay_vs_forearm": 46.7,
              "mcpCenter_vs_forearm": 42.21,
              "mcpAxis_vs_forearm": 125.46,
              "palmNormal_vs_forearm": 83
            },
            "stages": {
              "neutralPalm": {
                "applied": true,
                "xSource": "raw_index_minus_pinky_projected",
                "beforeAngles": {
                  "palmRay_vs_forearm": 63.25,
                  "mcpCenter_vs_forearm": 60.87,
                  "mcpAxis_vs_forearm": 129.3,
                  "palmNormal_vs_forearm": 58.85
                },
                "afterAngles": {
                  "palmRay_vs_forearm": 10.53,
                  "mcpCenter_vs_forearm": 6.09,
                  "mcpAxis_vs_forearm": 90,
                  "palmNormal_vs_forearm": 90
                },
                "pass": true,
                "policy": "Solver V1 neutral palm: visible palm/MCP axis follows the forearm before object contact. This is a named solver step, not a historical patch."
              },
              "v297EntryFrameGate": {
                "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
                "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
                "active": true,
                "mutatesTargets": false,
                "side": "L",
                "pass": false,
                "gate": "NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP",
                "desiredOutsideDistanceM": 0.055,
                "signedOutsideM": 0.02508,
                "palmBaseOutsideM": 0.02224,
                "requiredOutwardShiftM": 0.02992,
                "palmAcrossOutsideDot": -0.76411,
                "limbAxisA": "L_Foot",
                "limbAxisB": "L_Calf",
                "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
              },
              "pointASnap": {
                "applied": true,
                "pointA0": {
                  "x": 0.11428,
                  "y": 0.95475,
                  "z": -0.25105
                },
                "pointB0": {
                  "x": 0.17274,
                  "y": 0.97181,
                  "z": -0.26103
                },
                "limbTargetBefore": {
                  "x": 0.18943,
                  "y": 0.95093,
                  "z": -0.3791
                },
                "limbTargetAfter": {
                  "x": 0.17485,
                  "y": 1.01112,
                  "z": -0.33196
                },
                "shift": {
                  "x": 0.07515,
                  "y": -0.00382,
                  "z": -0.12806
                },
                "shiftM": 0.14853,
                "pointAAfter": {
                  "x": 0.17485,
                  "y": 1.01112,
                  "z": -0.33196
                },
                "pointBAfter": {
                  "x": 0.23331,
                  "y": 1.02818,
                  "z": -0.34194
                },
                "arm": {
                  "ok": true,
                  "distance": 0.45253411647940833,
                  "minReach": 0.014049215156796717,
                  "maxReach": 0.45253,
                  "segmentErrorM": {
                    "upperarm": 0,
                    "forearm": 0
                  },
                  "clamped": true,
                  "desiredDistance": 0.53037,
                  "handDelta": {
                    "x": 0.06057,
                    "y": 0.05637,
                    "z": -0.08091
                  },
                  "legDelta": {
                    "x": -0.01458,
                    "y": 0.06019,
                    "z": 0.04715
                  },
                  "legDeltaM": 0.07784,
                  "segmentLengths": {
                    "thighM": 0.30846,
                    "calfM": 0.39526,
                    "rawThighM": 0.30323,
                    "rawCalfM": 0.37435
                  },
                  "policy": "Arm could not reach the one outside limb point; move the target limb contact body by the residual instead of inventing a hand point. This encodes the prior learning explicitly inside the solver."
                },
                "policy": "Step 1-2 of V300 contract: arm reach / approach places first inside-palm contact on the outside limb snap. If the arm cannot reach, object/leg-meet is the only allowed compensation; fingers/hand-only patches are not owners."
              },
              "v300ObjectMeetGate": {
                "schema": "NEXPROD01_V300_OBJECT_LEG_MEET_SHIFTED_SURFACE_GATE",
                "active": true,
                "applied": true,
                "meetM": 0.07784,
                "maxObjectMeetM": 0.08,
                "pass": true,
                "legDelta": {
                  "x": -0.01458,
                  "y": 0.06019,
                  "z": 0.04715
                },
                "clamped": true,
                "policy": "V300 keeps neutralization in the approach/contact layer. If arm reach cannot place first palm contact, the lower-leg/object target surface may meet the hand up to 80 mm before palm-frame validation. Surface checks must then use the shifted surface, not the original one."
              },
              "v300ForearmAxisSecondPalmRoll": {
                "schema": "NEXPROD01_V300_FOREARM_AXIS_SECOND_PALM_ROLL",
                "active": true,
                "applied": true,
                "pass": true,
                "rollDeg": 115,
                "axis": {
                  "x": 0.18892,
                  "y": -0.77222,
                  "z": -0.60662
                },
                "before": {
                  "first": {
                    "radialM": 0.055,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.055,
                    "outsideScore": 1,
                    "distanceToSurfaceM": 0,
                    "penetrationM": 0,
                    "surfaceOk": true,
                    "sideOk": true
                  },
                  "second": {
                    "radialM": 0.11198,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.11196,
                    "outsideScore": 0.9998,
                    "distanceToSurfaceM": 0.05698,
                    "penetrationM": 0,
                    "surfaceOk": false,
                    "sideOk": true
                  },
                  "pointA": {
                    "x": 0.17485,
                    "y": 1.01112,
                    "z": -0.33196
                  },
                  "pointB": {
                    "x": 0.23331,
                    "y": 1.02818,
                    "z": -0.34194
                  }
                },
                "after": {
                  "first": {
                    "radialM": 0.055,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.055,
                    "outsideScore": 1,
                    "distanceToSurfaceM": 0,
                    "penetrationM": 0,
                    "surfaceOk": true,
                    "sideOk": true
                  },
                  "second": {
                    "radialM": 0.05512,
                    "requiredRadialM": 0.055,
                    "signedOutsideM": 0.04976,
                    "outsideScore": 0.90273,
                    "distanceToSurfaceM": 0.00012,
                    "penetrationM": 0,
                    "surfaceOk": true,
                    "sideOk": true
                  },
                  "pointA": {
                    "x": 0.17485,
                    "y": 1.01112,
                    "z": -0.33196
                  },
                  "pointB": {
                    "x": 0.16757,
                    "y": 0.96917,
                    "z": -0.28729
                  },
                  "palmFacesObject": 0.94225,
                  "thumbDownProxy": -0.78297,
                  "grossPenetration": false,
                  "arm": {
                    "ok": true,
                    "distance": 0.46887050894149274,
                    "minReach": 0.017543664772971035,
                    "maxReach": 0.4841249964091761,
                    "segmentErrorM": {
                      "upperarm": 0,
                      "forearm": 0
                    }
                  }
                },
                "policy": "V300 contract step 3: keep the first palm contact fixed, then rotate the rigid hand/palm frame around the active wrist/forearm axis to bring the second palm point toward the shifted outside limb surface. Fingers remain blocked for visual approval."
              },
              "v300PalmFrameGate": {
                "schema": "NEXPROD01_V300_PALM_FRAME_GATE",
                "active": true,
                "pass": false,
                "palmContactReady": true,
                "preFingerReady": false,
                "status": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
                "checks": {
                  "handPalmTowardObject": true,
                  "thumbDownVerified": false,
                  "thumbDownGate": "UNVERIFIED_THUMB_AXIS_NO_THUMB_WRITE_IN_V300",
                  "thumbDownProxyTelemetry": -0.78297,
                  "firstPalmOnShiftedSurface": true,
                  "secondPalmOnShiftedSurface": true,
                  "outsideContact": true,
                  "noGrossPenetration": true,
                  "objectMeetWithinLimit": true
                },
                "policy": "V300 implements the recovered five-step grip-entry contract. Palm contact may be solved, but the thumb-down gate is explicitly pending because no approved thumb-axis writer/probe is active. Fingers remain blocked."
              }
            },
            "nextPhase": "thumb_down_gate_pending_finger_child_layer_blocked",
            "notes": [
              "V300 palm contact is solved, but thumb-down gate is pending; pass remains false so v68/V200 finger layer stays blocked",
              "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
              "shifted-surface gate is evaluated after object/leg meet"
            ]
          },
          "policy": "V267 active path: solveGrip V1 owns palm contact. Historical V189/V198/V199 are not active decision nodes."
        },
        "v151MeshTruth": {
          "active": true,
          "handVertexCount": 10752,
          "palmVertexCount": 4763,
          "legVertexCount": 2337,
          "meshToMeshNearestM": 0.0010469415131320423,
          "nearest": {
            "d": 0.0010469415131320423,
            "h": {
              "x": 0.1773719096906135,
              "y": 0.7663067025625919,
              "z": -0.33904363110065394,
              "i": 46305
            },
            "l": {
              "x": 0.1776911681554146,
              "y": 0.7669299206348801,
              "z": -0.33982193682396933,
              "i": 63611
            }
          },
          "bones": {
            "H": {
              "x": 0.1841677326759111,
              "y": 0.7549463018672987,
              "z": -0.24906605217115435
            },
            "M": {
              "x": 0.1772384332548424,
              "y": 0.7088081634538136,
              "z": -0.31975244977543493
            },
            "I": {
              "x": 0.17565124791278658,
              "y": 0.7259217852540278,
              "z": -0.3311468652729549
            },
            "P": {
              "x": 0.19148829335861017,
              "y": 0.6865672256204378,
              "z": -0.29478171008003184
            },
            "Th": {
              "x": 0.1859015203731898,
              "y": 0.7607563492367779,
              "z": -0.27587799240559363
            },
            "Rg": {
              "x": 0.184035145089174,
              "y": 0.6972862063227143,
              "z": -0.3073464255544382
            },
            "F": {
              "x": 0.13112989467879949,
              "y": 0.7501606595033823,
              "z": -0.4049906037048754
            },
            "K": {
              "x": 0.10367787984488355,
              "y": 0.38906076236276715,
              "z": -0.24661345344084012
            }
          },
          "radial": {
            "M": {
              "r": 0.079860419135585,
              "vec": {
                "x": 0.0508820883830715,
                "y": 0.021438098911935828,
                "z": 0.05769841888068225
              },
              "axial": 0.005488987414750103
            },
            "I": {
              "r": 0.07521086699802114,
              "vec": {
                "x": 0.04789958807995158,
                "y": 0.020197946245420494,
                "z": 0.0543539045868104
              },
              "axial": -0.014601031261314873
            },
            "P": {
              "r": 0.1010766149138738,
              "vec": {
                "x": 0.06716933366311352,
                "y": 0.02599663579979302,
                "z": 0.07091500281882375
              },
              "axial": 0.0348236590723036
            },
            "Th": {
              "r": 0.13534836806866907,
              "vec": {
                "x": 0.05742822913562135,
                "y": 0.04554027340696837,
                "z": 0.11378603928082329
              },
              "axial": -0.024991221865502046
            },
            "Rg": {
              "r": 0.09007803455604442,
              "vec": {
                "x": 0.05872234265230302,
                "y": 0.02364275049003313,
                "z": 0.06408400059430969
              },
              "axial": 0.020514116214642872
            }
          },
          "sourceRadialSupport": {
            "legSurfaceM": 0.12542338628571206,
            "handContactFaceM": 0.013464736735990681,
            "gapM": -0.11195864954972139,
            "legCountBand": 1258,
            "handCountBand": 8704
          },
          "palmSourceRadialSupport": {
            "legSurfaceM": 0.12542338628571206,
            "palmContactFaceM": 0.043643876284027994,
            "gapM": -0.08177951000168407,
            "legCountBand": 1258,
            "palmCountBand": 4637
          },
          "note": "V153 actual posed skinned-mesh truth after all writers. palmSourceRadialSupport excludes distal fingers so wrap-around cannot masquerade as palm penetration."
        },
        "activeHandProbe": {
          "schema": "V93_RIGHT_HAND_CONTROL_PROBE",
          "side": "L",
          "profileId": "warmup_hurdle_stretch_right_pose_v50_ik_v1",
          "caseId": "v94_left_full",
          "phase": 0.25,
          "purpose": "Locate whether the bad heel-grab hand rotation is authored/normalized, one-writer commit/IK, or post-finger-layer.",
          "sourceContactRule": [
            {
              "type": "v94_space_control_left_finger_grip",
              "gripSide": "L",
              "handPreset": "v83_compact_heel_hook",
              "contactStyle": "v94_space_control_left_kept_same_side_targets_not_solved",
              "wristPolicy": "left_still_not_approved_separate_rebuild_needed",
              "thumbVectorConstraint": "thumb_tip_world_y_negative_down_opposition"
            },
            {
              "type": "support_foot_contact",
              "gripSide": null,
              "handPreset": null,
              "contactStyle": null,
              "wristPolicy": null,
              "thumbVectorConstraint": null
            }
          ],
          "rawAuthored": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": 0.13930469368449422,
                "y": -0.9118125404803262,
                "z": -0.3862539233979154
              },
              "palmRay": {
                "x": -0.5773502691896255,
                "y": -0.577350269189626,
                "z": -0.577350269189626
              },
              "mcpAxis": {
                "x": -0.6897882399232318,
                "y": 0.31270400209853094,
                "z": 0.6529995337939927
              },
              "palmNormal": {
                "x": 0.1990110363329293,
                "y": -0.7852867920164219,
                "z": 0.5862757556834927
              },
              "wristToIndex": {
                "x": -0.9636241116594315,
                "y": -0.26684975399799665,
                "z": 0.014824986333221215
              },
              "wristToPinky": {
                "x": 0.11393098783744397,
                "y": -0.5924411367547074,
                "z": -0.7975169148621079
              },
              "mcpCenter": {
                "x": 0.1325,
                "y": 0.817,
                "z": -0.3205
              },
              "mcpCenterRay": {
                "x": -0.4883153045628865,
                "y": -0.6214922058073108,
                "z": -0.6126137457243501
              },
              "angles": {
                "palmRay_vs_forearm": 48.01,
                "mcpCenter_vs_forearm": 42.67,
                "mcpAxis_vs_forearm": 129.3,
                "palmNormal_vs_forearm": 58.85
              }
            },
            "points": {
              "L_Forearm": {
                "x": 0.138,
                "y": 0.996,
                "z": -0.225
              },
              "L_Hand": {
                "x": 0.16,
                "y": 0.852,
                "z": -0.286
              },
              "L_PalmBase": {
                "x": 0.128,
                "y": 0.82,
                "z": -0.318
              },
              "L_PalmIndexBase": {
                "x": 0.095,
                "y": 0.834,
                "z": -0.285
              },
              "L_PalmPinkyBase": {
                "x": 0.17,
                "y": 0.8,
                "z": -0.356
              },
              "L_Foot": {
                "x": 0.108,
                "y": 0.812,
                "z": -0.325
              },
              "L_ToeBase": {
                "x": 0.168,
                "y": 0.79,
                "z": -0.245
              }
            }
          },
          "finalNormalized": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": 0.022968573871216053,
                "y": -0.982951357692262,
                "z": -0.18242552733995593
              },
              "palmRay": {
                "x": -0.08181440230989372,
                "y": -0.5447537746693578,
                "z": -0.8345955478902107
              },
              "mcpAxis": {
                "x": -0.28343693719558266,
                "y": 0.7043319122004452,
                "z": -0.6508302851659958
              },
              "palmNormal": {
                "x": -0.9585041562064853,
                "y": -0.1864454019097821,
                "z": 0.21565689101346452
              },
              "wristToIndex": {
                "x": -0.09735694608233557,
                "y": -0.3317961865007558,
                "z": -0.9383138684220098
              },
              "wristToPinky": {
                "x": 0.0886497142839378,
                "y": -0.8280493407097469,
                "z": -0.553602309882762
              },
              "mcpCenter": {
                "x": 0.18491630812562948,
                "y": 0.6888208620060796,
                "z": -0.31346004357491253
              },
              "mcpCenterRay": {
                "x": -0.0074425035632221135,
                "y": -0.6061636543443706,
                "z": -0.7953051196192501
              },
              "angles": {
                "palmRay_vs_forearm": 46.7,
                "mcpCenter_vs_forearm": 42.21,
                "mcpAxis_vs_forearm": 125.46,
                "palmNormal_vs_forearm": 83
              }
            },
            "points": {
              "L_Forearm": {
                "x": 0.17975,
                "y": 0.98408,
                "z": -0.2038
              },
              "L_Hand": {
                "x": 0.18551,
                "y": 0.73752,
                "z": -0.24956
              },
              "L_PalmBase": {
                "x": 0.17858,
                "y": 0.69138,
                "z": -0.32025
              },
              "L_PalmIndexBase": {
                "x": 0.177,
                "y": 0.7085,
                "z": -0.33164
              },
              "L_PalmPinkyBase": {
                "x": 0.19283,
                "y": 0.66914,
                "z": -0.29528
              },
              "L_Foot": {
                "x": 0.12455,
                "y": 0.80853,
                "z": -0.35483
              },
              "L_ToeBase": {
                "x": 0.19668,
                "y": 0.78208,
                "z": -0.25866
              }
            }
          },
          "afterCommitBeforeFingers": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": 0.02296858587398772,
                "y": -0.9829513735256727,
                "z": -0.18242544051459056
              },
              "palmRay": {
                "x": -0.08181435932391151,
                "y": -0.5447538063112092,
                "z": -0.8345955314509342
              },
              "mcpAxis": {
                "x": -0.2834369523876569,
                "y": 0.7043319085786065,
                "z": -0.650830282469412
              },
              "palmNormal": {
                "x": -0.9585041527995244,
                "y": -0.1864454371890302,
                "z": 0.21565687565542005
              },
              "wristToIndex": {
                "x": -0.09735692535403705,
                "y": -0.3317962487986082,
                "z": -0.938313848543642
              },
              "wristToPinky": {
                "x": 0.08864970827829784,
                "y": -0.8280493017358259,
                "z": -0.5536023691396051
              },
              "mcpCenter": {
                "x": 0.18356977063569838,
                "y": 0.7062445054372328,
                "z": -0.31296428767649337
              },
              "mcpCenterRay": {
                "x": -0.0074424945815717665,
                "y": -0.6061636553294047,
                "z": -0.79530511895253
              },
              "angles": {
                "palmRay_vs_forearm": 46.7,
                "mcpCenter_vs_forearm": 42.21,
                "mcpAxis_vs_forearm": 125.46,
                "palmNormal_vs_forearm": 83
              }
            },
            "errors": [
              {
                "joint": "L_Forearm",
                "ok": true,
                "distance": 0.01462,
                "target": {
                  "x": 0.17975,
                  "y": 0.98408,
                  "z": -0.2038
                },
                "actual": {
                  "x": 0.17913,
                  "y": 0.97045,
                  "z": -0.20907
                },
                "delta": {
                  "x": -0.00062,
                  "y": -0.01363,
                  "z": -0.00527
                }
              },
              {
                "joint": "L_Hand",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.18551,
                  "y": 0.73752,
                  "z": -0.24956
                },
                "actual": {
                  "x": 0.18417,
                  "y": 0.75495,
                  "z": -0.24907
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_PalmBase",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.17858,
                  "y": 0.69138,
                  "z": -0.32025
                },
                "actual": {
                  "x": 0.17724,
                  "y": 0.70881,
                  "z": -0.31975
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_PalmIndexBase",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.177,
                  "y": 0.7085,
                  "z": -0.33164
                },
                "actual": {
                  "x": 0.17565,
                  "y": 0.72592,
                  "z": -0.33115
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_PalmPinkyBase",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.19283,
                  "y": 0.66914,
                  "z": -0.29528
                },
                "actual": {
                  "x": 0.19149,
                  "y": 0.68657,
                  "z": -0.29478
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_Foot",
                "ok": true,
                "distance": 0.07724,
                "target": {
                  "x": 0.12455,
                  "y": 0.80853,
                  "z": -0.35483
                },
                "actual": {
                  "x": 0.13113,
                  "y": 0.75016,
                  "z": -0.40499
                },
                "delta": {
                  "x": 0.00658,
                  "y": -0.05837,
                  "z": -0.05016
                }
              },
              {
                "joint": "L_ToeBase",
                "ok": true,
                "distance": 0.07724,
                "target": {
                  "x": 0.19668,
                  "y": 0.78208,
                  "z": -0.25866
                },
                "actual": {
                  "x": 0.20326,
                  "y": 0.72371,
                  "z": -0.30882
                },
                "delta": {
                  "x": 0.00658,
                  "y": -0.05837,
                  "z": -0.05016
                }
              }
            ]
          },
          "afterFingerLayer": {
            "basis": {
              "ok": true,
              "forearmAxis": {
                "x": 0.02296858587398772,
                "y": -0.9829513735256727,
                "z": -0.18242544051459056
              },
              "palmRay": {
                "x": -0.08181435932391151,
                "y": -0.5447538063112092,
                "z": -0.8345955314509342
              },
              "mcpAxis": {
                "x": -0.2834369523876569,
                "y": 0.7043319085786065,
                "z": -0.650830282469412
              },
              "palmNormal": {
                "x": -0.9585041527995244,
                "y": -0.1864454371890302,
                "z": 0.21565687565542005
              },
              "wristToIndex": {
                "x": -0.09735692535403705,
                "y": -0.3317962487986082,
                "z": -0.938313848543642
              },
              "wristToPinky": {
                "x": 0.08864970827829784,
                "y": -0.8280493017358259,
                "z": -0.5536023691396051
              },
              "mcpCenter": {
                "x": 0.18356977063569838,
                "y": 0.7062445054372328,
                "z": -0.31296428767649337
              },
              "mcpCenterRay": {
                "x": -0.0074424945815717665,
                "y": -0.6061636553294047,
                "z": -0.79530511895253
              },
              "angles": {
                "palmRay_vs_forearm": 46.7,
                "mcpCenter_vs_forearm": 42.21,
                "mcpAxis_vs_forearm": 125.46,
                "palmNormal_vs_forearm": 83
              }
            },
            "errors": [
              {
                "joint": "L_Forearm",
                "ok": true,
                "distance": 0.01462,
                "target": {
                  "x": 0.17975,
                  "y": 0.98408,
                  "z": -0.2038
                },
                "actual": {
                  "x": 0.17913,
                  "y": 0.97045,
                  "z": -0.20907
                },
                "delta": {
                  "x": -0.00062,
                  "y": -0.01363,
                  "z": -0.00527
                }
              },
              {
                "joint": "L_Hand",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.18551,
                  "y": 0.73752,
                  "z": -0.24956
                },
                "actual": {
                  "x": 0.18417,
                  "y": 0.75495,
                  "z": -0.24907
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_PalmBase",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.17858,
                  "y": 0.69138,
                  "z": -0.32025
                },
                "actual": {
                  "x": 0.17724,
                  "y": 0.70881,
                  "z": -0.31975
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_PalmIndexBase",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.177,
                  "y": 0.7085,
                  "z": -0.33164
                },
                "actual": {
                  "x": 0.17565,
                  "y": 0.72592,
                  "z": -0.33115
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_PalmPinkyBase",
                "ok": true,
                "distance": 0.01748,
                "target": {
                  "x": 0.19283,
                  "y": 0.66914,
                  "z": -0.29528
                },
                "actual": {
                  "x": 0.19149,
                  "y": 0.68657,
                  "z": -0.29478
                },
                "delta": {
                  "x": -0.00135,
                  "y": 0.01742,
                  "z": 0.0005
                }
              },
              {
                "joint": "L_Foot",
                "ok": true,
                "distance": 0.07724,
                "target": {
                  "x": 0.12455,
                  "y": 0.80853,
                  "z": -0.35483
                },
                "actual": {
                  "x": 0.13113,
                  "y": 0.75016,
                  "z": -0.40499
                },
                "delta": {
                  "x": 0.00658,
                  "y": -0.05837,
                  "z": -0.05016
                }
              },
              {
                "joint": "L_ToeBase",
                "ok": true,
                "distance": 0.07724,
                "target": {
                  "x": 0.19668,
                  "y": 0.78208,
                  "z": -0.25866
                },
                "actual": {
                  "x": 0.20326,
                  "y": 0.72371,
                  "z": -0.30882
                },
                "delta": {
                  "x": 0.00658,
                  "y": -0.05837,
                  "z": -0.05016
                }
              }
            ]
          },
          "comparisons": [
            {
              "label": "raw_authored_to_final_normalized_target",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": 113.79,
              "roll_palmray_about_target_forearm_deg": 46.21,
              "angle_forearm_deg": 14.09,
              "angle_palmray_deg": 32.48,
              "angle_mcp_axis_deg": 90.53,
              "angle_palm_normal_deg": 85.29
            },
            {
              "label": "final_target_to_after_one_writer_commit_before_fingers",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": -0.0,
              "roll_palmray_about_target_forearm_deg": 0,
              "angle_forearm_deg": 0,
              "angle_palmray_deg": 0,
              "angle_mcp_axis_deg": 0,
              "angle_palm_normal_deg": 0
            },
            {
              "label": "after_commit_to_after_finger_layer",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": 0,
              "roll_palmray_about_target_forearm_deg": 0,
              "angle_forearm_deg": 0,
              "angle_palmray_deg": 0,
              "angle_mcp_axis_deg": 0,
              "angle_palm_normal_deg": 0
            },
            {
              "label": "final_target_to_after_finger_layer",
              "ok": true,
              "roll_mcp_about_target_forearm_deg": -0.0,
              "roll_palmray_about_target_forearm_deg": 0,
              "angle_forearm_deg": 0,
              "angle_palmray_deg": 0,
              "angle_mcp_axis_deg": 0,
              "angle_palm_normal_deg": 0
            }
          ],
          "summary": {
            "maxPointErrorAfterCommitM": 0.07724,
            "maxPointErrorAfterFingerM": 0.07724,
            "firstBreak": "normalization/authoring-frame changes raw hand roll before runtime commit"
          },
          "fingerLayer": {
            "schema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
            "active": false,
            "side": "L",
            "blocked": true,
            "reason": "grip_solver_v1_palm_contract_not_passed",
            "gripPass": false,
            "gripReason": null,
            "entryFrameGate": {
              "schema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
              "source": "V286_NEUTRALIZE_HAND_FOR_GRIP",
              "active": true,
              "mutatesTargets": false,
              "side": "L",
              "pass": false,
              "gate": "NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP",
              "desiredOutsideDistanceM": 0.055,
              "signedOutsideM": 0.02508,
              "palmBaseOutsideM": 0.02224,
              "requiredOutwardShiftM": 0.02992,
              "palmAcrossOutsideDot": -0.76411,
              "limbAxisA": "L_Foot",
              "limbAxisB": "L_Calf",
              "policy": "V297 ports V286 as a non-mutating pre-contact entry-frame gate inside the V267 clean solver. It measures whether the hand MCP/palm frame approaches from the outside shell before point snap, palm roll, or finger child-layer."
            },
            "policy": "V297 enforces the V267/V286/V291 contract: fingers are child-layer only after palm/hand/object entry passes. While blocked, there are no finger, thumb, hand, wrist, arm, snap-point, leg, foot or toe writes."
          }
        },
        "bodyText": "NEXPROD01\none writer\nsleep\nNEXPLAYER RUNTIME\nDynamic Warm Up \u00b7 02 \u00b7 Hurdle stretch\nhurdle-stretch \u2192 warmup_hurdle_stretch_right_pose_v50_ik_v1 \u00b7 for_nex_approval \u00b7 ikHash 21f3711c \u00b7 phase 0.250\nCHECK"
      },
      "screenshot": "/mnt/data/nex_v300_grip_entry_contract/diagnostics/v300_browser_screens/V300_left_contract_player.png",
      "summary": {
        "hasDebug": true,
        "hasModel": true,
        "boneCount": 165,
        "skinnedMeshCount": 12,
        "canvasCount": 1,
        "hasGripSolverV1": true,
        "gripSchema": "NEXPROD01_GRIP_SOLVER_V1",
        "gripSide": "L",
        "gripApplied": true,
        "gripPass": false,
        "gripReason": null,
        "gripStatus": "PALM_CONTACT_READY_THUMB_DOWN_GATE_PENDING",
        "preFingerReady": false,
        "entryGateSchema": "NEXPROD01_V297_V286_ENTRY_FRAME_GATE",
        "entryGate": "NEEDS_NEUTRALIZE_BEFORE_SOLVE_GRIP",
        "entryGatePass": false,
        "entrySignedOutsideM": 0.02508,
        "entryRequiredOutwardShiftM": 0.02992,
        "v300PalmFrameGateSchema": "NEXPROD01_V300_PALM_FRAME_GATE",
        "v300PalmFrameGatePass": false,
        "v300RollPass": true,
        "v300RollDeg": 115,
        "v300ObjectMeetM": 0.07784,
        "v300ObjectMeetPass": true,
        "fingerGateSchema": "NEXPROD01_V297_PREFINGER_CHILD_LAYER_GATE",
        "fingerBlocked": true,
        "fingerActive": false,
        "probeSide": "L",
        "meshTruthSide": null
      }
    }
  ],
  "passBrowserRuntime": true,
  "passSideDiagnostics": true
}