{"record":{"id":"f8032f53ab9f640b","repo":"github/spec-kit","slug":"downloaded-extension-archive-is-missing-extension","errorCode":null,"errorMessage":"Downloaded extension archive is missing 'extension.yml'","messagePattern":"Downloaded extension archive is missing 'extension\\.yml'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/extensions/_commands.py","lineNumber":1970,"sourceCode":"                                if entry.name.casefold() == \"extension.yml\"\n                            ]\n                            if any(\n                                entry.name != \"extension.yml\"\n                                for entry in nested_manifest_entries\n                            ):\n                                raise ValueError(\n                                    \"Archive must use canonical 'extension.yml' casing\"\n                                )\n                            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                            )","sourceCodeStart":1952,"sourceCodeEnd":1988,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/extensions/_commands.py#L1952-L1988","documentation":"Error \"Downloaded extension archive is missing 'extension.yml'\" thrown in github/spec-kit.","triggerScenarios":"Thrown at src/specify_cli/extensions/_commands.py:1970 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add an 'extension.yml' manifest to the top level of the archive's single root directory."],"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-15T17:31:12.345Z"}