{"record":{"id":"e2950282804c1b29","repo":"github/spec-kit","slug":"failed-to-fetch-catalog-from-entry-url-exc","errorCode":null,"errorMessage":"Failed to fetch catalog from {entry.url}: {exc}","messagePattern":"Failed to fetch catalog from (.+?): (.+?)","errorType":"console","errorClass":"IntegrationCatalogError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/integrations/catalog.py","lineNumber":237,"sourceCode":"            try:\n                self.cache_dir.mkdir(parents=True, exist_ok=True)\n                cache_file.write_text(json.dumps(catalog_data, indent=2), encoding=\"utf-8\")\n                cache_meta.write_text(\n                    json.dumps(\n                        {\n                            \"cached_at\": datetime.now(timezone.utc).isoformat(),\n                            \"catalog_url\": entry.url,\n                        },\n                        indent=2,\n                    ),\n                    encoding=\"utf-8\",\n                )\n            except OSError:\n                pass  # Cache is best-effort; proceed with fetched data\n            return catalog_data\n\n        except urllib.error.URLError as exc:\n            raise IntegrationCatalogError(\n                f\"Failed to fetch catalog from {entry.url}: {exc}\"\n            )\n        except UnicodeDecodeError as exc:\n            # A non-UTF-8 response body fails at .decode() before json.loads()\n            # ever runs, so JSONDecodeError below does not cover it (the two are\n            # sibling ValueError subclasses, not parent/child). Without this the\n            # raw UnicodeDecodeError escapes _get_merged_integrations()'s\n            # \"warn and skip this catalog\" handler and kills the whole command.\n            raise IntegrationCatalogError(\n                f\"Catalog from {entry.url} is not valid UTF-8: {exc}\"\n            )\n        except json.JSONDecodeError as exc:\n            raise IntegrationCatalogError(\n                f\"Invalid JSON in catalog from {entry.url}: {exc}\"\n            )\n\n    def _get_merged_integrations(\n        self, force_refresh: bool = False","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/integrations/catalog.py#L219-L255","documentation":"Error \"Failed to fetch catalog from {entry.url}: {exc}\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/integrations/catalog.py:237 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check network connectivity and the catalog URL and credentials, then retry fetching the catalog."],"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"}