{"record":{"id":"6d2aad569dd0af07","repo":"roboflow/supervision","slug":"opencv-extra-remains-in-wheel-extras","errorCode":null,"errorMessage":"OpenCV extra remains in {wheel}: {extras}","messagePattern":"OpenCV extra remains in (.+?): (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":".github/scripts/verify_clean_wheel.py","lineNumber":46,"sourceCode":"        ]\n        if len(metadata_paths) != 1:\n            raise ValueError(\n                f\"expected one METADATA file in {wheel}, found {metadata_paths}\"\n            )\n        return message_from_bytes(archive.read(metadata_paths[0]))\n\n\ndef _validate_metadata(wheel: Path) -> None:\n    \"\"\"Reject wheels that retain an OpenCV runtime requirement or extra.\"\"\"\n    metadata = _wheel_metadata(wheel)\n    requirements = metadata.get_all(\"Requires-Dist\", [])\n    extras = metadata.get_all(\"Provides-Extra\", [])\n    if any(\"opencv\" in requirement.lower() for requirement in requirements):\n        raise ValueError(\n            f\"OpenCV runtime requirement remains in {wheel}: {requirements}\"\n        )\n    if any(\"opencv\" in extra.lower() for extra in extras):\n        raise ValueError(f\"OpenCV extra remains in {wheel}: {extras}\")\n\n\ndef _validate_manifest(manifest: Path) -> None:\n    \"\"\"Keep the installed-wheel fallback smoke contract explicit and complete.\"\"\"\n    checks = {\n        s\n        for line in manifest.read_text(encoding=\"utf-8\").splitlines()\n        if (s := line.strip()) and not s.startswith(\"#\")\n    }\n    if checks != _MANIFEST_CHECKS:\n        raise ValueError(\n            f\"unexpected fallback manifest {checks}; expected {_MANIFEST_CHECKS}\"\n        )\n\n\ndef _run_installed_wheel_probe(python: Path) -> None:\n    \"\"\"Exercise the installed fallback without allowing the source tree on sys.path.\"\"\"\n    source = \"\"\"","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/roboflow/supervision/blob/7f254d9784d4c37e0f03cd89ddee164c8db099c0/.github/scripts/verify_clean_wheel.py#L28-L64","documentation":"Error \"OpenCV extra remains in {wheel}: {extras}\" thrown in roboflow/supervision.","triggerScenarios":"Thrown at .github/scripts/verify_clean_wheel.py:46 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the opencv extra from the wheel metadata for the clean fallback build.","Update the packaging configuration so extras referencing opencv are not included in this wheel."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7f254d9784d4c37e0f03cd89ddee164c8db099c0","analyzedAt":"2026-08-15T05:13:01.950Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}