{
  "schema": "NEXT11_GENERIC_GRIP_CONTRACT_V1",
  "version": "V334",
  "principle": "Grip is one source-intent-driven, actual-geometry solve. Historical right-hand coordinates and left/right repair patches are not runtime authority.",
  "input": {
    "required": [
      "nonFloorContact=true",
      "gripSide=L|R",
      "cylinderAxis=[axisA,axisB]"
    ],
    "optional": [
      "targetLimb",
      "clearanceMeters",
      "objectMeetMaxMeters",
      "finger child-layer intent"
    ]
  },
  "authorityOrder": [
    "canonical normalized IK",
    "actual Nex rig rest frame",
    "two MCP-anchored actual palm-skin contacts",
    "one intended-side actual target-limb skin",
    "first-contact lock",
    "forearm-axis wrist roll for second contact",
    "actual local surface and elbow-pole verification",
    "finger child layer"
  ],
  "forbidden": [
    "default-right side",
    "exercise-name geometry",
    "forced 180-degree left repair",
    "A/B production branch",
    "nearest arbitrary visible mesh marker",
    "broad palm sphere with first-N vertex cap",
    "post-commit second palm solver",
    "unconditional closer-leg or leg-out target mutation",
    "finger layer moving hand, wrist, arm, leg or object"
  ]
}
