{"record":{"id":"f481be531c7c1945","repo":"affaan-m/ECC","slug":"asset-requires-verified-alpha-asset","errorCode":null,"errorMessage":"asset requires verified alpha: {asset}","messagePattern":"asset requires verified alpha: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/tasteforge/resolve.py","lineNumber":131,"sourceCode":"        raw_asset = event.get(\"asset\")\n        if not isinstance(raw_asset, (str, Path)) or not str(raw_asset):\n            raise ValueError(\"asset must be a local regular file\")\n        asset = Path(raw_asset).expanduser().resolve()\n        if not asset.is_file():\n            raise ValueError(f\"asset must be a local regular file: {asset}\")\n        alpha = event.get(\"requires_alpha\", False)\n        if not isinstance(alpha, bool):\n            raise ValueError(\"requires_alpha must be boolean\")\n        key = str(asset)\n        if key not in metadata:\n            metadata[key] = probe(asset)\n        info = metadata[key]\n        if _fps(info.get(\"fps\")) != rate:\n            raise ValueError(f\"asset fps differs from timeline: {asset}\")\n        if _integer(info.get(\"frames\"), \"asset frames\", 1) < frames:\n            raise ValueError(f\"asset contains too few frames: {asset}\")\n        if alpha and info.get(\"has_alpha\") is not True:\n            raise ValueError(f\"asset requires verified alpha: {asset}\")\n        checked.append(\n            {\n                \"id\": identifier,\n                \"asset\": key,\n                \"record_frame\": start,\n                \"frames\": frames,\n                \"opacity\": opacity,\n                \"composite\": composite,\n            }\n        )\n    if not checked:\n        raise ValueError(\"at least one placement is required\")\n    ends, allocated = [], {}\n    for event in sorted(checked, key=lambda entry: entry[\"record_frame\"]):\n        index = next(\n            (i for i, end in enumerate(ends) if end <= event[\"record_frame\"]), len(ends)\n        )\n        if index == len(ends):","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/tasteforge/resolve.py#L113-L149","documentation":"When a placement is marked as requiring alpha (alpha=True), tasteforge only trusts an explicit verified has_alpha=True in the asset's probed metadata. Anything else (missing key, false, unverified) throws this error because compositing an opaque asset would silently lose transparency.","triggerScenarios":"allocate_placements called with a placement where alpha is true but the probe result for the asset does not set has_alpha to exactly True (prober doesn't detect alpha, or codec/container has no alpha channel).","commonSituations":"Using ProRes 4444 vs ProRes 422 mistakenly; a probe function that never reports has_alpha; PNG/MOV re-encoded without alpha; passing alpha=True for assets that were never verified on this Resolve host.","solutions":["Verify the asset actually has an alpha channel and fix the probe metadata to report has_alpha=True","Set alpha=False on the placement if transparency is not required","Re-export the asset with an alpha-capable codec (ProRes 4444, PNG sequence)","Update the probe implementation so it detects the codec's alpha support"],"exampleFix":"// before\nplan = allocate_placements([{\"asset\": \"overlay.mov\", \"alpha\": True}], probe=my_probe)  # my_probe omits has_alpha\n// after\nplan = allocate_placements([{\"asset\": \"overlay_prores4444.mov\", \"alpha\": True}], probe=probe_with_alpha_detection)","handlingStrategy":"validation","validationCode":"if placement.get(\"alpha\") and probe(asset).get(\"has_alpha\") is not True:\n    raise ValueError(f\"{asset} lacks verified alpha; re-probe or set alpha=False\")","typeGuard":"def has_verified_alpha(info: dict) -> bool:\n    return info.get(\"has_alpha\") is True","tryCatchPattern":null,"preventionTips":["Only use alpha-capable codecs (ProRes 4444, PNG sequence) for overlays","Make your probe function assert has_alpha explicitly for every asset","Only set alpha=True for assets verified on the target Resolve host","Test one overlay composite before batch applying"],"tags":["validation","media","alpha"],"backgroundTag":"schema-validation-failed","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"}