{"record":{"id":"9a4461f493e4444e","repo":"github/spec-kit","slug":"bundle-bundle-id-was-not-found-in-any-configur","errorCode":null,"errorMessage":"Bundle '{bundle_id}' was not found in any configured catalog.","messagePattern":"Bundle '(.+?)' was not found in any configured catalog\\.","errorType":"exception","errorClass":"BundlerError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/bundler/services/catalog_stack.py","lineNumber":80,"sourceCode":"            try:\n                raw = self._fetcher(source)\n            except BundlerError:\n                raise\n            except Exception as exc:  # noqa: BLE001 - surface as chained BundlerError\n                raise BundlerError(\n                    f\"Failed to load catalog '{source.id}' ({source.url}): {exc}\"\n                ) from exc\n            self._payloads[source.id] = load_catalog_payload(raw)\n        return self._payloads[source.id]\n\n    def resolve(self, bundle_id: str) -> ResolvedBundle:\n        \"\"\"Return the highest-precedence entry for *bundle_id* or raise.\"\"\"\n        for source in self._sources:\n            entries = self._entries_for(source)\n            entry = entries.get(bundle_id)\n            if entry is not None:\n                return ResolvedBundle(entry=entry.with_provenance(source), source=source)\n        raise BundlerError(\n            f\"Bundle '{bundle_id}' was not found in any configured catalog.\"\n        )\n\n    def search(self, query: str = \"\") -> list[ResolvedBundle]:\n        \"\"\"Return entries matching *query* (substring over id/name/role/tags/description).\n\n        Each bundle id appears once, resolved at its highest-precedence source.\n        Results are sorted by bundle id for deterministic output.\n        \"\"\"\n        needle = query.strip().lower()\n        # Resolve each id to its highest-precedence entry FIRST, then filter by\n        # the query. Claiming an id only when it matches would let a lower-\n        # precedence entry with the same id surface when the highest-precedence\n        # one doesn't match the query — but that shadowed entry is not what\n        # `resolve()`/install would use, so search would advertise a bundle\n        # (name, version, author) the user can never actually get.\n        resolved: dict[str, ResolvedBundle] = {}\n        for source in self._sources:","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/bundler/services/catalog_stack.py#L62-L98","documentation":"Error \"Bundle '{bundle_id}' was not found in any configured catalog.\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/bundler/services/catalog_stack.py:80 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the bundle id for typos and run 'specify bundle search' against configured catalogs, or add a catalog that provides this bundle."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c","analyzedAt":"2026-08-14T19:43:37.150Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}