{"record":{"id":"3a9a9e1ea343360f","repo":"github/spec-kit","slug":"bundle-target-is-not-installed","errorCode":null,"errorMessage":"Bundle '{target}' is not installed.","messagePattern":"Bundle '(.+?)' is not installed\\.","errorType":"exception","errorClass":"BundlerError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/commands/bundle/__init__.py","lineNumber":472,"sourceCode":"            raise BundlerError(\"Specify a bundle id or use --all.\")\n        targets = (\n            [r.bundle_id for r in records]\n            if all_bundles\n            else [bundle_id]\n        )\n        if not targets:\n            console.print(\"[yellow]No installed bundles to update.[/yellow]\")\n            return\n\n        stack = _build_stack(project_root, offline=offline)\n        from ...bundler.services.adapters import DefaultPrimitiveInstaller\n        from ...bundler.services.installer import install_bundle\n        from ...bundler.services.resolver import resolve_install_plan\n\n        installer = DefaultPrimitiveInstaller(allow_network=not offline)\n        for target in targets:\n            if not any(r.bundle_id == target for r in records):\n                raise BundlerError(f\"Bundle '{target}' is not installed.\")\n            resolved = stack.resolve(target)\n            if not resolved.install_allowed:\n                raise BundlerError(\n                    f\"Bundle '{target}' resolves only from a discovery-only source \"\n                    f\"('{resolved.source.id}'); it cannot be updated from there. \"\n                    \"Update requires an install-allowed source (FR-025).\"\n                )\n            manifest = _download_manifest(resolved, offline=offline)\n            detected = active_integration(project_root)\n            plan = resolve_install_plan(\n                manifest,\n                speckit_version=_speckit_version(),\n                active_integration=detected if detected is not None else integration,\n                integration_explicit=bool(integration) and detected is None,\n            )\n            install_bundle(project_root, plan, installer, manifest=manifest, refresh=True)\n            console.print(\n                f\"[green]✓[/green] Updated '{_escape_markup(str(target))}' \"","sourceCodeStart":454,"sourceCodeEnd":490,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/commands/bundle/__init__.py#L454-L490","documentation":"During bundle update, the requested target id does not match any record in the project's installed-bundle records (load_records(project_root)). The update loop checks membership before resolving, so an unknown id fails fast with a clear message instead of resolving an arbitrary catalog bundle you never installed.","triggerScenarios":"specify bundle update <id> where <id> is not in the install records under .specify (never installed, installed under a different id, or records were cleared).","commonSituations":"Typo in the bundle id; the bundle was uninstalled; records lost after a manual .specify cleanup; using the catalog name instead of the id the install recorded.","solutions":["List installed bundles (inspect load_records / the recorded bundle ids, e.g. via 'specify bundle list' if available) and use the exact recorded id.","If the bundle is not installed, use 'specify bundle install <id>' instead of update.","If records were lost, reinstall the bundle to re-establish the record."],"exampleFix":"# before\nspecify bundle update my-bundel   # typo\n\n# after\nspecify bundle update my-bundle","handlingStrategy":"validation","validationCode":"records = load_records(project_root)\ninstalled = {r.bundle_id for r in records}\nif bundle_id not in installed:\n    raise SystemExit(f\"Not installed: {bundle_id}. Installed: {sorted(installed)}\")","typeGuard":"def is_installed(bundle_id: str, records) -> bool:\n    return any(r.bundle_id == bundle_id for r in records)","tryCatchPattern":"try:\n    bundle_update(bundle_id, ...)\nexcept BundlerError as exc:\n    if \"is not installed\" in str(exc):\n        # list installed ids and correct the target\n        ...","preventionTips":["Read bundle ids from load_records() instead of typing them from memory.","Copy ids from the original install command output."],"tags":["bundler","update","records","usage"],"backgroundTag":null,"analyzedSha":"bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c","analyzedAt":"2026-08-14T19:43:37.150Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}