{"record":{"id":"0a44478a3badca53","repo":"github/spec-kit","slug":"preset-pack-id-is-bundled-with-spec-kit-and-ha","errorCode":null,"errorMessage":"Preset '{pack_id}' is bundled with spec-kit and has no download URL. It should be installed from the local package. Use 'specify preset add {pack_id}' to install from the bundled package, or reinstall spec-kit if the bundled files are missing: {REINSTALL_COMMAND}","messagePattern":"Preset '(.+?)' is bundled with spec-kit and has no download URL\\. It should be installed from the local package\\. Use 'specify preset add (.+?)' to install from the bundled package, or reinstall spec-kit if the bundled files are missing: (.+?)","errorType":"exception","errorClass":"PresetError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/presets/__init__.py","lineNumber":4830,"sourceCode":"\n        Returns:\n            Path to the downloaded archive\n\n        Raises:\n            PresetError: If pack not found or download fails\n        \"\"\"\n        import urllib.error\n\n        pack_info = self.get_pack_info(pack_id)\n        if not pack_info:\n            raise PresetError(\n                f\"Preset '{pack_id}' not found in catalog\"\n            )\n\n        # Bundled presets without a download URL must be installed locally\n        if pack_info.get(\"bundled\") and not pack_info.get(\"download_url\"):\n            from ..extensions import REINSTALL_COMMAND\n            raise PresetError(\n                f\"Preset '{pack_id}' is bundled with spec-kit and has no download URL. \"\n                f\"It should be installed from the local package. \"\n                f\"Use 'specify preset add {pack_id}' to install from the bundled package, \"\n                f\"or reinstall spec-kit if the bundled files are missing: {REINSTALL_COMMAND}\"\n            )\n\n        if not pack_info.get(\"_install_allowed\", True):\n            catalog_name = pack_info.get(\"_catalog_name\", \"unknown\")\n            raise PresetError(\n                f\"Preset '{pack_id}' is from the '{catalog_name}' catalog which does not allow installation. \"\n                f\"Use --from with the preset's repository URL instead.\"\n            )\n\n        download_url = pack_info.get(\"download_url\")\n        if not download_url:\n            raise PresetError(\n                f\"Preset '{pack_id}' has no download URL\"\n            )","sourceCodeStart":4812,"sourceCodeEnd":4848,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/presets/__init__.py#L4812-L4848","documentation":"The pack exists but is flagged 'bundled' and carries no download_url. Bundled presets ship inside the spec-kit package itself, so remote download is refused; the error tells you to install locally via 'specify preset add <pack_id>' or reinstall spec-kit if the bundled files went missing.","triggerScenarios":"Calling download_preset_archive() on a pack whose catalog entry has bundled: true and no download_url — typically the built-in presets that come with spec-kit.","commonSituations":"Programmatically downloading every catalog pack and hitting the bundled entries; a broken/partial spec-kit installation where the bundled files are absent even though the catalog entry exists.","solutions":["Install it locally instead: specify preset add <pack_id>","If that fails with missing files, reinstall spec-kit (pip install --force-reinstall spec-kit or the documented REINSTALL_COMMAND) to restore bundled assets","If writing generic tooling, skip entries where bundled is true and no download_url exists"],"exampleFix":"# before\narchive = manager.download_preset_archive(\"bundled-pack\")\n\n# after\n# use the local install path for bundled presets\n# shell: specify preset add bundled-pack","handlingStrategy":"validation","validationCode":"info = manager.get_pack_info(pack_id) or {}\nif info.get(\"bundled\") and not info.get(\"download_url\"):\n    use_local_install(pack_id)  # route to 'specify preset add' instead of download","typeGuard":"def is_local_only_pack(info: dict) -> bool:\n    return bool(info.get(\"bundled\")) and not info.get(\"download_url\")","tryCatchPattern":"try:\n    archive = manager.download_preset_archive(pack_id)\nexcept PresetError as e:\n    if \"bundled with spec-kit\" in str(e):\n        run_cli(\"specify\", \"preset\", \"add\", pack_id)\n    else:\n        raise","preventionTips":["Check the 'bundled' flag in pack info before choosing the download path","Keep spec-kit itself intact so bundled preset files exist (reinstall if pruned)"],"tags":["presets","bundled","install"],"backgroundTag":null,"analyzedSha":"bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c","analyzedAt":"2026-08-14T19:43:37.150Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}