{
  "schema": "NEXT11_V302_BROWSER_RUNTIME_LEFT_FOOT_IK_SOURCE_FIX_AUDIT",
  "generatedAt": "2026-08-19T18:57:42Z",
  "root": "/mnt/data/nex_v302_left_foot_ik_source_fix/NEXT11_V302_LEFT_FOOT_IK_SOURCE_FIX_ROOT",
  "cases": [
    {
      "case": {
        "name": "left",
        "side": "L",
        "caseId": "v94_left_full",
        "exercise": "hurdle-stretch",
        "phase": 0.25
      },
      "url": "http://127.0.0.1:34511/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=v302-left-foot-ik-source-fix-browser-audit&build=NEXPROD01_RUNTIME_V302_LEFT_FOOT_IK_SOURCE_FIX_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V302_left",
      "navigationError": null,
      "polls": [
        {
          "t": 1,
          "hasDebug": true,
          "hasModel": true,
          "boneCount": 165,
          "markerCount": 22,
          "gripSchema": "NEXPROD01_GRIP_SOLVER_V1"
        }
      ],
      "final": {
        "href": "http://127.0.0.1:34511/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=v302-left-foot-ik-source-fix-browser-audit&build=NEXPROD01_RUNTIME_V302_LEFT_FOOT_IK_SOURCE_FIX_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V302_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_V301_FINGER_CHILD_LAYER_GATE",
          "__NEXPROD01_V69_SHIN_GRIP_FINGER_LAYER",
          "__NEXPROD01_V70_BIORIG_FULL_GRIP_LAYER",
          "__NEXPROD01_V93_ACTIVE_HAND_CONTROL_PROBE"
        ],
        "markerCount": 22,
        "gripSolverV1": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1",
          "version": "V302_LEFT_FOOT_IK_SOURCE_FIX_PRESERVES_V301_GATE",
          "side": "L",
          "applied": true,
          "implemented": true,
          "policy": "V301 side-surface grip solver: V300 palm/contact owner plus generic right-side/outside-surface and penetration validation. Thumb direction is not a gate; it follows from correct palm-side contact geometry. Finger writes remain deferred by default.",
          "pass": true,
          "palmContactReady": true,
          "preFingerReady": true,
          "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
          "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,
                "handAcrossVerticalProxy": -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."
            },
            "v301SideSurfaceContactGate": {
              "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
              "active": true,
              "pass": true,
              "palmContactReady": true,
              "preFingerReady": true,
              "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
              "checks": {
                "handPalmTowardObject": true,
                "firstPalmOnShiftedSurface": true,
                "secondPalmOnShiftedSurface": true,
                "outsideContact": true,
                "noGrossPenetration": true,
                "objectMeetWithinLimit": true,
                "firstSignedOutsideM": 0.055,
                "secondSignedOutsideM": 0.04976,
                "firstPenetrationM": 0,
                "secondPenetrationM": 0,
                "firstOutsideScore": 1,
                "secondOutsideScore": 0.90273
              },
              "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
            }
          },
          "nextPhase": "finger_child_layer_ready_but_deferred_to_v302_integration",
          "notes": [
            "V301 side/surface/penetration gate passed without an explicit thumb-direction constraint",
            "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
            "shifted-surface gate is evaluated after object/leg meet",
            "finger writes remain deferred by default so V301 only changes contact gating"
          ]
        },
        "v301FingerGate": {
          "schema": "NEXPROD01_V301_FINGER_CHILD_LAYER_GATE",
          "active": false,
          "blocked": true,
          "ready": true,
          "releaseEnabled": false,
          "side": "L",
          "reason": "side_surface_gate_passed_finger_release_deferred_to_V302_child_only_integration",
          "contractStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
          "sideGate": {
            "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
            "active": true,
            "pass": true,
            "palmContactReady": true,
            "preFingerReady": true,
            "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
            "checks": {
              "handPalmTowardObject": true,
              "firstPalmOnShiftedSurface": true,
              "secondPalmOnShiftedSurface": true,
              "outsideContact": true,
              "noGrossPenetration": true,
              "objectMeetWithinLimit": true,
              "firstSignedOutsideM": 0.055,
              "secondSignedOutsideM": 0.04976,
              "firstPenetrationM": 0,
              "secondPenetrationM": 0,
              "firstOutsideScore": 1,
              "secondOutsideScore": 0.90273
            },
            "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
          },
          "policy": "V301 verifies the generic side/surface contact gate but does not yet release finger writes by default. No finger, thumb, hand, wrist, arm, snap-point, leg, foot, or toe writes are made by this deferred gate."
        },
        "v110DistalGrip": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1_BRIDGE",
          "applied": true,
          "pass": true,
          "reason": "clean grip solver completed palm contract; finger layer may run only if contract passes",
          "contract": {
            "schema": "NEXPROD01_GRIP_SOLVER_V1",
            "version": "V302_LEFT_FOOT_IK_SOURCE_FIX_PRESERVES_V301_GATE",
            "side": "L",
            "applied": true,
            "implemented": true,
            "policy": "V301 side-surface grip solver: V300 palm/contact owner plus generic right-side/outside-surface and penetration validation. Thumb direction is not a gate; it follows from correct palm-side contact geometry. Finger writes remain deferred by default.",
            "pass": true,
            "palmContactReady": true,
            "preFingerReady": true,
            "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
            "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,
                  "handAcrossVerticalProxy": -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."
              },
              "v301SideSurfaceContactGate": {
                "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
                "active": true,
                "pass": true,
                "palmContactReady": true,
                "preFingerReady": true,
                "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
                "checks": {
                  "handPalmTowardObject": true,
                  "firstPalmOnShiftedSurface": true,
                  "secondPalmOnShiftedSurface": true,
                  "outsideContact": true,
                  "noGrossPenetration": true,
                  "objectMeetWithinLimit": true,
                  "firstSignedOutsideM": 0.055,
                  "secondSignedOutsideM": 0.04976,
                  "firstPenetrationM": 0,
                  "secondPenetrationM": 0,
                  "firstOutsideScore": 1,
                  "secondOutsideScore": 0.90273
                },
                "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
              }
            },
            "nextPhase": "finger_child_layer_ready_but_deferred_to_v302_integration",
            "notes": [
              "V301 side/surface/penetration gate passed without an explicit thumb-direction constraint",
              "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
              "shifted-surface gate is evaluated after object/leg meet",
              "finger writes remain deferred by default so V301 only changes contact gating"
            ]
          },
          "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.02275026169895931,
          "nearest": {
            "d": 0.02275026169895931,
            "h": {
              "x": 0.17292724083718097,
              "y": 0.6817124175509501,
              "z": -0.38555846364783264,
              "i": 41537
            },
            "l": {
              "x": 0.15106876309294334,
              "y": 0.6865966245197189,
              "z": -0.3895491879382383,
              "i": 63316
            }
          },
          "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.02429557101177432,
            "handContactFaceM": 0.013464736735990681,
            "gapM": -0.010830834275783638,
            "legCountBand": 238,
            "handCountBand": 8704
          },
          "palmSourceRadialSupport": {
            "legSurfaceM": 0.02429557101177432,
            "palmContactFaceM": 0.043643876284027994,
            "gapM": 0.019348305272253674,
            "legCountBand": 238,
            "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.048,
                "y": 0.834,
                "z": -0.405
              }
            }
          },
          "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.05242,
                "y": 0.83497,
                "z": -0.45101
              }
            }
          },
          "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.05242,
                  "y": 0.83497,
                  "z": -0.45101
                },
                "actual": {
                  "x": 0.059,
                  "y": 0.77661,
                  "z": -0.50116
                },
                "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.05242,
                  "y": 0.83497,
                  "z": -0.45101
                },
                "actual": {
                  "x": 0.059,
                  "y": 0.77661,
                  "z": -0.50116
                },
                "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_V301_FINGER_CHILD_LAYER_GATE",
            "active": false,
            "blocked": true,
            "ready": true,
            "releaseEnabled": false,
            "side": "L",
            "reason": "side_surface_gate_passed_finger_release_deferred_to_V302_child_only_integration",
            "contractStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
            "sideGate": {
              "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
              "active": true,
              "pass": true,
              "palmContactReady": true,
              "preFingerReady": true,
              "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
              "checks": {
                "handPalmTowardObject": true,
                "firstPalmOnShiftedSurface": true,
                "secondPalmOnShiftedSurface": true,
                "outsideContact": true,
                "noGrossPenetration": true,
                "objectMeetWithinLimit": true,
                "firstSignedOutsideM": 0.055,
                "secondSignedOutsideM": 0.04976,
                "firstPenetrationM": 0,
                "secondPenetrationM": 0,
                "firstOutsideScore": 1,
                "secondOutsideScore": 0.90273
              },
              "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
            },
            "policy": "V301 verifies the generic side/surface contact gate but does not yet release finger writes by default. No finger, thumb, hand, wrist, arm, snap-point, leg, foot, or toe writes are made by this deferred gate."
          }
        },
        "footPoints": {
          "rawAuthored": {
            "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.048,
              "y": 0.834,
              "z": -0.405
            }
          },
          "finalNormalized": {
            "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.05242,
              "y": 0.83497,
              "z": -0.45101
            }
          }
        },
        "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 addc0aae \u00b7 phase 0.250\nCHECK"
      },
      "screenshot": "/mnt/data/nex_v302_left_foot_ik_source_fix/NEXT11_V302_LEFT_FOOT_IK_SOURCE_FIX_ROOT/diagnostics/v302_browser_screens/V302_left_left_foot_source_fix_player.png",
      "summary": {
        "hasDebug": true,
        "hasModel": true,
        "boneCount": 165,
        "skinnedMeshCount": 12,
        "hasGripSolverV1": true,
        "runtimeGripVersion": "V302_LEFT_FOOT_IK_SOURCE_FIX_PRESERVES_V301_GATE",
        "gripSide": "L",
        "gripPass": true,
        "gripStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
        "sideSurfaceGatePass": true,
        "outsideContact": true,
        "noGrossPenetration": true,
        "handPalmTowardObject": true,
        "fingerBlocked": true,
        "fingerReady": true,
        "fingerReleaseEnabled": false,
        "probeSide": "L",
        "meshTruthSide": null,
        "rawFoot": {
          "x": 0.108,
          "y": 0.812,
          "z": -0.325
        },
        "rawToeBase": {
          "x": 0.048,
          "y": 0.834,
          "z": -0.405
        },
        "rawFootToToeVector": {
          "x": -0.06,
          "y": 0.022,
          "z": -0.08
        },
        "rawFootToToeLengthM": 0.102391,
        "rawFootToToeDir": {
          "x": -0.585987,
          "y": 0.214862,
          "z": -0.781316
        }
      }
    },
    {
      "case": {
        "name": "right",
        "side": "R",
        "caseId": "v94_right_full",
        "exercise": "hurdle-stretch",
        "phase": 0.75
      },
      "url": "http://127.0.0.1:34511/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=v302-left-foot-ik-source-fix-browser-audit&build=NEXPROD01_RUNTIME_V302_LEFT_FOOT_IK_SOURCE_FIX_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V302_right",
      "navigationError": null,
      "polls": [
        {
          "t": 1,
          "hasDebug": true,
          "hasModel": true,
          "boneCount": 165,
          "markerCount": 23,
          "gripSchema": "NEXPROD01_GRIP_SOLVER_V1"
        }
      ],
      "final": {
        "href": "http://127.0.0.1:34511/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=v302-left-foot-ik-source-fix-browser-audit&build=NEXPROD01_RUNTIME_V302_LEFT_FOOT_IK_SOURCE_FIX_2026_08_19&safeBoot=0&lowPower=1&pixelRatioCap=1.15&antialias=1&maxFPS=24&staticAfterReady=0&idleSleepAfterReady=0&v=V302_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_V301_FINGER_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": 23,
        "gripSolverV1": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1",
          "version": "V302_LEFT_FOOT_IK_SOURCE_FIX_PRESERVES_V301_GATE",
          "side": "R",
          "applied": true,
          "implemented": true,
          "policy": "V301 side-surface grip solver: V300 palm/contact owner plus generic right-side/outside-surface and penetration validation. Thumb direction is not a gate; it follows from correct palm-side contact geometry. Finger writes remain deferred by default.",
          "pass": true,
          "palmContactReady": true,
          "preFingerReady": true,
          "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
          "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,
                "handAcrossVerticalProxy": 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."
            },
            "v301SideSurfaceContactGate": {
              "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
              "active": true,
              "pass": true,
              "palmContactReady": true,
              "preFingerReady": true,
              "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
              "checks": {
                "handPalmTowardObject": true,
                "firstPalmOnShiftedSurface": true,
                "secondPalmOnShiftedSurface": true,
                "outsideContact": true,
                "noGrossPenetration": true,
                "objectMeetWithinLimit": true,
                "firstSignedOutsideM": 0.055,
                "secondSignedOutsideM": 0.04232,
                "firstPenetrationM": 0,
                "secondPenetrationM": 0,
                "firstOutsideScore": 1,
                "secondOutsideScore": 0.76427
              },
              "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
            }
          },
          "nextPhase": "finger_child_layer_ready_but_deferred_to_v302_integration",
          "notes": [
            "V301 side/surface/penetration gate passed without an explicit thumb-direction constraint",
            "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
            "shifted-surface gate is evaluated after object/leg meet",
            "finger writes remain deferred by default so V301 only changes contact gating"
          ]
        },
        "v301FingerGate": {
          "schema": "NEXPROD01_V301_FINGER_CHILD_LAYER_GATE",
          "active": false,
          "blocked": true,
          "ready": true,
          "releaseEnabled": false,
          "side": "R",
          "reason": "side_surface_gate_passed_finger_release_deferred_to_V302_child_only_integration",
          "contractStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
          "sideGate": {
            "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
            "active": true,
            "pass": true,
            "palmContactReady": true,
            "preFingerReady": true,
            "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
            "checks": {
              "handPalmTowardObject": true,
              "firstPalmOnShiftedSurface": true,
              "secondPalmOnShiftedSurface": true,
              "outsideContact": true,
              "noGrossPenetration": true,
              "objectMeetWithinLimit": true,
              "firstSignedOutsideM": 0.055,
              "secondSignedOutsideM": 0.04232,
              "firstPenetrationM": 0,
              "secondPenetrationM": 0,
              "firstOutsideScore": 1,
              "secondOutsideScore": 0.76427
            },
            "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
          },
          "policy": "V301 verifies the generic side/surface contact gate but does not yet release finger writes by default. No finger, thumb, hand, wrist, arm, snap-point, leg, foot, or toe writes are made by this deferred gate."
        },
        "v110DistalGrip": {
          "schema": "NEXPROD01_GRIP_SOLVER_V1_BRIDGE",
          "applied": true,
          "pass": true,
          "reason": "clean grip solver completed palm contract; finger layer may run only if contract passes",
          "contract": {
            "schema": "NEXPROD01_GRIP_SOLVER_V1",
            "version": "V302_LEFT_FOOT_IK_SOURCE_FIX_PRESERVES_V301_GATE",
            "side": "R",
            "applied": true,
            "implemented": true,
            "policy": "V301 side-surface grip solver: V300 palm/contact owner plus generic right-side/outside-surface and penetration validation. Thumb direction is not a gate; it follows from correct palm-side contact geometry. Finger writes remain deferred by default.",
            "pass": true,
            "palmContactReady": true,
            "preFingerReady": true,
            "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
            "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,
                  "handAcrossVerticalProxy": 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."
              },
              "v301SideSurfaceContactGate": {
                "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
                "active": true,
                "pass": true,
                "palmContactReady": true,
                "preFingerReady": true,
                "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
                "checks": {
                  "handPalmTowardObject": true,
                  "firstPalmOnShiftedSurface": true,
                  "secondPalmOnShiftedSurface": true,
                  "outsideContact": true,
                  "noGrossPenetration": true,
                  "objectMeetWithinLimit": true,
                  "firstSignedOutsideM": 0.055,
                  "secondSignedOutsideM": 0.04232,
                  "firstPenetrationM": 0,
                  "secondPenetrationM": 0,
                  "firstOutsideScore": 1,
                  "secondOutsideScore": 0.76427
                },
                "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
              }
            },
            "nextPhase": "finger_child_layer_ready_but_deferred_to_v302_integration",
            "notes": [
              "V301 side/surface/penetration gate passed without an explicit thumb-direction constraint",
              "first palm contact was held while wrist/forearm-axis roll searched the second palm point",
              "shifted-surface gate is evaluated after object/leg meet",
              "finger writes remain deferred by default so V301 only changes contact gating"
            ]
          },
          "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_V301_FINGER_CHILD_LAYER_GATE",
            "active": false,
            "blocked": true,
            "ready": true,
            "releaseEnabled": false,
            "side": "R",
            "reason": "side_surface_gate_passed_finger_release_deferred_to_V302_child_only_integration",
            "contractStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
            "sideGate": {
              "schema": "NEXPROD01_V301_SIDE_SURFACE_CONTACT_GATE",
              "active": true,
              "pass": true,
              "palmContactReady": true,
              "preFingerReady": true,
              "status": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
              "checks": {
                "handPalmTowardObject": true,
                "firstPalmOnShiftedSurface": true,
                "secondPalmOnShiftedSurface": true,
                "outsideContact": true,
                "noGrossPenetration": true,
                "objectMeetWithinLimit": true,
                "firstSignedOutsideM": 0.055,
                "secondSignedOutsideM": 0.04232,
                "firstPenetrationM": 0,
                "secondPenetrationM": 0,
                "firstOutsideScore": 1,
                "secondOutsideScore": 0.76427
              },
              "policy": "V301 replaces the explicit thumb-down requirement with a generic side/surface/penetration gate. The solver only checks that palm-side contact is on the intended object side, both palm points remain on the shifted outside surface, the palm faces the object, and the hand has not snapped through or penetrated the object. Thumb orientation is an emergent result of correct side contact, not a global constraint."
            },
            "policy": "V301 verifies the generic side/surface contact gate but does not yet release finger writes by default. No finger, thumb, hand, wrist, arm, snap-point, leg, foot, or toe writes are made by this deferred gate."
          }
        },
        "footPoints": {
          "rawAuthored": {
            "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": {
            "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
            }
          }
        },
        "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 addc0aae \u00b7 phase 0.750\nCHECK"
      },
      "screenshot": "/mnt/data/nex_v302_left_foot_ik_source_fix/NEXT11_V302_LEFT_FOOT_IK_SOURCE_FIX_ROOT/diagnostics/v302_browser_screens/V302_right_left_foot_source_fix_player.png",
      "summary": {
        "hasDebug": true,
        "hasModel": true,
        "boneCount": 165,
        "skinnedMeshCount": 12,
        "hasGripSolverV1": true,
        "runtimeGripVersion": "V302_LEFT_FOOT_IK_SOURCE_FIX_PRESERVES_V301_GATE",
        "gripSide": "R",
        "gripPass": true,
        "gripStatus": "GRIP_ENTRY_CONTRACT_PREFINGER_READY",
        "sideSurfaceGatePass": true,
        "outsideContact": true,
        "noGrossPenetration": true,
        "handPalmTowardObject": true,
        "fingerBlocked": true,
        "fingerReady": true,
        "fingerReleaseEnabled": false,
        "probeSide": "R",
        "meshTruthSide": null,
        "rawFoot": {
          "x": -0.108,
          "y": 0.812,
          "z": -0.325
        },
        "rawToeBase": {
          "x": -0.048,
          "y": 0.834,
          "z": -0.405
        },
        "rawFootToToeVector": {
          "x": 0.06,
          "y": 0.022,
          "z": -0.08
        },
        "rawFootToToeLengthM": 0.102391,
        "rawFootToToeDir": {
          "x": 0.585987,
          "y": 0.214862,
          "z": -0.781316
        }
      }
    }
  ],
  "passBrowserRuntime": true,
  "passSideSurfaceGate": true,
  "passNoFingerReleaseByDefault": true,
  "passLeftFootSourceFix": true,
  "passRightFootStillMirrored": true,
  "pass": true
}