{"record":{"id":"83e6e583478e9ab1","repo":"affaan-m/ECC","slug":"unsupported-mesh-format-suffix","errorCode":null,"errorMessage":"unsupported mesh format: {suffix}","messagePattern":"unsupported mesh format: (.+?)","errorType":"console","errorClass":"SystemExit","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/blender_prop.py","lineNumber":185,"sourceCode":"    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\":\n        bpy.ops.import_scene.fbx(filepath=str(mesh))\n    else:\n        raise SystemExit(f\"unsupported mesh format: {suffix}\")\n\n    objs = [o for o in bpy.context.scene.objects if o.type == \"MESH\"]\n    if not objs:\n        raise SystemExit(f\"no mesh geometry found in {mesh}\")\n\n    mn = mathutils.Vector((float(\"inf\"),) * 3)\n    mx = mathutils.Vector((-float(\"inf\"),) * 3)\n    for o in objs:\n        for c in o.bound_box:\n            w = o.matrix_world @ mathutils.Vector(c)\n            mn = mathutils.Vector(min(mn[i], w[i]) for i in range(3))\n            mx = mathutils.Vector(max(mx[i], w[i]) for i in range(3))\n    validate_bounds(mn, mx)\n    center = (mn + mx) / 2.0\n    radius = max((mx - mn).length / 2.0, 1e-4)\n    print(f\"[prop] {len(objs)} mesh object(s), radius {radius:.4f}\")\n\n    pivot = bpy.data.objects.new(\"turntable_pivot\", None)","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/blender_prop.py#L167-L203","documentation":"Format dispatch guard in build: the mesh file's extension is not one of the supported importers (.glb, .gltf, .obj, .fbx), so no importer can be selected and the build exits before touching Blender state.","triggerScenarios":"Thrown at skills/taste-application/scripts/blender_prop.py:185 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Convert the mesh to .glb, .gltf, .obj, or .fbx with a 3D tool or Blender export","Check the file extension for typos (e.g. .blend is not accepted here)"],"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"}