{
  "schema": "gleipnir-rig/handoff-report@1",
  "tool": {
    "name": "GleipnirRig",
    "version": "1.0.2"
  },
  "generated_utc": "2026-10-31T15:27:52Z",
  "blender": {
    "version": "4.5.14 LTS",
    "binary": "/srv/codex/workspaces/active/infra/ops/claude-delegation/tools/blender-review/blender-4.5.14-linux-x64/blender"
  },
  "source": {
    "path": "/srv/codex/workspaces/active/PerunlightProductQuality20261031GPT/gleipnir-release-work/source/verification/gui-work/GUI Rig Delivery ünï ✓/GR ✓ override_problem.blend",
    "filename": "GR ✓ override_problem.blend",
    "saved": true,
    "dirty": false,
    "dirty_detection": "bpy.data.is_dirty",
    "sha256_before": "724ae77b422d5cbca735071c2614c9b9a0326cb6a8b22135c4520da9f383f60b",
    "sha256_after": "724ae77b422d5cbca735071c2614c9b9a0326cb6a8b22135c4520da9f383f60b",
    "unchanged": true
  },
  "collection": {
    "name": "GR_Character"
  },
  "simulation": {
    "status": "completed",
    "reason": "",
    "command": [
      "/srv/codex/workspaces/active/infra/ops/claude-delegation/tools/blender-review/blender-4.5.14-linux-x64/blender",
      "--background",
      "--factory-startup",
      "--disable-autoexec",
      "--offline-mode",
      "--python-exit-code",
      "3",
      "--python",
      "/srv/codex/workspaces/active/PerunlightProductQuality20261031GPT/gleipnir-release-work/source/verification/blender-user/extensions/user_default/gleipnir_rig/recipient_child.py",
      "--",
      "--job",
      "/tmp/gleipnir-rig-3vpvy4zr/job.json"
    ],
    "exit_code": 0,
    "duration_s": 1.51,
    "log_tail": "GLEIPNIR_PROGRESS 1/9 Checking the saved source file\nGLEIPNIR_PROGRESS 2/9 Starting an empty recipient scene\nGLEIPNIR_PROGRESS 3/9 Reading the collection list from the saved file\nGLEIPNIR_PROGRESS 4/9 Linking the collection like File > Link\nGLEIPNIR_PROGRESS 5/9 Checking linked data and external files\nGLEIPNIR_PROGRESS 6/9 Creating library overrides\nGLEIPNIR_PROGRESS 7/9 Checking armatures and custom properties\nGLEIPNIR_PROGRESS 8/9 Saving and reopening the recipient file\nInfo: Saved as \"recipient.blend\"\nInfo: Read library: '/srv/codex/workspaces/active/PerunlightProductQuality20261031GPT/gleipnir-release-work/source/verification/gui-work/GUI Rig Delivery ünï ✓/GR ✓ override_problem.blend', '//../../srv/codex/workspaces/active/PerunlightProductQuality20261031GPT/gleipnir-release-work/source/verification/gui-work/GUI Rig Delivery ünï ✓/GR ✓ override_problem.blend', parent '<direct>'\nGLEIPNIR_PROGRESS 9/9 Checking kept edits, drivers and scripts\nGLEIPNIR_RESULT completed\nBlender 4.5.14 LTS (hash 62c1db4208e8 built 2026-09-15 01:31:19)\nRead blend: \"/tmp/gleipnir-rig-3vpvy4zr/recipient.blend\"\n\nBlender quit\n",
    "log_bytes_total": 1132,
    "log_truncated": false,
    "child_blender_version": "4.5.14 LTS",
    "steps_completed": 9,
    "steps_total": 9,
    "child_evidence": {
      "child_blender_version": "4.5.14 LTS",
      "child_binary": "/srv/codex/workspaces/active/infra/ops/claude-delegation/tools/blender-review/blender-4.5.14-linux-x64/blender",
      "autoexec_pref_enabled": false,
      "source_sha256_seen_by_child": "724ae77b422d5cbca735071c2614c9b9a0326cb6a8b22135c4520da9f383f60b",
      "autoexec_pref_enabled_after_reset": false,
      "collections_in_source": [
        "GR_Helpers",
        "GR_Character"
      ],
      "override_objects": [
        "GR_Body",
        "GR_Cape",
        "GR_Rig"
      ],
      "armatures_outside": [
        {
          "mesh": "GR_Cape",
          "armature": "GR_CapeRig",
          "armature_is_override": false,
          "armature_is_linked": true
        }
      ],
      "access_tests": {
        "pose": [
          {
            "object": "GR_Rig",
            "bone": "root",
            "location": [
              0.0123,
              0.0456,
              0.0789
            ]
          }
        ],
        "keyframe": {
          "object": "GR_Rig",
          "bone": "root",
          "name": "rig_version",
          "inserted": true
        }
      },
      "recipient_reloaded": true,
      "texts": [],
      "autoexec_fail": false,
      "autoexec_fail_message": ""
    },
    "cleanup": "Removed temporary directory /tmp/gleipnir-rig-3vpvy4zr",
    "cleanup_ok": true
  },
  "verdict": {
    "code": "NOT_READY",
    "headline": "Not ready to hand off: 3 confirmed failures",
    "explanation": "Fix the confirmed failures, save, and run the check again. This check does not certify rig UI scripts, every driver or animation correctness."
  },
  "counts": {
    "FAIL": 3,
    "WARN": 0,
    "MANUAL": 0,
    "NOT_RUN": 0,
    "PASS": 20
  },
  "findings": [
    {
      "id": "SRC-MEMBERSHIP",
      "status": "FAIL",
      "phase": "source",
      "title": "Meshes depend on armatures outside the collection",
      "detail": "GR_Cape -> GR_CapeRig (modifier)",
      "next_action": "Move the deforming armature into the delivered collection, or fix the modifier target, then save.",
      "evidence": {
        "outside": [
          {
            "mesh": "GR_Cape",
            "armature": "GR_CapeRig",
            "via": "modifier"
          }
        ]
      }
    },
    {
      "id": "REC-ARMATURE-ACCESS",
      "status": "FAIL",
      "phase": "recipient",
      "title": "Meshes are deformed by armature(s) outside the delivered collection",
      "detail": "After linking, these armatures are not part of the overridden collection, so the recipient cannot pose them: GR_Cape -> GR_CapeRig",
      "next_action": "Move the deforming armatures into the delivered collection (or a child collection), save, and run the check again.",
      "evidence": {
        "outside": [
          {
            "mesh": "GR_Cape",
            "armature": "GR_CapeRig",
            "armature_is_override": false,
            "armature_is_linked": true
          }
        ]
      }
    },
    {
      "id": "REC-PROPERTIES",
      "status": "FAIL",
      "phase": "recipient",
      "title": "2 custom properties cannot be animated by the recipient",
      "detail": "The property exists after linking but the recipient cannot keep changes to it: GR_Rig [\"rig_scale\"] (not Library Overridable, read-only after linking, test edit was lost after save and reload); GR_Rig > spine [\"ik_fk\"] (not Library Overridable, read-only after linking, test edit was lost after save and reload)",
      "next_action": "In the source file open the property's gear (Edit Property) and enable Library Overridable for each listed property, save, and run the check again.",
      "evidence": {
        "properties": [
          {
            "object": "GR_Rig",
            "bone": null,
            "name": "rig_scale",
            "type": "float",
            "owner_label": "GR_Rig",
            "present_in_source": true,
            "present_in_recipient": true,
            "overridable": false,
            "editable_in_recipient": false,
            "persisted_after_reload": false,
            "test_value": 3.7630000000000003,
            "original_value": 1.0,
            "editable_in_recipient_after_reload": false
          },
          {
            "object": "GR_Rig",
            "bone": "spine",
            "name": "ik_fk",
            "type": "float",
            "owner_label": "GR_Rig > spine",
            "present_in_source": true,
            "present_in_recipient": true,
            "overridable": false,
            "editable_in_recipient": false,
            "persisted_after_reload": false,
            "test_value": 0.37,
            "original_value": 0.0,
            "editable_in_recipient_after_reload": false
          }
        ]
      }
    },
    {
      "id": "SRC-ARMATURE",
      "status": "PASS",
      "phase": "source",
      "title": "1 armature(s) in the collection",
      "detail": "GR_Rig",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-LINKED-STATUS",
      "status": "PASS",
      "phase": "source",
      "title": "All objects in the collection are local to this file",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-LIBRARIES",
      "status": "PASS",
      "phase": "source",
      "title": "Linked libraries used by the collection resolve",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-FILES",
      "status": "PASS",
      "phase": "source",
      "title": "External files used by the collection resolve",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-DRIVERS",
      "status": "PASS",
      "phase": "source",
      "title": "1 driver(s) need no Python",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-SCRIPTS",
      "status": "PASS",
      "phase": "source",
      "title": "No registered scripts in the file",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "REC-LINK",
      "status": "PASS",
      "phase": "recipient",
      "title": "Collection linked from the saved file in a fresh Blender",
      "detail": "3 objects came in with \"GR_Character\".",
      "next_action": "",
      "evidence": {
        "objects": [
          "GR_Body",
          "GR_Cape",
          "GR_Rig"
        ]
      }
    },
    {
      "id": "REC-MISSING-LINKED",
      "status": "PASS",
      "phase": "recipient",
      "title": "All linked data resolved in the recipient simulation",
      "detail": "1 library file(s) loaded.",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "REC-MISSING-FILES",
      "status": "PASS",
      "phase": "recipient",
      "title": "External files resolved (0 checked)",
      "detail": "Every non-packed image/cache/sound/font used by the linked collection exists on this computer. Paths outside the file's folder may still be missing on the recipient's computer.",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "REC-OVERRIDE",
      "status": "PASS",
      "phase": "recipient",
      "title": "Library overrides created for 3 object(s)",
      "detail": "Created with ID.override_hierarchy_create; armature objects were made user-editable overrides, the state an animator needs to pose them.",
      "next_action": "",
      "evidence": {
        "not_overridden": []
      }
    },
    {
      "id": "REC-PROPERTIES",
      "status": "PASS",
      "phase": "recipient",
      "title": "2 custom properties editable and kept after reload",
      "detail": "GR_Rig > root [\"rig_version\"], GR_Rig > head [\"head_follow\"]",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "REC-POSE-PERSIST",
      "status": "PASS",
      "phase": "recipient",
      "title": "Pose edits are kept after save and reload",
      "detail": "Moved GR_Rig > root and found the same location after reopening the recipient file.",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "REC-KEYFRAME",
      "status": "PASS",
      "phase": "recipient",
      "title": "A custom property was keyed and the key was kept after reload",
      "detail": "Keyed root [\"rig_version\"] on the override.",
      "next_action": "",
      "evidence": {
        "fcurve": "pose.bones[\"root\"][\"rig_version\"]"
      }
    },
    {
      "id": "REC-DRIVERS",
      "status": "PASS",
      "phase": "recipient",
      "title": "1 driver(s) evaluate without Python",
      "detail": "Checked after reopening the recipient file with script execution disabled.",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "REC-SCRIPTS",
      "status": "PASS",
      "phase": "recipient",
      "title": "No scripts arrive with the rig",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-SAVED",
      "status": "PASS",
      "phase": "session",
      "title": "The file is saved on disk",
      "detail": "/srv/codex/workspaces/active/PerunlightProductQuality20261031GPT/gleipnir-release-work/source/verification/gui-work/GUI Rig Delivery ünï ✓/GR ✓ override_problem.blend",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-DIRTY",
      "status": "PASS",
      "phase": "session",
      "title": "No unsaved changes",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-FINGERPRINT",
      "status": "PASS",
      "phase": "session",
      "title": "Disk file matches this session",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SRC-COLLECTION",
      "status": "PASS",
      "phase": "session",
      "title": "Collection \"GR_Character\" is defined in this file",
      "detail": "",
      "next_action": "",
      "evidence": {}
    },
    {
      "id": "SES-SOURCE-UNCHANGED",
      "status": "PASS",
      "phase": "session",
      "title": "Source file unchanged by the check",
      "detail": "SHA-256 before and after: 724ae77b422d5cbca735071c2614c9b9a0326cb6a8b22135c4520da9f383f60b / 724ae77b422d5cbca735071c2614c9b9a0326cb6a8b22135c4520da9f383f60b",
      "next_action": "",
      "evidence": {}
    }
  ],
  "properties": [
    {
      "object": "GR_Rig",
      "bone": null,
      "name": "rig_scale",
      "owner_label": "GR_Rig",
      "type": "float",
      "present_in_source": true,
      "overridable": false,
      "present_in_recipient": true,
      "editable_in_recipient": false,
      "persisted_after_reload": false,
      "test_value": 3.7630000000000003,
      "original_value": 1.0,
      "editable_in_recipient_after_reload": false
    },
    {
      "object": "GR_Rig",
      "bone": "root",
      "name": "rig_version",
      "owner_label": "GR_Rig > root",
      "type": "int",
      "present_in_source": true,
      "overridable": true,
      "present_in_recipient": true,
      "editable_in_recipient": true,
      "persisted_after_reload": true,
      "test_value": 4,
      "original_value": 3,
      "editable_in_recipient_after_reload": true
    },
    {
      "object": "GR_Rig",
      "bone": "spine",
      "name": "ik_fk",
      "owner_label": "GR_Rig > spine",
      "type": "float",
      "present_in_source": true,
      "overridable": false,
      "present_in_recipient": true,
      "editable_in_recipient": false,
      "persisted_after_reload": false,
      "test_value": 0.37,
      "original_value": 0.0,
      "editable_in_recipient_after_reload": false
    },
    {
      "object": "GR_Rig",
      "bone": "head",
      "name": "head_follow",
      "owner_label": "GR_Rig > head",
      "type": "float",
      "present_in_source": true,
      "overridable": true,
      "present_in_recipient": true,
      "editable_in_recipient": true,
      "persisted_after_reload": true,
      "test_value": 0.37,
      "original_value": 1.0,
      "editable_in_recipient_after_reload": true
    }
  ],
  "drivers": [
    {
      "owner": "Shape keys Key",
      "data_path": "key_blocks[\"Breathe\"].value",
      "index": 0,
      "type": "SCRIPTED",
      "expression": "var * 0.5",
      "needs_python": false,
      "valid_in_recipient": true
    }
  ],
  "dependencies": [
    {
      "kind": "library",
      "name": "GR ✓ override_problem.blend",
      "stored_path": "/srv/codex/workspaces/active/PerunlightProductQuality20261031GPT/gleipnir-release-work/source/verification/gui-work/GUI Rig Delivery ünï ✓/GR ✓ override_problem.blend",
      "resolved_path": "/srv/codex/workspaces/active/PerunlightProductQuality20261031GPT/gleipnir-release-work/source/verification/gui-work/GUI Rig Delivery ünï ✓/GR ✓ override_problem.blend",
      "exists": true,
      "packed": false
    }
  ],
  "limits": [
    "Only Blender 4.5 LTS with one selected collection holding ordinary armatures and meshes is supported.",
    "Rig UI panels (Rigify or custom scripts) are never executed, so their behaviour is not certified.",
    "Python-expression drivers are never executed; they are reported for manual review.",
    "Animation correctness, deformation quality and every driver/constraint combination are not evaluated.",
    "Loading the rig without errors is not treated as proof that the rig is good.",
    "The recipient simulation runs on this computer; the recipient's operating system, paths and add-ons may differ."
  ]
}
