{"record":{"id":"0c12768911d026bf","repo":"affaan-m/ECC","slug":"blender-failed-to-save-scene","errorCode":null,"errorMessage":"Blender failed to save scene","messagePattern":"Blender failed to save scene","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/blender_prop.py","lineNumber":289,"sourceCode":"    sc.frame_set(1)\n    bpy.context.view_layer.update()\n\n    if render_dir:\n        sc.render.filepath = str(render_dir.absolute() / \"turn_\")\n        try:\n            sc.render.engine = \"BLENDER_EEVEE_NEXT\"\n        except TypeError:\n            sc.render.engine = \"BLENDER_EEVEE\"\n\n    if out:\n        out.parent.mkdir(parents=True, exist_ok=True)\n        # Pack textures, then publish on the same filesystem without clobbering.\n        bpy.ops.file.pack_all()\n        with tempfile.TemporaryDirectory(prefix=\".taste-blender-\", dir=out.parent) as temporary:\n            staged = Path(temporary) / \"scene.blend\"\n            bpy.ops.wm.save_as_mainfile(filepath=str(staged), check_existing=False, copy=True)\n            if not staged.is_file() or staged.stat().st_size == 0:\n                raise RuntimeError(\"Blender failed to save scene\")\n            validate_output(out)\n            os.link(staged, out)\n        print(f\"[prop] scene -> {out}\")\n\n    if render_dir:\n        validate_output(render_dir)\n        render_dir.mkdir(parents=True, exist_ok=False)\n        status = bpy.ops.render.render(animation=True)\n        verify_render(status, render_dir, frames)\n        print(f\"[prop] frames -> {render_dir}\")\n\n    if receipt:\n        if _sha256(mesh) != source_hash or (_sha256(grade) if grade.is_file() else None) != grade_hash:\n            raise RuntimeError(\"input changed during scene build\")\n        payload = {\n            \"schema_version\": 1, \"blender_version\": bpy.app.version_string,\n            \"source\": {\"path\": str(mesh.absolute()), \"sha256\": source_hash},\n            \"grade\": {\"path\": str(grade.absolute()), \"sha256\": grade_hash},","sourceCodeStart":271,"sourceCodeEnd":307,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/blender_prop.py#L271-L307","documentation":"Save guard in build: Blender's save_as_mainfile call completed but the staged scene file is missing or zero bytes, so publishing the scene via hard link is unsafe. Indicates a Blender save failure or filesystem error.","triggerScenarios":"Thrown at skills/taste-application/scripts/blender_prop.py:289 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check Blender's console output for save errors","Verify write permissions and disk space in the output directory","Retry the build; transient I/O failures are possible"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}