{"record":{"id":"b04fa815465c6ef0","repo":"github/spec-kit","slug":"invalid-extension-manifest-in-downloaded-archive","errorCode":null,"errorMessage":"Invalid extension manifest in downloaded archive: expected YAML mapping","messagePattern":"Invalid extension manifest in downloaded archive: expected YAML mapping","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/extensions/_commands.py","lineNumber":1979,"sourceCode":"                            manifest_path = next(\n                                (\n                                    entry\n                                    for entry in nested_manifest_entries\n                                    if entry.name == \"extension.yml\"\n                                ),\n                                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)","sourceCodeStart":1961,"sourceCodeEnd":1997,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/extensions/_commands.py#L1961-L1997","documentation":"Error \"Invalid extension manifest in downloaded archive: expected YAML mapping\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/extensions/_commands.py:1979 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the extension.yml in the archive so its top level is a YAML mapping."],"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"}