{"record":{"id":"f8d388dcdb820ee2","repo":"github/spec-kit","slug":"no-extension-yml-found-in-source-path","errorCode":null,"errorMessage":"No extension.yml found in {source_path}","messagePattern":"No extension\\.yml found in (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/specify_cli/commands/init.py","lineNumber":124,"sourceCode":"\n    # --- URL ---\n    parsed = urlparse(ext_spec)\n    if parsed.scheme in (\"http\", \"https\"):\n        try:\n            manifest = install_extension_from_url(\n                manager, project_path, ext_spec, speckit_version\n            )\n        except ExtensionError as exc:\n            raise ValueError(str(exc)) from exc\n        return f\"{manifest.name} v{manifest.version} installed\"\n\n    # --- Local path ---\n    if ext_spec.startswith((\"./\", \"../\", \"/\", \"~/\", \".\\\\\", \"..\\\\\")) or Path(ext_spec).is_absolute():\n        source_path = Path(ext_spec).expanduser().resolve()\n        if not source_path.exists():\n            raise ValueError(f\"Directory not found: {source_path}\")\n        if not (source_path / \"extension.yml\").exists():\n            raise ValueError(f\"No extension.yml found in {source_path}\")\n        manifest = manager.install_from_directory(source_path, speckit_version)\n        return f\"{manifest.name} v{manifest.version} installed\"\n\n    # --- Bundled extension name or catalog ID ---\n    bundled_path = _locate_bundled_extension(ext_spec)\n    if bundled_path is not None:\n        if manager.registry.is_installed(ext_spec):\n            return \"already installed\"\n        manifest = manager.install_from_directory(bundled_path, speckit_version)\n        return f\"{manifest.name} v{manifest.version} installed\"\n\n    # Fall back to catalog\n    catalog = ExtensionCatalog(project_path)\n    ext_info, catalog_error = _resolve_catalog_extension(ext_spec, catalog, \"add\")\n    if catalog_error:\n        raise ValueError(f\"Could not query extension catalog: {catalog_error}\")\n    if not ext_info:\n        raise ValueError(f\"Extension '{ext_spec}' not found in bundled extensions or catalog\")","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/github/spec-kit/blob/bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c/src/specify_cli/commands/init.py#L106-L142","documentation":"A local directory passed to `specify init --extension ./path` must contain a top-level extension.yml. If the directory exists but that manifest is absent, Spec Kit raises ValueError and fails that extension step before installing anything.","triggerScenarios":"The resolved source directory exists but contains extension.yaml, manifest.yml, or extension.yml nested in a subdirectory instead of a root-level extension.yml.","commonSituations":"The file was named with the .yaml suffix, the user pointed at the repository root while the extension lives in a subdirectory, or the manifest was never created.","solutions":["List the directory shown in the error and confirm whether the manifest is missing, nested, or differently named.","Move/rename the manifest so `<source_path>/extension.yml` exists exactly.","Point --extension at the directory that directly contains extension.yml.","Create a minimal valid extension.yml if this is a new extension."],"exampleFix":"# before\nmy-ext/\n  extension.yaml\n\n# after\nmy-ext/\n  extension.yml","handlingStrategy":"validation","validationCode":"from pathlib import Path\n\ndef extension_dir_has_manifest(path: Path) -> bool:\n    return path.is_dir() and (path / \"extension.yml\").is_file()","typeGuard":null,"tryCatchPattern":"try:\n    _install_extension_during_init(project_path, ext_spec, version)\nexcept ValueError as exc:\n    if str(exc).startswith(\"No extension.yml\"):\n        show_expected_layout(ext_spec)\n    else:\n        raise","preventionTips":["Use exactly extension.yml at the source directory root.","Add a repository lint that rejects extension.yaml or nested manifests.","Point at the directory containing the manifest, not its parent."],"tags":["init","extensions","filesystem","manifest"],"backgroundTag":null,"analyzedSha":"bf88c9f9a82fa370c7a7257aa2b3cf10b457b65c","analyzedAt":"2026-08-14T19:43:37.150Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}