{"record":{"id":"74971560d6ba113b","repo":"github/spec-kit","slug":"invalid-extension-manifest-in-downloaded-archive-749715","errorCode":null,"errorMessage":"Invalid extension manifest in downloaded archive: expected 'extension' mapping","messagePattern":"Invalid extension manifest in downloaded archive: expected 'extension' mapping","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/extensions/_commands.py","lineNumber":1985,"sourceCode":"                                manifest_root / \"extension.yml\",\n                            )\n                        if not manifest_path.is_file():\n                            raise ValueError(\n                                \"Downloaded extension archive is missing 'extension.yml'\"\n                            )\n                        manifest_bytes = manifest_path.read_bytes()\n                        parsed_manifest = yaml.safe_load(manifest_bytes)\n                        manifest_data = (\n                            parsed_manifest if parsed_manifest is not None else {}\n                        )\n                        if not isinstance(manifest_data, dict):\n                            raise ValueError(\n                                \"Invalid extension manifest in downloaded archive: \"\n                                \"expected YAML mapping\"\n                            )\n                        extension_data = manifest_data.get(\"extension\", {})\n                        if not isinstance(extension_data, dict):\n                            raise ValueError(\n                                \"Invalid extension manifest in downloaded archive: \"\n                                \"expected 'extension' mapping\"\n                            )\n\n                    # Run the same manifest and compatibility validation as a\n                    # normal install while the existing extension is still\n                    # untouched. Reuse the exact bounded bytes selected above.\n                    with tempfile.TemporaryDirectory(\n                        prefix=\"speckit-update-manifest-\"\n                    ) as manifest_tmpdir:\n                        manifest_file = Path(manifest_tmpdir) / \"extension.yml\"\n                        manifest_file.write_bytes(manifest_bytes)\n                        preflight_manifest = ExtensionManifest(manifest_file)\n                        manager.check_compatibility(\n                            preflight_manifest, speckit_version\n                        )\n\n                    zip_extension_id = preflight_manifest.id","sourceCodeStart":1967,"sourceCodeEnd":2003,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/extensions/_commands.py#L1967-L2003","documentation":"Error \"Invalid extension manifest in downloaded archive: expected 'extension' mapping\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/extensions/_commands.py:1985 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add the required 'extension' mapping to the manifest inside the archive."],"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"}