{"record":{"id":"354e20938e652cf2","repo":"github/spec-kit","slug":"extension-component-id-not-found-in-any-catalo","errorCode":null,"errorMessage":"Extension '{component.id}' not found in any catalog.","messagePattern":"Extension '(.+?)' not found in any catalog\\.","errorType":"exception","errorClass":"BundlerError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/bundler/services/primitives.py","lineNumber":283,"sourceCode":"            )\n            self._manager.install_from_directory(\n                bundled, speckit_version, priority=priority, force=force\n            )\n            return\n\n        if not self._allow_network:\n            raise BundlerError(\n                f\"Extension '{component.id}' is not bundled and network access is \"\n                f\"disabled; re-run without --offline or install it first with \"\n                f\"'specify extension add {component.id}'.\"\n            )\n\n        from ...extensions import ExtensionCatalog\n\n        catalog = ExtensionCatalog(self._root)\n        info = catalog.get_extension_info(component.id)\n        if not info:\n            raise BundlerError(\n                f\"Extension '{component.id}' not found in any catalog.\"\n            )\n        if not info.get(\"_install_allowed\", True):\n            raise BundlerError(\n                f\"Extension '{component.id}' is from a discovery-only catalog; \"\n                \"installation is not allowed.\"\n            )\n        _assert_pinned_version(\n            \"Extension\", component.id, component.version, info.get(\"version\")\n        )\n        zip_path = catalog.download_extension(component.id)\n        try:\n            self._manager.install_from_zip(\n                zip_path, speckit_version, priority=priority, force=force\n            )\n        finally:\n            with contextlib.suppress(Exception):\n                if zip_path.exists():","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/bundler/services/primitives.py#L265-L301","documentation":"The extension could not be resolved locally (not bundled), so the bundler consulted ExtensionCatalog and get_extension_info(component.id) returned nothing — the id is unknown to every configured catalog. Only reachable with network allowed, since the offline guard runs first.","triggerScenarios":"A bundle manifest referencing an extension id that no configured catalog contains: unpublished extension, typo, or a catalog source missing from the project's configuration.","commonSituations":"Private extension in a registry the target project has not configured; extension renamed upstream after the bundle was authored; id copied incorrectly into bundle.yml.","solutions":["List what is actually available: `specify extension list` and compare against the id in bundle.yml.","Correct the id in bundle.yml, then validate, rebuild, and reinstall.","Add the missing catalog/registry to the project's extension catalog configuration.","If the extension cannot come from a catalog, vendor it into the bundle artifact at build time."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"from specify_cli.extensions import ExtensionCatalog\n\ncatalog = ExtensionCatalog(project_root)\nmissing = [c.id for c in plan.components if c.kind == \"extensions\" and not catalog.get_extension_info(c.id)]\nif missing:\n    print(f\"extensions not in any catalog: {missing}\"); exit(1)","typeGuard":null,"tryCatchPattern":"from specify_cli.bundler.core import BundlerError\n\ntry:\n    install_bundle(project_root, plan, installer)\nexcept BundlerError as exc:\n    if \"not found in any catalog\" in str(exc):\n        log.error(\"add the hosting catalog to project config, or vendor the extension\")","preventionTips":["Diff bundle.yml extension ids against `specify extension list` in the target environment.","Configure private extension catalogs wherever the bundle is installed.","Vendor extensions into the artifact when catalog availability is uncertain."],"tags":["bundler","extension","catalog","not-found"],"backgroundTag":null,"analyzedSha":"bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c","analyzedAt":"2026-08-14T19:43:37.150Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}