github/spec-kit · error · BundlerError
Extension '{component.id}' not found in any catalog.
Error message
Extension '{component.id}' not found in any catalog. What it means
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.
Source
Thrown at src/specify_cli/bundler/services/primitives.py:283
)
self._manager.install_from_directory(
bundled, speckit_version, priority=priority, force=force
)
return
if not self._allow_network:
raise BundlerError(
f"Extension '{component.id}' is not bundled and network access is "
f"disabled; re-run without --offline or install it first with "
f"'specify extension add {component.id}'."
)
from ...extensions import ExtensionCatalog
catalog = ExtensionCatalog(self._root)
info = catalog.get_extension_info(component.id)
if not info:
raise BundlerError(
f"Extension '{component.id}' not found in any catalog."
)
if not info.get("_install_allowed", True):
raise BundlerError(
f"Extension '{component.id}' is from a discovery-only catalog; "
"installation is not allowed."
)
_assert_pinned_version(
"Extension", component.id, component.version, info.get("version")
)
zip_path = catalog.download_extension(component.id)
try:
self._manager.install_from_zip(
zip_path, speckit_version, priority=priority, force=force
)
finally:
with contextlib.suppress(Exception):
if zip_path.exists():View on GitHub (pinned to bf88c9f9a8)
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.
Defensive patterns
Strategy: validation
Validate before calling
from specify_cli.extensions import ExtensionCatalog
catalog = ExtensionCatalog(project_root)
missing = [c.id for c in plan.components if c.kind == "extensions" and not catalog.get_extension_info(c.id)]
if missing:
print(f"extensions not in any catalog: {missing}"); exit(1) Try / catch
from specify_cli.bundler.core import BundlerError
try:
install_bundle(project_root, plan, installer)
except BundlerError as exc:
if "not found in any catalog" in str(exc):
log.error("add the hosting catalog to project config, or vendor the extension") Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- No project-scoped catalog source matching '{target}' was fou
- Preset '{component.id}' not found in any catalog.
- Extension '{component.id}' is from a discovery-only catalog;
- Malformed catalog config at {path}: expected a mapping at th
- Unsupported catalog config schema version '{str(schema_versi
AI-assisted analysis of github/spec-kit@bf88c9f9a8 (2026-08-14).
Data as JSON: /api/errors/354e20938e652cf2.
Report an issue: GitHub.