{"record":{"id":"84ff9a823b0f37b8","repo":"affaan-m/ECC","slug":"receipt-requires-a-saved-out-scene","errorCode":null,"errorMessage":"receipt requires a saved --out scene","messagePattern":"receipt requires a saved --out scene","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/blender_prop.py","lineNumber":164,"sourceCode":"def _sha256(path: Path) -> str:\n    with path.open(\"rb\") as stream:\n        return hashlib.file_digest(stream, \"sha256\").hexdigest()\n\n\ndef build(mesh: Path, pack: Path, out: Path | None, frames: int, size: int,\n          render_dir: Path | None, *, width: int | None = None,\n          height: int | None = None, fps: float = 24,\n          receipt: Path | None = None) -> None:\n    width = size if width is None else width\n    height = size if height is None else height\n    validate_settings(frames, width, height, fps)\n    if not mesh.is_file():\n        raise ValueError(f\"mesh is not a regular file: {mesh}\")\n    for path in (out, receipt, render_dir):\n        if path is not None:\n            validate_output(path)\n    if receipt is not None and out is None:\n        raise ValueError(\"receipt requires a saved --out scene\")\n    if out is not None and out.suffix.lower() != \".blend\":\n        raise ValueError(\"scene output must use .blend extension\")\n    if out is not None and receipt is not None and out.absolute() == receipt.absolute():\n        raise ValueError(\"receipt and scene output must be distinct\")\n    source_hash = _sha256(mesh)\n    grade = pack / \"grade.json\"\n    grade_hash = _sha256(grade) if grade.is_file() else None\n    import bpy\n    import mathutils\n\n    bpy.ops.wm.read_factory_settings(use_empty=True)\n\n    suffix = mesh.suffix.lower()\n    if suffix in (\".glb\", \".gltf\"):\n        bpy.ops.import_scene.gltf(filepath=str(mesh))\n    elif suffix == \".obj\":\n        bpy.ops.wm.obj_import(filepath=str(mesh))\n    elif suffix == \".fbx\":","sourceCodeStart":146,"sourceCodeEnd":182,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/blender_prop.py#L146-L182","documentation":"build() in blender_prop.py requires the --out scene path when --receipt is given, because the receipt records hashes of a saved .blend scene and there is nothing to hash without one.","triggerScenarios":"Thrown at skills/taste-application/scripts/blender_prop.py:164 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add --out scene.blend when requesting --receipt","Omit --receipt if no scene file is needed"],"exampleFix":null,"handlingStrategy":"validation","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"}