{
  "date_utc": "2026-09-29",
  "model": "openai/gpt-6-astra",
  "mode": "gpt_only_staged",
  "source_commit": "e7e5afea83b11ff9443274332ff5279d430c7bf2",
  "summary": "代码控制 v6：有效回合 0 / 2，原生成功 0 条；每项仅一个 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": [
        "抓钥匙片身，抬升验证；把柄呈递给另一只手，接收手闭合后给出手才松开，再验证换手。",
        "实测物体相对手腕的变换；尖端朝下、齿侧朝锁的局部 +X，分别对齐有向朝向与尖端位置。",
        "每段下降 4 mm；位置或角度超差则禁止继续，连续两次停滞要求退出恢复。",
        "达到入孔深度后才分段转动，最终仍以原生 eval_success 为准。"
      ],
      "rule_file": "insertion_control.py",
      "valid": false,
      "success": false,
      "termination_reason": "infrastructure_error",
      "native_steps": 206,
      "step_lim": 300,
      "planner_turns": 28,
      "elapsed_s": 322.9,
      "seed": 0,
      "layout_id": 0,
      "cost_usd": 2.302996,
      "finding": "原生 206 / 300 步、28 个 GPT 回合，未成功。接收手夹的是钥匙柄圆边，给出手松开后钥匙脱落，未验证换手。发现错误夹持方向后人工停止本轮，保留全部实际消耗，标为无效中断。后续 v7 增加独立翻腕，并实测夹爪开合方向与钥匙片法向的夹角。",
      "commands": [
        {
          "native_step": 0,
          "action": "reset",
          "args": {},
          "note": ""
        },
        {
          "native_step": 31,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next",
            "arm": "left"
          },
          "note": "STATE\n- goal: pick up key todo; hand over todo; insert into keyhole todo; turn todo.\n- facts: silver key at (-0.1105,-0.2191,0.7706); slot at (0.1102,-0.1977,0.765). Native thresholds: xy <7mm, upright <7deg, depth threshold 25mm, turned alignment <30deg. No final home stages listed.\n- phase: both arms empty and home; approach key with nearby left arm.\n- blockers: none.\nObserved key left of the round slot base with clear access. Begin recorded blade-grasp approach for subsequent bow handover.",
          "feedback": "key → grasp"
        },
        {
          "native_step": 46,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pick up key in progress; hand over todo; insert todo; turn todo.\n- facts: key at (-0.1105,-0.2191,0.7706); slot at (0.1102,-0.1977,0.765). Thresholds: xy <7mm, upright <7deg, depth 25mm, turned alignment <30deg. 269 native steps remain.\n- phase: left approach completed, open TCP above blade at z0.8145; right empty/home; next grasp.\n- blockers: none.\nWrist view shows the blade centered beneath the open left gripper. Advance to close on the recorded blade grasp region.",
          "feedback": "key → verify_grasp"
        },
        {
          "native_step": 52,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pick up key in progress; hand over todo; insert todo; turn todo.\n- facts: key at (-0.110,-0.2192,0.7706); slot at (0.1102,-0.1977,0.765). Native xy <7mm, upright <7deg, depth 25mm, turn <30deg. 254 steps remain; no final home requirement.\n- phase: left gripper closed around blade, grasp not verified; right empty/home. Next lift verification.\n- blockers: none.\nLeft wrist image shows blade between fingertips but key remains at table height. Advance to lift and verify retention before handover.",
          "feedback": "key → present"
        },
        {
          "native_step": 84,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pick up key done; hand over in progress; insert todo; turn todo.\n- facts: key lifted 20.5mm to (-0.1101,-0.2193,0.791), verified held; slot (0.1102,-0.1977,0.765). Native thresholds xy 7mm, upright 7deg, depth 25mm, turned 30deg. 248 steps remain; no final home requirement.\n- phase: left holds blade; right empty/home; controller present next.\n- blockers: none.\nKey remains between the left fingertips with 2.6mm grasp translation error. Present it for the receiving hand's bow grasp.",
          "feedback": "key → receive"
        },
        {
          "native_step": 119,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pick up key done; hand over in progress; insert todo; turn todo.\n- facts: key presented at (-0.0005,-0.2084,0.9267); slot (0.1102,-0.1977,0.765). Native xy <7mm, upright <7deg, depth 25mm, turn <30deg. 216 steps remain; no final home requirement.\n- phase: left holds blade, right empty; receive next, then verify transfer.\n- blockers: none.\nLeft wrist shows stable blade grasp with exposed bow and key elevated above the table. Advance receiving arm to grasp bow for pose adjustment.",
          "feedback": "key → handover"
        },
        {
          "native_step": 140,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pick up key done; hand over in progress; insert todo; turn todo.\n- facts: key (-0.0015,-0.2088,0.9203); slot (0.1102,-0.1977,0.765). Native xy <7mm, upright <7deg, depth 25mm, turn alignment <30deg. 181 native steps remain; no final home requirement.\n- phase: left holds blade; right open at bow; handover next.\n- blockers: none.\nThe right wrist view shows the bow centered between receiving fingers. Close receiving grasp and release donor through the checked handover stage.",
          "feedback": "key → verify_transfer"
        },
        {
          "native_step": 140,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "restart",
            "arm": "right"
          },
          "note": "STATE\n- goal: pick up key done historically, currently lost; hand over todo; insert todo; turn todo.\n- facts: key fell to (-0.0869,-0.2056,0.775); slot (0.1102,-0.1977,0.765). Native xy <7mm, upright <7deg, depth 25mm, turn alignment <30deg. 160 steps remain; no final home requirement.\n- phase: both arms empty after failed transfer; restart pickup with right arm.\n- blockers: left-to-right transfer dropped key despite bow error 2.9mm; do not orient an unheld key.\nReal_xyz places the key on the table and right wrist shows empty fingers. Restart the pickup with the opposite arm to change the failed transfer geometry.",
          "feedback": "key → approach"
        },
        {
          "native_step": 140,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done historically, regrasp in progress; handover todo; insertion todo; turn todo.\n- facts: key on table (-0.0869,-0.2056,0.775); slot (0.1102,-0.1977,0.765). Thresholds xy 7mm, upright 7deg, depth 25mm, turn 30deg. 160 native steps remain; no home requirement.\n- phase: right selected for approach, neither arm holds key.\n- blockers: initial left-to-right handover dropped key; pickup arm switched.\nRestart has reset the controller to right-arm approach without moving the scene. Approach the current key pose to reacquire it.",
          "feedback": "阶段阻止：motion guard rejected: joint_path_rejected；key → approach"
        },
        {
          "native_step": 140,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "restart",
            "arm": "left"
          },
          "note": "STATE\n- goal: pickup done historically, regrasp in progress; handover todo; insertion todo; turn todo.\n- facts: key (-0.0869,-0.2056,0.775); slot (0.1102,-0.1977,0.765). Native xy <7mm, upright <7deg, depth 25mm, turn <30deg. 160 native steps remain; no final home requirement.\n- phase: neither arm holds key; switch pickup back to left for fallen pose.\n- blockers: original transfer dropped key; right approach rejected joint-path planning with zero motion.\nThe right arm cannot currently plan the table approach. Switching to the nearer left arm changes the blocked pickup geometry rather than repeating it.",
          "feedback": "key → approach"
        },
        {
          "native_step": 169,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup historically done, regrasp in progress; handover todo; insert todo; turn todo.\n- facts: key (-0.0869,-0.2056,0.775); slot (0.1102,-0.1977,0.765). Required xy <7mm, upright <7deg, depth 25mm, turn alignment <30deg. 160 steps remain; no native home requirement.\n- phase: left approach selected; neither arm holds key.\n- blockers: initial transfer dropped key; right pickup path failed, now using left.\nThe left controller is reset to approach the fallen key. Execute that changed approach to permit a new grasp.",
          "feedback": "key → grasp"
        },
        {
          "native_step": 184,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup historically done, regrasp in progress; handover todo; insert todo; turn todo.\n- facts: key (-0.087,-0.2056,0.775); slot (0.1102,-0.1977,0.765). Native xy <7mm, upright <7deg, depth 25mm, turn <30deg. 131 steps remain; no home requirement.\n- phase: left approach completed, open fingertips above visible key; next grasp.\n- blockers: prior transfer dropped key and right pickup planning failed; left approach now passed.\nThe wrist image centers the key within the open gripper. Advance to close on its blade.",
          "feedback": "key → verify_grasp"
        },
        {
          "native_step": 190,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup historically done, regrasp in progress; handover todo; insert todo; turn todo.\n- facts: key (-0.0866,-0.2056,0.775); slot (0.1102,-0.1977,0.765). Required xy <7mm, upright <7deg, depth 25mm, turn <30deg. 116 steps remain; no home requirement.\n- phase: left gripper closed around blade; verify lift next, right empty.\n- blockers: original handover dropped key; right pickup path failed; left retry has reached grasp.\nThe blade appears between closed fingers but has not risen. Verify its attachment before presentation.",
          "feedback": "key → present"
        },
        {
          "native_step": 190,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: key (-0.0868,-0.2056,0.7977), slot (0.1102,-0.1977,0.765). Required xy <7mm, upright <7deg, depth 25mm, turn <30deg. 110 native steps remain; no home required.\n- phase: left verified blade grasp with 22.7mm lift and 0.3mm drift; right empty; present bow next.\n- blockers: first transfer dropped key; right pickup failed; retry grasp now stable.\nThe key rose with the left fingertips and verification passed. Present it for the right bow grasp.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；key → present"
        },
        {
          "native_step": 203,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "recover"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: key (-0.0868,-0.2056,0.7977); slot (0.1102,-0.1977,0.765). Thresholds xy 7mm, upright 7deg, depth 25mm, turned alignment 30deg. 110 steps remain; no home requirement.\n- phase: left holds verified blade grasp; right empty; recover blocked orientation.\n- blockers: original transfer dropped key; right pickup failed; left presentation now rejected for orientation with no motion.\nThe key remains firmly held, but the presentation pose is unreachable at its requested angles. Use held-object recovery instead of repeating the rejected presentation.",
          "feedback": "key → present"
        },
        {
          "native_step": 203,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: key (-0.087,-0.2055,0.9197); slot (0.1102,-0.1977,0.765). Limits xy 7mm, upright 7deg, depth 25mm, turned alignment 30deg. 97 steps remain; no home required.\n- phase: left verified blade grasp elevated by recovery; right empty; retry presentation from elevated configuration.\n- blockers: first transfer dropped key; right pickup failed; low presentation orientation rejected. Recovery raised wrist 122mm with grasp drift only 0.15mm.\nThe elevated key remains securely between the left fingers. Advance presentation from the changed configuration to enable bow transfer.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；key → present"
        },
        {
          "native_step": 203,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "receive"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: key (-0.087,-0.2055,0.9197) held left; slot (0.1102,-0.1977,0.765). Native limits xy 7mm, upright 7deg, depth 25mm, turn 30deg. 97 steps remain; no home requirement.\n- phase: left blade grasp verified, right empty; attempt receiving bow at measured elevated pose.\n- blockers: original transfer dropped key; right pickup failed; presentation orientation rejected both low and elevated. Do not repeat that target.\nThe wrist image shows an exposed bow on the elevated held key. Request receiver approach using its current measured geometry rather than the unreachable presentation rotation.",
          "feedback": "阶段阻止：expected stage present; skipping stages is not allowed；key → present"
        },
        {
          "native_step": 204,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "recover"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: key (-0.087,-0.2055,0.9197) held left; slot (0.1102,-0.1977,0.765). Native limits xy 7mm, upright 7deg, depth 25mm, turn 30deg. 97 steps remain; no home required.\n- phase: verified left grasp at blocked presentation; right empty; seek changed clearance configuration.\n- blockers: transfer previously dropped key; right pickup failed; presentation rotation failed low and elevated. Receiver cannot precede presentation.\nThe controller requires presentation and the key is still verified held. Recover again to seek a reachable starting configuration without opening the grasp.",
          "feedback": "key → present"
        },
        {
          "native_step": 204,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "restart",
            "arm": "right"
          },
          "note": "STATE\n- goal: pickup done historically; handover in progress; insert todo; turn todo.\n- facts: key held left at (-0.0871,-0.2054,0.9199); slot (0.1102,-0.1977,0.765). Limits xy 7mm, upright 7deg, depth 25mm, turn 30deg. 96 steps remain.\n- phase: abandon unusable left grasp transform and regrasp with right.\n- blockers: original transfer lost key; previous right pickup failed at earlier pose; left presentation unreachable; recovery now moves only 0.2mm and cannot repair orientation. Skipping presentation is forbidden.\nThe elevated key remains secure but repeated recovery cannot change its unusable presentation. Restart pickup with the opposite arm to obtain a different grasp transform."
        },
        {
          "native_step": 204,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "restart"
          },
          "note": "STATE\n- goal: pickup done historically; handover in progress; insert todo; turn todo.\n- facts: key held left at (-0.0871,-0.2054,0.9199); slot (0.1102,-0.1977,0.765). Native limits xy 7mm, upright 7deg, depth 25mm, turn 30deg. 96 steps remain.\n- phase: request same-arm regrasp to resolve blocked presentation.\n- blockers: transfer dropped key previously; presentation rotation unreachable; recovery no longer changes pose; switching arm while held rejected. Receiver requires presentation.\nThe arm-switch request was rejected without motion. Restart with the current arm to release the unusable grasp and rebuild pickup geometry.",
          "feedback": "阶段阻止：restart is only for an unverified or lost grasp；key → present"
        },
        {
          "native_step": 204,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: key held left at (-0.0871,-0.2054,0.9199); slot (0.1102,-0.1977,0.765). Limits xy 7mm, upright 7deg, depth 25mm, turn 30deg. 96 native steps remain.\n- phase: resume presentation after last recovery; right empty.\n- blockers: original transfer lost key; presentation previously unreachable; recovery changed pose slightly; restart forbidden for verified grasp and arm cannot switch.\nThe controller still verifies the grasp and requires presentation. Resume the recorded next stage from the recovered pose rather than attempting another rejected restart.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；key → present"
        },
        {
          "native_step": 204,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "release"
          },
          "note": "STATE\n- goal: pickup done historically; handover in progress; insert todo; turn todo.\n- facts: key held left (-0.0871,-0.2054,0.9199); slot (0.1102,-0.1977,0.765). Native limits: xy 7mm, upright 7deg, depth 25mm, turn 30deg. Budget 96 steps.\n- phase: seek safe release of unusable verified blade grasp before new pickup.\n- blockers: presentation blocked by orientation, zero motion; recovery does not resolve it; receiver requires presentation; restart prohibited while verified.\nThe presentation guard explicitly reports unreachable angles although position is reachable. Request release rather than repeating that blocked orientation, so a different pickup can become possible.",
          "feedback": "阶段阻止：expected stage present; skipping stages is not allowed；key → present"
        },
        {
          "native_step": 205,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "recover"
          },
          "note": "STATE\n- goal: pickup done historically; handover in progress; insert todo; turn todo.\n- facts: key held left (-0.0871,-0.2054,0.9199); slot (0.1102,-0.1977,0.765). Required xy <7mm, upright <7deg, depth 25mm, turn alignment <30deg; 96 steps left.\n- phase: recover verified left grasp to change the physical starting configuration.\n- blockers: presentation orientation unreachable; release and receive rejected by stage order; restart rejected while verified. Only recovery permits motion here.\nThe key remains between the left fingers, and the attempted release executed no movement. Use the supported recovery to alter the configuration before deciding whether presentation can be retried.",
          "feedback": "key → present"
        },
        {
          "native_step": 205,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "present",
            "arm": "right"
          },
          "note": "STATE\n- goal: pickup done historically; handover in progress; insert todo; turn todo.\n- facts: key verified in left at (-0.0871,-0.2054,0.9199); slot (0.1102,-0.1977,0.765); 95 native steps remain. Native success false.\n- phase: check whether right-arm presentation can resolve the blocked handover configuration.\n- blockers: left presentation unreachable; recovery converged at same wrist pose; release/receive cannot skip present; restart rejected for held key.\nRecovery left the key stable but did not materially change the pose. Request presentation with the opposite arm specified, rather than repeating the unchanged default presentation."
        },
        {
          "native_step": 205,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "handover"
          },
          "note": "STATE\n- goal: pickup done historically; handover in progress; insert todo; turn todo.\n- facts: left verified key (-0.0871,-0.2054,0.9199); slot (0.1102,-0.1977,0.765); right gripper closed near bow; prior receiver bow error 2.9mm. 95 native steps remain; success false.\n- phase: request the handover recommended by the controller's latest error.\n- blockers: presentation unreachable; recovery converged; release/receive rejected; restart disallowed while held; arm override rejected because grasp fixes arm.\nThe controller explicitly directs use of handover to change the grasping arm. The recorded bow proximity suggests checking that transition rather than another impossible arm override.",
          "feedback": "阶段阻止：expected stage present; skipping stages is not allowed；key → present"
        },
        {
          "native_step": 205,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "next"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: key held in left at (-0.0871,-0.2054,0.9199), slot (0.1102,-0.1977,0.765). Recovery completed at native step 205; 95 steps remain; success false.\n- phase: execute required presentation from the latest recovered pose.\n- blockers: arm override and direct handover cannot bypass present. Earlier presentation failed before the latest recovery; no normal presentation has run since it.\nThe stage gate requires presentation and rejects handover. Use the next recorded stage from the recovered pose, allowing the controller to recompute geometry from this grasp.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；key → present"
        },
        {
          "native_step": 206,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "recover"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: left verified grasp; key (-0.0871,-0.2054,0.9199), slot (0.1102,-0.1977,0.765); 95 native steps remain; success false.\n- phase: repair blocked presentation before retrying the required stage.\n- blockers: presentation target wrist (0.0121,-0.0525,0.9309) has unreachable requested orientation; direct handover and arm override rejected. Restart unavailable while held.\nThe new presentation failed without motion, specifically on orientation. A held-object recovery is the available motion that can change the planning start configuration rather than repeat the blocked target unchanged.",
          "feedback": "key → present"
        },
        {
          "native_step": 206,
          "action": "insertion_stage",
          "args": {
            "object_id": "key",
            "stage": "receive"
          },
          "note": "STATE\n- goal: pickup done; handover in progress; insert todo; turn todo.\n- facts: left holds key (-0.0872,-0.2053,0.9199); right TCP (0.0201,-0.2089,0.9159). Slot (0.1102,-0.1977,0.765). Success false; 94 native steps remain.\n- phase: attempt receiver contact on the accessible bow from the recovered grasp.\n- blockers: canonical presentation orientation unreachable; latest recovery barely moved, so do not retry that presentation. Direct handover previously rejected; historical receiver bow error was 2.9 mm.\nThe right wrist image shows the exposed bow opposite its jaws. Request the receiving stage to establish contact without repeating the unreachable donor presentation.",
          "feedback": "阶段阻止：expected stage present; skipping stages is not allowed；key → present"
        }
      ],
      "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": 0.0,
            "native_step": 206
          },
          "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": 0.0,
            "native_step": 193
          },
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": true,
            "metric": "xy_distance",
            "value": 0.19758761765858798,
            "unit": "m",
            "operator": "<",
            "threshold": 0.007,
            "satisfied": false,
            "object_xyz": [
              -0.08720891177654266,
              -0.20532041788101196,
              0.9199005961418152
            ],
            "target_xyz": [
              0.110232874751091,
              -0.19773045182228088,
              0.7649999856948853
            ],
            "frame": "env_origin",
            "metric_frame": "env_origin",
            "reference_point": "root",
            "error_above_threshold": 0.19058761765858798
          }
        },
        {
          "id": "c3",
          "predicate": "is_axis_up",
          "parameters": {
            "label": "key",
            "axis": [
              0,
              0,
              1
            ],
            "label_args": null,
            "threshold": 7
          },
          "last_native_evaluation": null,
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": true,
            "metric": "axis_angle",
            "value": 83.06607618649586,
            "unit": "deg",
            "operator": "<",
            "threshold": 7.0,
            "satisfied": false,
            "reference_point": "root",
            "project_plane": null,
            "error_above_threshold": 76.06607618649586
          }
        },
        {
          "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": null,
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": true,
            "metric": "axis_angle",
            "value": 95.13199050874067,
            "unit": "deg",
            "operator": "<",
            "threshold": 30.0,
            "satisfied": false,
            "reference_point": "root",
            "project_plane": null,
            "error_above_threshold": 65.13199050874067
          }
        }
      ],
      "final_home_status": {
        "left": {
          "position_error_m": 0.3045932245652971,
          "rotation_error_deg": 89.87622168079749,
          "max_joint_error_rad": 1.8336411714553844,
          "at_home": false
        },
        "right": {
          "position_error_m": 0.1995662988699192,
          "rotation_error_deg": 90.30330326560752,
          "max_joint_error_rad": 1.9459887742996227,
          "at_home": false
        }
      },
      "controller": "physicalrsi_v6",
      "interruption_label": "人工停止试验 · 无效"
    },
    {
      "id": "insert_tubes_staged",
      "task": "insert_tubes",
      "video": "insert_tubes_staged.mp4",
      "poster": "insert_tubes_staged.jpg",
      "instruction": "Insert the three tubes into the rack one by one.",
      "translation": "把三根试管逐根插入试管架。",
      "rules": [
        "抓管帽下方的上部管身，抬升验证抓牢；转为帽朝上，夹爪水平接近管架。",
        "摆正与抬升合并、管底净空 45 mm；对齐空孔后每段下插最多 8 mm。",
        "竖直且受孔导向后原地松爪，向上撤离，再检查试管是否仍稳定。",
        "三根全部释放后再逐臂归位；最终仍要求全部插入和双臂归位的原生判定。"
      ],
      "rule_file": "insertion_control.py",
      "valid": false,
      "success": false,
      "termination_reason": "infrastructure_error",
      "native_steps": 423,
      "step_lim": 500,
      "planner_turns": 58,
      "elapsed_s": 632.1,
      "seed": 0,
      "layout_id": 0,
      "cost_usd": 6.341315,
      "finding": "原生 423 / 500 步、58 个 GPT 回合，未完成整项。前两根已放置并通过当时的原生条件或实时测量检查；第三根摆正后的独立抬升验证成功，但从侧面移向中间孔时失去抓取，姿态倾斜约 59°。后续两臂重抓均被规划器拒绝，长时间没有物理推进，因此人工停止并标为无效中断。与已插试管碰撞是待验证原因；不是完整评测成功或失败。",
      "commands": [
        {
          "native_step": 0,
          "action": "reset",
          "args": {},
          "note": ""
        },
        {
          "native_step": 32,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next",
            "arm": "right",
            "hole_index": 4
          },
          "note": "STATE\n- goal: tube0/tube1/tube2 insertion one by one todo; each must be in rack, depth threshold .045 m, upright <30 degrees; both arms return to origin todo.\n- facts: rack at (0,.0206,.795), yaw ~6.5 degrees. tube0 at (.152,-.2203,.7783), tube1 at (-.2589,-.1103,.7783), tube2 at (.3714,-.1073,.7783); all white with tan caps, lying down. 0/3 inserted.\n- phase: begin tube0 with right arm, hole4; both hands empty.\n- blockers: none.\nThe central-right tube is near the right hand, so I start its recorded approach to a right-side aperture.",
          "feedback": "tube0 → grasp"
        },
        {
          "native_step": 47,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert tube0/tube1/tube2 sequentially in rack at required depth .045 m and upright <30 degrees, all todo; return both arms home todo.\n- facts: rack (0,.0206,.795), yaw 6.5 degrees; tube0 (.152,-.2203,.7783), tube1 (-.259,-.110,.778), tube2 (.371,-.107,.778). 0/3 inserted. tube0 assigned right arm and hole4. 468 native steps remain.\n- phase: right hand above tube0 upper body, approach complete; grasp next. Left empty at home.\n- blockers: none.\nThe wrist image shows tube0 centered between open fingers and the controller reports grasp phase; I close on its upper body.",
          "feedback": "tube0 → verify_grasp"
        },
        {
          "native_step": 53,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert three tubes sequentially, depth .045 m and upright <30 degrees todo; both arms home todo.\n- facts: rack (0,.0206,.795), yaw6.5 degrees; tube0 (.152,-.220,.778) right/hole4; tube1 (-.259,-.110,.778); tube2 (.371,-.107,.778). 0/3 inserted; 453 native steps left.\n- phase: right fingers closed around tube0 beneath tan cap; verify pickup next; left empty home.\n- blockers: none.\nThe wrist view confirms fingers contact the upper body, but the tube has not lifted; I execute the grasp verification lift.",
          "feedback": "tube0 → orient"
        },
        {
          "native_step": 83,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: three tubes inserted one by one, depth .045 m and upright <30 degrees todo; both arms home todo.\n- facts: rack (0,.0206,.795), yaw6.5deg; tube0 right/hole4 lifted to (.151,-.221,.799); tube1 (-.259,-.110,.778); tube2 (.371,-.107,.778). 0/3 inserted; 447 steps left.\n- phase: right holds verified tube0 (lift .0206m, slip .0025m); orient next. Left home empty.\n- blockers: none.\nThe grasp remained stable in the wrist view and verified lift passed; I rotate tube0 cap-up for rack approach.",
          "feedback": "tube0 → align"
        },
        {
          "native_step": 111,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: three tubes inserted sequentially todo (depth .045m, tilt <30deg); arms home required finally.\n- facts: rack (0,.0206,.795), yaw6.5deg; tube0 held right/hole4 at (.152,-.222,.870), tilt .58deg; tube1 (-.259,-.110,.778); tube2 (.371,-.107,.778). 0/3 inserted; 417 steps remain.\n- phase: tube0 cap-up verified, align to hole4 next; left home empty.\n- blockers: none.\nTube0 is visibly upright with submillimetre grasp translation error; I move it above the selected vacant rightmost aperture.",
          "feedback": "tube0 → insert"
        },
        {
          "native_step": 123,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert three tubes sequentially in progress; depth .045m and tilt <30deg each; return arms home todo.\n- facts: rack (0,.0206,.795), yaw6.5deg; tube0 right/hole4 tip (.0732,.0113,.8368), alignment .53mm, tilt .286deg. Tube1 (-.259,-.110,.778); tube2 (.371,-.107,.778). 0/3 inserted; 389 steps remain.\n- phase: right holds aligned tube0; insert next. Left home empty.\n- blockers: none.\nTube0 is centred above the aperture with adequate upright alignment; I lower it through the selected hole.",
          "feedback": "tube0 → insert"
        },
        {
          "native_step": 129,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert three tubes sequentially in progress; depth .045m, tilt <30deg; arms home todo.\n- facts: rack (0,.0206,.795), yaw6.5deg. Tube0 held right/hole4 tip (.0727,.0109,.8069), tilt .21deg; tube1 (-.259,-.110,.778), tube2 (.371,-.107,.778) waiting. 0/3 completed, 377 steps left.\n- phase: tube0 guided insertion progressing; left home.\n- blockers: none; incomplete insertion is progressing, not blocked.\nThe tip descended 30mm while remaining centred and upright; I continue the checked insertion to release depth.",
          "feedback": "tube0 → release"
        },
        {
          "native_step": 137,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert three tubes one by one in progress; native depth, containment and upright conditions required; arms home todo.\n- facts: rack (0,.0206,.795), yaw6.5deg. Tube0 right/hole4 tip (.0726,.0107,.7962), tilt .145deg, controller depth .0288m; tube1 (-.259,-.110,.778), tube2 (.371,-.107,.778) waiting. 371 steps left.\n- phase: tube0 release ready; left home empty.\n- blockers: native tube0 depth not yet satisfied; settling follows release.\nTube0 is upright in the aperture and the controller completed lowering; I open in place to allow final settling.",
          "feedback": "tube0 → retreat"
        },
        {
          "native_step": 147,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "next"
          },
          "note": "STATE\n- goal: three sequential insertions: tube0 done, tube1/2 todo; arms home todo.\n- facts: rack (0,.0206,.795), yaw6.5deg; tube0 released hole4, root (.066,.005,.772), native depth/inside/upright passed, tilt10deg. Tube1 (-.259,-.110,.778), tube2 (.371,-.107,.778) waiting. 363 steps remain.\n- phase: right empty ready retreat; left home.\n- blockers: none.\nTube0 settled to native accepted depth with open jaws; I retreat without disturbing it.",
          "feedback": "tube0 → home"
        },
        {
          "native_step": 147,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "home"
          },
          "note": "STATE\n- goal: tube0 inserted done; tube1/2 sequential insertion todo; final arms home todo.\n- facts: tube0 stable hole4 depth .0535m tilt10deg; rack (0,.0206,.795) yaw6.5deg. Tube1 (-.259,-.110,.778), tube2 (.371,-.107,.778). 353 steps remain.\n- phase: right empty retreated, tube0 home stage; left home empty.\n- blockers: none.\nTube0 remains stable after retreat; I execute its recorded home stage, which may defer motion until remaining tubes are placed.",
          "feedback": "tube0 → complete"
        },
        {
          "native_step": 181,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next",
            "arm": "left",
            "hole_index": 0
          },
          "note": "STATE\n- goal: tube0 inserted done; tube1 insertion in progress; tube2 todo; final home todo.\n- facts: tube0 stable hole4 depth .0535m tilt10deg, home deferred. Rack (0,.0206,.795) yaw6.5deg. Tube1 (-.259,-.110,.778), tube2 (.371,-.107,.778). 353 steps remain.\n- phase: both empty; approach tube1 with left toward hole0, separate from tube0.\n- blockers: none.\nTube1 lies on the left within left-arm reach; I start its upper-body pickup for the free leftmost hole.",
          "feedback": "tube0 → complete；tube1 → grasp"
        },
        {
          "native_step": 196,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 inserted done; tube1 insertion in progress; tube2 and final home todo.\n- facts: tube0 stable hole4; tube1 targets hole0 with left; tube2 on right (.371,-.107,.778). Rack yaw6.5deg. 319 native steps remain.\n- phase: left open above tube1 upper body, next grasp; right empty away from tube0.\n- blockers: none.\nThe wrist view centers tube1 between open fingers; I close at its recorded grasp region.",
          "feedback": "tube0 → complete；tube1 → verify_grasp"
        },
        {
          "native_step": 202,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 insertion done; tube1 in progress; tube2 and final home todo.\n- facts: tube0 stable hole4 depth .0535m tilt10deg; tube1 targets hole0 left; tube2 (.371,-.107,.778). 304 steps remain; home needs per-axis <=.15m and rotation <=20deg.\n- phase: left fingers closed around tube1 upper body; verify lift next. Right empty.\n- blockers: none.\nThe fingers contact below tube1 cap with gripper .239; a checked lift will establish a secure grasp before transport.",
          "feedback": "tube0 → complete；tube1 → orient"
        },
        {
          "native_step": 234,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert tubes one by one: tube0 done, tube1 in progress, tube2 todo; native final home todo.\n- facts: tube0 stable hole4; tube1 targets hole0 with left, verified lift .0225m with .0005m slip; tube2 at (.371,-.107,.778). 298 native steps remain; home per-axis <=.15m rotation <=20deg.\n- phase: left holds tube1 securely; orient upright next; right empty.\n- blockers: none.\nTube1 moved with the fingers and remains horizontal at 87.8deg from upright; I rotate cap-up for rack entry.",
          "feedback": "tube0 → complete；tube1 → align"
        },
        {
          "native_step": 259,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 insertion done; tube1 in progress; tube2 and native final home todo.\n- facts: tube0 stable hole4; left holds tube1 for hole0, tilt .34deg and slip .0006m; tube2 (.371,-.107,.778). 266 steps remain; home per-axis <=.15m rotation <=20deg.\n- phase: tube1 upright at (-.260,-.110,.870); align over hole0 next. Right empty.\n- blockers: none.\nThe wrist image shows a secure cap-up grasp and native tilt passes; I transport to the selected rack aperture.",
          "feedback": "tube0 → complete；tube1 → insert"
        },
        {
          "native_step": 271,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 insertion done; tube1 in progress; tube2 and final native home todo.\n- facts: tube0 stable hole4; tube1 left held above hole0 with .00016m XY error, .10deg tilt, tip z .8369; tube2 on table (.371,-.107,.778). 241 steps remain; home <=.15m per axis and <=20deg.\n- phase: insert tube1 with left; right empty.\n- blockers: none.\nTube1 is centered over its aperture and upright; I execute guided descent to the required depth.",
          "feedback": "tube0 → complete；tube1 → insert"
        },
        {
          "native_step": 277,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 insertion done; tube1 in progress; tube2 and native final home todo.\n- facts: tube0 stable hole4; tube1 left held in hole0, root (-.070,-.005,.807), tilt .08deg; tube2 on table (.371,-.107,.778). 229 native steps remain; home <=.15m per axis and <=20deg.\n- phase: continue tube1 guided insertion; right empty.\n- blockers: none, previous insertion progressed but not yet deep enough.\nThe tube descended about 30mm while staying upright and centered; I continue the bounded insertion stage.",
          "feedback": "tube0 → complete；tube1 → release"
        },
        {
          "native_step": 285,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 insertion done; tube1 release/settling in progress; tube2 and final native home todo.\n- facts: tube0 stable hole4; tube1 left held hole0 root z .7962, XY error .001m, tilt .077deg, controller ready release; tube2 on table (.371,-.107,.778). 223 steps remain; home <=.15m per axis and <=20deg.\n- phase: release tube1 in place; right empty.\n- blockers: native tube1 depth not yet passed; verify after settling.\nThe tube is straight and seated in the aperture. I open in place to let it settle to full depth.",
          "feedback": "tube0 → complete；tube1 → retreat"
        },
        {
          "native_step": 295,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 and tube1 inserted; tube2 todo; final native home todo.\n- facts: tube0 stable hole4 tilt10deg; tube1 released hole0 root(-.0696,-.0063,.7707), native depth/inside pass, tilt1.55deg. tube2 table(.371,-.107,.778). 215 steps remain; home <=.15m/axis, <=20deg.\n- phase: retreat left clear of tube1; both grippers empty.\n- blockers: none.\nTube1 settled fully with gripper open and remains upright. I retreat without disturbing it before approaching the last tube.",
          "feedback": "tube0 → complete；tube1 → home"
        },
        {
          "native_step": 295,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "home"
          },
          "note": "STATE\n- goal: tube0 and tube1 inserted; tube2 todo; final native home todo.\n- facts: tube0 hole4 tilt10deg; tube1 hole0 tilt1.54deg and depth .0543m confirmed stable; tube2 table(.371,-.107,.778). 205 native steps remain; home <=.15m/axis, <=20deg.\n- phase: left retreated empty; register tube1 home stage before tube2 right pickup.\n- blockers: none; homing deferred until all tubes released.\nBoth placed tubes remain seated after retreat. I use the required recorded home stage to complete tube1's sequence.",
          "feedback": "tube0 → complete；tube1 → complete"
        },
        {
          "native_step": 324,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next",
            "arm": "right",
            "hole_index": 2
          },
          "note": "STATE\n- goal: insert three tubes sequentially: tube0 done, tube1 done, tube2 todo; native home todo.\n- facts: tube0 stable hole4 tilt10deg; tube1 stable hole0 tilt1.54deg; tube2 on table(.371,-.107,.778). Middle hole2 free. 205 steps remain; home <=.15m/axis and <=20deg.\n- phase: both arms empty; begin right pickup of last tube, then verify grasp.\n- blockers: none; first two home stages deferred until final release.\nTube2 lies to the right while rack end holes are occupied. I choose right-arm approach and free middle hole2 to space the tubes.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → grasp"
        },
        {
          "native_step": 339,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: sequential three-tube insertion: tube0 done, tube1 done, tube2 in progress; native home todo.\n- facts: tube0 hole4 tilt13.8deg and tube1 hole0 tilt1.5deg pass native placement; tube2 table(.371,-.107,.778), assigned hole2. 176 steps remain; home <=.15m/axis, <=20deg.\n- phase: right TCP above tube2 at(.318,-.035,.826), open; next grasp then verify lift. Left empty.\n- blockers: none; homing deferred until final release.\nWrist view shows tube2 centered between open fingers. I advance to the controlled upper-body grasp.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → verify_grasp"
        },
        {
          "native_step": 345,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert tubes one by one: tube0 done, tube1 done, tube2 in progress; native home todo.\n- facts: tube0 hole4 tilt13.8deg, tube1 hole0 tilt1.49deg pass placement; tube2 table(.371,-.107,.778) assigned hole2. 161 steps remain; home <=.15m/axis and <=20deg.\n- phase: right fingers closed around tube2 upper body, grasp unverified; left empty; next verify lift.\n- blockers: none; both home stages deferred until last release.\nThe wrist image shows fingers contacting below tube2's cap. I perform the lift verification before transporting it.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → orient"
        },
        {
          "native_step": 383,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: sequential insertion: tube0 done, tube1 done, tube2 in progress; native home todo.\n- facts: tube0 hole4 tilt13.8deg, tube1 hole0 tilt1.49deg pass placement. Tube2 assigned hole2, root(.371,-.108,.801), verified lift .0227m with .0003m grasp drift. 155 steps remain; home <=.15m/axis, <=20deg.\n- phase: right verified holding tube2 horizontally; left empty. Next orient cap up.\n- blockers: none; homing deferred until final release.\nTube2 rose with the right fingers and maintained its grasp transform. I advance to upright orientation for rack entry.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → align"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert sequentially: tube0 done, tube1 done, tube2 in progress; native home todo.\n- facts: tube0 hole4 and tube1 hole0 stable, tilt13.8/1.46deg. Tube2 hole2 held root(.412,-.049,.896), tilt4.73deg, grasp reverified. 117 native steps remain; home <=.15m/axis and <=20deg.\n- phase: right holding cap-up tube2; left empty. Next align over hole2.\n- blockers: none; reserve remaining steps for insertion and both homes.\nImages and native axis measurement show tube2 upright and clear of the table. I advance its horizontal rack approach to the selected empty aperture.",
          "feedback": "阶段阻止：object slipped or was lost; restart from its observed pose；tube0 → complete；tube1 → complete；tube2 → align"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "restart",
            "arm": "left",
            "hole_index": 2
          },
          "note": "STATE\n- goal: sequential insertion tube0 done, tube1 done, tube2 in progress; both homes todo.\n- facts: tube0 shifted to(.083,.025,.775), tilt19.9deg still depth passing; tube1 hole0 stable. Tube2 slipped during right approach to hole2, root(.086,.016,.888), tilt59deg. 77 steps remain; native home <=.15m/axis <=20deg.\n- phase: tube2 unverified in right fingers; restart pickup with left from current pose.\n- blockers: right rack approach lost grasp (.093m drift/69deg); do not repeat blocked align or recover unverified grasp.\nThe tube lies diagonally across the right fingers near the rack. I restart only its pickup with the left arm to change the failed grasp approach."
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "restart",
            "arm": "left"
          },
          "note": "STATE\n- goal: tube0 and tube1 inserted done; tube2 insertion in progress; both homes todo.\n- facts: tube0 hole4 depth passing tilt19.9deg; tube1 hole0 stable tilt1.46deg. Tube2 root(.086,.016,.888), tilt59deg after slipping. 77 native steps remain.\n- phase: restart tube2 pickup using left; physical tube still against right fingers, no verified holder.\n- blockers: right approach lost grasp; previous restart rejected hole_index at align, though arm selection changed. Omit hole parameter to restart correctly.\nNo motion occurred on the rejected command. I remove the unnecessary hole selection and restart pickup with the left arm.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 and tube1 inserted done; tube2 insertion in progress; both homes todo.\n- facts: tube0 hole4 tilt19.9deg depth passing; tube1 hole0 stable. Tube2 at(.086,.016,.888), tilt59deg, against right fingers. 77 native steps remain.\n- phase: tube2 restart accepted; left approach next, hole2 retained; no verified holder.\n- blockers: right approach lost grasp; restart must omit hole parameter at align. Left pickup changes failed geometry.\nThe controller now allows a fresh approach. I approach the current tube pose with the left arm to acquire a stable grasp.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "restart",
            "arm": "right"
          },
          "note": "STATE\n- goal: two tubes inserted done; tube2 insertion in progress; both arms home todo.\n- facts: tube0 hole4 and tube1 hole0 depth passing; tube2 at(.086,.016,.888), tilt59deg against right fingers; hole2 intended. 77 native steps remain.\n- phase: no verified grasp; switch fresh pickup to right.\n- blockers: left approach plan_failed without motion (reach47%). Original right grasp slipped during alignment, so fresh pickup must use current pose.\nLeft cannot reach the new pickup orientation. I restart with the right arm rather than repeat the blocked left approach.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0 and tube1 insertion done; tube2 insertion in progress; both arms home todo.\n- facts: tube0 hole4, tube1 hole0 stable; tube2 at(.086,.016,.888) tilted59deg near right fingers, intended hole2. 77 native steps remain.\n- phase: right restart accepted; approach current tube pose next, no verified holder.\n- blockers: left pickup unreachable; earlier right grasp slipped during align. Fresh right approach uses changed tube pose.\nThe right pickup phase is reset and the tube remains accessible near its fingers. I execute approach to regrasp at its measured position.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "verify_grasp"
          },
          "note": "STATE\n- goal: tube0 and tube1 inserted done; tube2 insertion in progress; both arms home todo.\n- facts: tube0 hole4 and tube1 hole0 stable; tube2 at(.086,.016,.888), tilt59deg, visibly between closed right fingers. 77 native steps remain.\n- phase: check whether right fingers still support tube2 with a shifted grasp before any recovery.\n- blockers: fresh approach failed orientation planning for both arms without movement; original right grasp slipped69deg. No unchanged approach retry.\nAlthough the old grasp transform was lost, the tube remains visibly supported by the closed right gripper. I request physical grasp verification to determine whether a held-object recovery is valid.",
          "feedback": "阶段阻止：expected stage approach; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "home"
          },
          "note": "STATE\n- goal: tube0 and tube1 inserted done; tube2 insertion in progress; both arms home todo.\n- facts: tube0 hole4 and tube1 hole0 remain stable; tube2 at(.086,.016,.888), tilted59deg near closed right fingers. 77 native steps remain.\n- phase: request recorded homing for the placed right-arm tube, then reassess tube2.\n- blockers: both tube2 approach orientations fail; verification is prohibited before approach, so recovery lacks a verified grasp.\nTube2 cannot currently be reapproached from either arm. I request the placed tube's checked home stage to clear the right wrist and satisfy the outstanding origin requirement if permitted.",
          "feedback": "阶段阻止：expected stage complete; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "restart",
            "arm": "right",
            "hole_index": 4
          },
          "note": "STATE\n- goal: two tubes inserted; tube2 insertion and both-arm homing todo.\n- facts: tube0 hole4 tilted20deg, tube1 hole0 upright; tube2 tilted59deg at right fingers. 77 native steps remain.\n- phase: reopen right-arm pickup sequence at accessible tube0 to clear the trapped tube2 and improve tube0 posture.\n- blockers: tube2 approaches fail for both arms; grasp verification cannot skip approach; tube0 home cannot run from complete while tube2 remains unreleased.\nThe right fingers cannot reach a valid new grasp on tube2 from this configuration. I restart the accessible tube0 pickup to obtain a checked open-gripper approach and clear the obstructed right-hand configuration."
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "restart",
            "arm": "right"
          },
          "note": "STATE\n- goal: tube0/tube1 inserted; tube2 insertion and both arms home todo.\n- facts: tube0 hole4 tilted20deg; tube1 hole0 upright; tube2 tilted59deg at right fingers. 77 native steps remain.\n- phase: reset accessible tube0 approach without changing its existing hole.\n- blockers: tube2 approach unreachable from both arms; no verified hold for recovery. Home deferred; restart with hole argument rejected before execution.\nThe controller rejected the redundant hole argument rather than moving. I omit it so the right arm can execute an open approach that clears its trapped configuration.",
          "feedback": "阶段阻止：restart is only for an unverified or lost grasp；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "release"
          },
          "note": "STATE\n- goal: tube0/tube1 inserted; tube2 insertion and both arms home todo.\n- facts: tube0 occupies hole4 and tube1 hole0. Tube2 remains tilted59° above rack at closed right fingers; 77 native steps remain.\n- phase: request safe release of the compromised tube2 contact so its pickup pose can settle before restarting.\n- blockers: right approach orientation and left approach position are unreachable at the current elevated tube pose; verification cannot skip approach. Completed-tube restarts unavailable and homing deferred.\nThe wrist image shows tube2 still at the closed right gripper despite its unverified state. Opening in place may remove the elevated-pose deadlock without repeating either blocked approach.",
          "feedback": "阶段阻止：expected stage approach; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "home"
          },
          "note": "STATE\n- goal: tube0/tube1 inserted; tube2 insertion and both arms home todo.\n- facts: tube0 hole4 and tube1 hole0 are placed; tube2 slipped during alignment, remaining near closed right fingers tilted59°. Native step423 leaves77 steps.\n- phase: request checked tube2 homing to clear the compromised pickup configuration if permitted.\n- blockers: reset left and right approaches are unreachable; release and verification are stage-gated. Completed-tube home was deferred while tube2 remained.\nThe historical alignment response confirms a lost grasp rather than a rim block, so recover is inappropriate. I request the recorded home safety path for the active tube, rather than retrying an unchanged unreachable approach.",
          "feedback": "阶段阻止：expected stage approach; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "restart",
            "arm": "right",
            "hole_index": 7
          },
          "note": "STATE\n- goal: tube0/tube1 inserted; tube2 insertion and both arms home todo.\n- facts: tube0 occupies hole4, tube1 hole0. Tube2 is tilted59° beside the closed right gripper; step423 leaves77 native steps. Neither arm is home.\n- phase: reset tube2 pickup with an alternative free back-row central destination, hole7.\n- blockers: front-row hole2 approach planning failed for both arms after the slip; release, verification and home cannot bypass approach. Completed placements cannot be restarted.\nThe home request made no motion and requires approach first. I change the selected destination to free hole7 and reset the right-arm pickup, testing the remaining rack-relative alternative without disturbing placed tubes.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0/tube1 insertion done; tube2 insertion and both arms home todo.\n- facts: tube0 occupies hole4, tube1 hole0. Tube2 remains at [0.0859,0.0156,0.888], tilted59°, beside the right fingers. Step423 leaves77 native steps.\n- phase: tube2 reset accepted with right arm and new hole7; execute its checked approach.\n- blockers: hole2 approaches previously failed for both arms; unverified grasp disallows recovery and later stages. Homing waits for all placements.\nThe reset selected hole7 without moving anything. I now test the approach under this changed rack-relative selection.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "grasp"
          },
          "note": "STATE\n- goal: tube0/tube1 insertion done; tube2 insertion and both arms home todo.\n- facts: tube0 in hole4, tube1 in hole0; tube2 tilted59° beside right fingers at [0.0859,0.0156,0.888]. Step423,77 native steps remain.\n- phase: test checked grasp from existing proximity rather than repeat unreachable elevated approach.\n- blockers: both pickup arms failed approach; hole7 also fails because requested orientation is unreachable. No verified hold permits recovery; home is deferred.\nThe planner specifically reports reachable position but unreachable approach orientation. A checked grasp request may use the nearer contact target; I request it without repeating the rejected approach.",
          "feedback": "阶段阻止：expected stage approach; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "restart",
            "arm": "left",
            "hole_index": 7
          },
          "note": "STATE\n- goal: tube0/tube1 inserted; tube2 insertion and both arms home todo.\n- facts: tube0 hole4, tube1 hole0, tube2 beside closed right fingers tilted59°. Native step423 leaves77 steps.\n- phase: switch pickup to left for the current hole7 setup, then verify approach feasibility.\n- blockers: right approach orientation is unreachable; grasp cannot bypass approach. Earlier left pickup also failed at hole2; recover requires verified hold and homing is deferred.\nThe right-side approach cannot reach its requested orientation and cannot be skipped. Switching arms is the remaining supported pickup repair; I select the left arm with the current destination.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0/tube1 inserted; tube2 insertion and both arms home todo.\n- facts: tube0 hole4, tube1 hole0; tube2 at [0.0859,0.0156,0.888], tilt59°. Native423 with77 steps remaining.\n- phase: controller accepted left-arm restart for hole7 and expects approach; no verified grasp.\n- blockers: right approach orientation unreachable; direct grasp cannot skip approach; earlier left/hole2 pickup failed. Home deferred pending third tube.\nThe controller now selects the left arm without moving either tube. I execute its checked approach to evaluate the alternative pickup geometry.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube0",
            "stage": "retreat"
          },
          "note": "STATE\n- goal: tube0/tube1 inserted; tube2 insertion and both arms home todo.\n- facts: tube0 hole4 and tube1 hole0 remain seated. Tube2 is elevated at [0.0859,0.0156,0.888], tilted59°, beside closed right fingers;77 native steps remain.\n- phase: clear the previously placed tube's right arm before attempting further recovery.\n- blockers: both pickup arms reject tube2 approach (left position, right orientation); no verified hold permits recover. Home is deferred while tube2 remains.\nLeft approach also failed without motion. I request the placed tube0's checked retreat to determine whether its arm can clear the obstructed pickup posture without disturbing seated tubes.",
          "feedback": "阶段阻止：expected stage complete; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "restart",
            "arm": "right",
            "hole_index": 9
          },
          "note": "STATE\n- goal: tube0/tube1 insertion done; tube2 insertion and both arms home todo.\n- facts: tube0 hole4, tube1 hole0 remain seated. Tube2 is beside closed right fingers at [0.0859,0.0156,0.888], tilt59°. Native423;77 steps remain. Reset changes controller state without opening fingers.\n- phase: retry the right-arm pickup with the far-right back-row aperture selected, then verify feasibility.\n- blockers: holes2/7 recovery attempts failed; both prior approaches blocked; completed-tube retreat and premature home unavailable. No verified hold.\nThe diagnostic confirms resets do not release the tube. I select a different rack-relative target and the adjacent right arm to test a changed feasible route without disturbing the two seated tubes.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "next"
          },
          "note": "STATE\n- goal: tube0/tube1 insertion done; tube2 insertion and both arms home todo.\n- facts: tube0 hole4, tube1 hole0 seated; tube2 tilted59° beside closed right fingers at [0.0859,0.0156,0.888]. Native423;77 steps remain. Right-arm restart accepted with hole9.\n- phase: execute the freshly reset approach, checking planner guard and physical movement.\n- blockers: previous hole2/7 attempts blocked; no verified grasp; home deferred and completed-tube retreat unavailable.\nThe controller now requests approach for tube2 using the right arm and hole9. I advance once to evaluate that changed setup.",
          "feedback": "阶段阻止：motion guard rejected: plan_failed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "verify_grasp"
          },
          "note": "STATE\n- goal: tube0/tube1 insertion done; tube2 insertion and both arms home todo.\n- facts: tube0 hole4 and tube1 hole0 seated. Tube2 at [0.0859,0.0156,0.888], tilt59°, visibly between right fingers. Native423;77 steps remain.\n- phase: assess current right contact before any further movement; tube2 controller approach is blocked.\n- blockers: hole9 approach failed with orientation unreachable, no movement. Changing hole does not repair pickup orientation. Previous hold evidence has 9.3cm drift and is stale.\nThe right wrist image shows the tube within the fingers despite the controller losing verification. I request a measured grasp check rather than repeat the unreachable approach.",
          "feedback": "阶段阻止：expected stage approach; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "home",
            "arm": "left"
          },
          "note": "STATE\n- goal: insert tube0/tube1 done; insert tube2 todo; native both-arm home todo.\n- facts: tube0 hole4 and tube1 hole0 seated; tube2 remains tilted59° at [0.0859,0.0156,0.888] near right closed fingers. Native423,77 steps remain.\n- phase: seek clearance by requesting the placed left tube's recorded home stage; no tube2 grasp is verified.\n- blockers: tube2 approach orientation rejected on right; grasp verification cannot skip approach. Earlier homing was deferred while tubes remained.\nThe left arm remains over the rack beside the tilted tube. I request its placed-tube home stage to check whether clearance can now be obtained without manipulating the unverified tube.",
          "feedback": "阶段阻止：expected stage complete; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "restart",
            "arm": "left",
            "hole_index": 0
          },
          "note": "STATE\n- goal: two tubes seated done; tube2 insertion todo; both-arm home todo.\n- facts: tube0 hole4, tube1 hole0. Tube2 remains tilted59° beside right closed fingers at z0.888. Native423 with77 steps.\n- phase: test re-acquisition of tube1 by its nearby left arm to regain a valid retreat sequence while preserving its target.\n- blockers: right tube2 approach unreachable; unverified grasp prevents recovery. Tube1 home rejected because its phase is complete, not home; direct retreat is unavailable for completed tube0.\nThe empty left gripper is still directly above its seated tube. Restarting only that pickup sequence at the same hole may provide a checked route out of the rack without repeating tube2's unreachable approach."
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "restart",
            "arm": "left"
          },
          "note": "STATE\n- goal: tube0 and tube1 seated done; tube2 insertion todo; both-arm home todo.\n- facts: tube0 hole4 and tube1 hole0; tube2 tilted59° at [0.0859,0.0156,0.888]. Native423,77 steps left.\n- phase: restart tube1 pickup without changing its already recorded hole, seeking a valid left-arm clearance sequence.\n- blockers: tube2 right approach rejected; recovery requires verified grasp. Tube1 home expects complete. Restart with hole_index was rejected by the late hole-selection guard before reset.\nNo motion occurred. I remove hole_index so the restart can be checked independently of the prohibited late target selection.",
          "feedback": "阶段阻止：restart is only for an unverified or lost grasp；tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube1",
            "stage": "next"
          },
          "note": "STATE\n- goal: insert three tubes sequentially: two seated done, tube2 todo; native return to origin todo.\n- facts: tube0 hole4, tube1 hole0; tube2 tipped59° near right fingers. Native423/500; both arms away from home.\n- phase: let recorded controller resolve the completed tube1 sequence and deferred homing.\n- blockers: completed tube1 cannot restart; explicit home rejected at complete; tube2 unverified and approach blocked.\nTube1 is stable and released, so I select the controller's next-stage dispatch rather than trying another pickup or repeating explicit home.",
          "feedback": "tube0 → complete；tube1 → complete；tube2 → approach"
        },
        {
          "native_step": 423,
          "action": "insertion_stage",
          "args": {
            "object_id": "tube2",
            "stage": "orient"
          },
          "note": "STATE\n- goal: tube0/tube1 inserted done; tube2 insertion todo; native home todo.\n- facts: tube2 remains at [0.0859,0.0156,0.888], 59° tipped between closed right fingers; two seated tubes unchanged. Native423/500.\n- phase: request a checked orientation correction for tube2 before attempting further placement.\n- blockers: standard reapproach fails its orientation plan for both arms; changing holes cannot fix that. Completed tubes cannot restart or home while tube2 remains unreleased. Tube2 grasp is not verified, so recover is unavailable.\nThe observed tube is still supported at the right gripper, but its requested pickup orientation is unreachable. I request the recorded orient stage to see whether a safe correction is permitted; no insertion is attempted without its checks.",
          "feedback": "阶段阻止：expected stage approach; skipping stages is not allowed；tube0 → complete；tube1 → complete；tube2 → approach"
        }
      ],
      "final_conditions": [
        {
          "id": "c1",
          "predicate": "is_A_depth_in_B",
          "parameters": {
            "label_A": "tube0",
            "label_B": "slot",
            "z_threshold": 0.045
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 423
          },
          "native_evaluation_at_current_step": true,
          "measurement": {
            "available": false,
            "reason": "numeric_measurement_not_supported"
          }
        },
        {
          "id": "c2",
          "predicate": "is_A_depth_in_B",
          "parameters": {
            "label_A": "tube1",
            "label_B": "slot",
            "z_threshold": 0.045
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 423
          },
          "native_evaluation_at_current_step": true,
          "measurement": {
            "available": false,
            "reason": "numeric_measurement_not_supported"
          }
        },
        {
          "id": "c3",
          "predicate": "is_A_depth_in_B",
          "parameters": {
            "label_A": "tube2",
            "label_B": "slot",
            "z_threshold": 0.045
          },
          "last_native_evaluation": {
            "value": 0.0,
            "native_step": 423
          },
          "native_evaluation_at_current_step": true,
          "measurement": {
            "available": false,
            "reason": "numeric_measurement_not_supported"
          }
        },
        {
          "id": "c4",
          "predicate": "is_A_in_B",
          "parameters": {
            "label_A": "tube0",
            "label_B": "slot"
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 360
          },
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": false,
            "reason": "numeric_measurement_not_supported"
          }
        },
        {
          "id": "c5",
          "predicate": "is_A_in_B",
          "parameters": {
            "label_A": "tube1",
            "label_B": "slot"
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 360
          },
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": false,
            "reason": "numeric_measurement_not_supported"
          }
        },
        {
          "id": "c6",
          "predicate": "is_A_in_B",
          "parameters": {
            "label_A": "tube2",
            "label_B": "slot"
          },
          "last_native_evaluation": {
            "value": 0.0,
            "native_step": 360
          },
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": false,
            "reason": "numeric_measurement_not_supported"
          }
        },
        {
          "id": "c7",
          "predicate": "is_axis_up",
          "parameters": {
            "label": "tube0",
            "axis": [
              0,
              1,
              0
            ],
            "label_args": null,
            "threshold": 30
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 330
          },
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": true,
            "metric": "axis_angle",
            "value": 19.911474542198533,
            "unit": "deg",
            "operator": "<",
            "threshold": 30.0,
            "satisfied": true,
            "reference_point": "root",
            "project_plane": null,
            "error_above_threshold": 0.0
          }
        },
        {
          "id": "c8",
          "predicate": "is_axis_up",
          "parameters": {
            "label": "tube1",
            "axis": [
              0,
              1,
              0
            ],
            "label_args": null,
            "threshold": 30
          },
          "last_native_evaluation": {
            "value": 1.0,
            "native_step": 330
          },
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": true,
            "metric": "axis_angle",
            "value": 1.4569786258658195,
            "unit": "deg",
            "operator": "<",
            "threshold": 30.0,
            "satisfied": true,
            "reference_point": "root",
            "project_plane": null,
            "error_above_threshold": 0.0
          }
        },
        {
          "id": "c9",
          "predicate": "is_axis_up",
          "parameters": {
            "label": "tube2",
            "axis": [
              0,
              1,
              0
            ],
            "label_args": null,
            "threshold": 30
          },
          "last_native_evaluation": null,
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": true,
            "metric": "axis_angle",
            "value": 58.99434110782809,
            "unit": "deg",
            "operator": "<",
            "threshold": 30.0,
            "satisfied": false,
            "reference_point": "root",
            "project_plane": null,
            "error_above_threshold": 28.99434110782809
          }
        },
        {
          "id": "c10",
          "predicate": "all_robot_back_to_origin",
          "parameters": {
            "pos_threshold": 0.15,
            "rot_threshold": 20
          },
          "last_native_evaluation": null,
          "native_evaluation_at_current_step": false,
          "measurement": {
            "available": true,
            "metric": "home_pose",
            "arms": [
              {
                "arm": "left_arm",
                "position_error_per_axis_m": [
                  0.10146757960319519,
                  0.2762957066297531,
                  0.03298884630203247
                ],
                "position_threshold_m": 0.15,
                "angle_deg": 60.885735942552465,
                "angle_threshold_deg": 20,
                "operator": "<=",
                "satisfied": false
              },
              {
                "arm": "right_arm",
                "position_error_per_axis_m": [
                  0.15490210056304932,
                  0.3193705826997757,
                  4.291534423828125e-05
                ],
                "position_threshold_m": 0.15,
                "angle_deg": 74.21847223717911,
                "angle_threshold_deg": 20,
                "operator": "<=",
                "satisfied": false
              }
            ],
            "satisfied": false
          }
        }
      ],
      "final_home_status": {
        "left": {
          "position_error_m": 0.29618111214745696,
          "rotation_error_deg": 60.88576501919488,
          "max_joint_error_rad": 1.8865162134170543,
          "at_home": false
        },
        "right": {
          "position_error_m": 0.35495384445666467,
          "rotation_error_deg": 74.21849099226752,
          "max_joint_error_rad": 2.2051296234130873,
          "at_home": false
        }
      },
      "controller": "physicalrsi_v6",
      "interruption_label": "人工停止试验 · 无效"
    }
  ],
  "invalid_attempts": []
}