{
  "contract_version": "0",
  "scope": {
    "system": "hb5u-grasp-replay-mujoco",
    "claims": [
      "MuJoCo contact-driven grasp trajectory (148 frames, 20 FPS) replays deterministic end-effector kinematic qpos sequence",
      "Public trajectory.json byte SHA-256 matches 2d7bd30e271a6a13089ed3f6122c03dfb4581b9e8804a0bb7febb598a0a88968"
    ],
    "excluded_claims": [
      "Dynamic physical torque closure on real physical hardware",
      "SMPL-X dense skin mesh contact deformation (visual mesh only, box/cylinder collision geometry used)"
    ]
  },
  "artifacts": [
    {
      "role": "trajectory",
      "visibility": "public",
      "public_uri": "https://thesis.hyperbook.com/openwiki/static/grasp/trajectory.json",
      "sha256": "2d7bd30e271a6a13089ed3f6122c03dfb4581b9e8804a0bb7febb598a0a88968",
      "byte_size": 148840,
      "source_revision": "git:main@hb5u"
    },
    {
      "role": "visual_model",
      "visibility": "public",
      "public_uri": "https://thesis.hyperbook.com/openwiki/smplx",
      "sha256": "6d73ec8fe1f96721330347813202b62dc69ba5e27cd2021fd7507964c789a12b",
      "byte_size": 68730,
      "source_revision": "git:main@ec2",
      "visual_collision_mapping": "Three.js Box/Cylinder primitives visual representation; collision calculation uses segment-distance approximation"
    },
    {
      "role": "collision_model",
      "visibility": "restricted",
      "access_method": "SSH to hb5u: edge-cluster:/opt/robotics/urdf/amazinghand_5finger_docking_v4.xml",
      "sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
      "byte_size": 45120,
      "source_revision": "git:dev_ws@hb5u",
      "visual_collision_mapping": "MuJoCo collision primitives (geom type box and capsule)"
    }
  ],
  "measurement": {
    "coordinate_frame": "world_z_up_right_hand",
    "units": "SI_meters_radians_seconds",
    "sampling": "20Hz_fixed_dt_0.05s",
    "metrics": [
      {
        "name": "trajectory_frame_count",
        "definition": "Total number of recorded frames in trajectory.json",
        "denominator": "frame"
      },
      {
        "name": "sampling_rate_fps",
        "definition": "Frequency of kinematic trajectory updates",
        "denominator": "second"
      }
    ]
  },
  "environment": {
    "engine": "MuJoCo 3.1.2 / Three.js r128",
    "dependencies": "Python 3.10, mujoco>=3.1.0, numpy>=1.24.0",
    "operating_system": "Ubuntu 22.04 LTS (hb5u) / Amazon Linux 2023 (ec2)",
    "hardware": "NVIDIA GeForce RTX 5060 (hb5u)",
    "random_seed": 42
  },
  "inputs": [
    {
      "name": "trajectory.json",
      "sha256": "2d7bd30e271a6a13089ed3f6122c03dfb4581b9e8804a0bb7febb598a0a88968",
      "byte_size": 148840,
      "uri": "https://thesis.hyperbook.com/openwiki/static/grasp/trajectory.json"
    }
  ],
  "acceptance": {
    "status": "author_verified",
    "criteria": [
      {
        "metric": "trajectory_frame_count",
        "operator": "=",
        "threshold": 148.0,
        "rationale": "Discrete kinematic trajectory replay must contain exactly 148 frames"
      },
      {
        "metric": "sampling_rate_fps",
        "operator": "=",
        "threshold": 20.0,
        "rationale": "Fixed 20 Hz replay frequency required for stable kinematics playback"
      }
    ]
  },
  "execution": {
    "command": "python3 -c 'import urllib.request, json; data=json.loads(urllib.request.urlopen(\"http://hb5u.hyperbook.com:8600/grasp/trajectory.json\").read()); assert len(data[\"frames\"])==148 and data[\"fps\"]==20; print(\"REPLAY_VALID\")'",
    "expected_result": "REPLAY_VALID",
    "fresh_log_artifact": {
      "name": "grasp_replay_verification.log",
      "sha256": "6421491240024d73238705879a33da03cc6a8ce90e888b1ec04473e25515dd0c",
      "byte_size": 344
    },
    "negative_controls": [
      "Truncated trajectory JSON (<148 frames) raises AssertionError and fails acceptance",
      "Altered frame FPS (!=20) raises AssertionError and fails acceptance"
    ]
  },
  "review": {
    "records": [
      {
        "reviewer_role": "author",
        "reviewer": "gravity",
        "reviewed_at": "2026-09-10T18:05:00Z",
        "result": "passed",
        "verified_commit": "ee5fba9",
        "notes": "Author self-verification of public replay bytes and 20Hz playback. Restricted collision model on hb5u verified locally. Pure L4 restricted by Ceiling Rule."
      }
    ]
  }
}