github/spec-kit · error · ValidationError
Manifest not found: {path}
Error message
Manifest not found: {path} What it means
Raised when the extension manifest file does not exist at the expected path (FileNotFoundError caught during load). The expected path is included in the message. This is a missing-file error, not a content error.
Source
Thrown at src/specify_cli/extensions/__init__.py:249
manifest_path: Path to extension.yml file
Raises:
ValidationError: If manifest is invalid
"""
self.path = manifest_path
self.warnings: List[str] = []
self.data = self._load_yaml(manifest_path)
self._validate()
def _load_yaml(self, path: Path) -> dict:
"""Load YAML file safely."""
try:
with open(path, "r", encoding="utf-8") as f:
data = yaml.safe_load(f)
except yaml.YAMLError as e:
raise ValidationError(f"Invalid YAML in {path}: {e}")
except FileNotFoundError:
raise ValidationError(f"Manifest not found: {path}")
except UnicodeDecodeError as e:
raise ValidationError(
f"Manifest is not valid UTF-8: {path} ({e.reason} at byte {e.start})"
)
except OSError as e:
raise ValidationError(f"Could not read manifest {path}: {e}")
if not isinstance(data, dict):
raise ValidationError(
f"Manifest must be a YAML mapping, got {type(data).__name__}: {path}"
)
return data
def _validate(self):
"""Validate manifest structure and required fields."""
# Check required top-level fields
for field in self.REQUIRED_FIELDS:
if field not in self.data:
raise ValidationError(f"Missing required field: {field}")View on GitHub (pinned to bf88c9f9a8)
Solutions
- Verify the path in the error message exists (`ls` its parent).
- If the extension was deleted manually, clean the registration: `specify extension uninstall <key>` (or --force) then reinstall.
- If the install was incomplete, re-run `specify extension install <key>`.
- Ensure you are running from the correct project root.
Defensive patterns
Strategy: validation
Validate before calling
if not manifest_path.is_file():
raise SystemExit(f"missing manifest {manifest_path}; reinstall the extension") Try / catch
except ValidationError as e:
if "Manifest not found" in str(e):
specify_ext_uninstall(key, force=True); specify_ext_install(key) Prevention
- Uninstall extensions through the CLI, never by rm -rf on their directories.
- After git clean or branch switches, re-check .specify/extensions contents.
When it happens
Trigger: ExtensionManifest is constructed for `<extension-dir>/extension.yaml` (or the manifest path recorded in the installed registry) and open() raises FileNotFoundError — e.g. the extension directory was deleted or renamed after installation, or an install was incomplete.
Common situations: Manually deleting an installed extension's folder under .specify/extensions without unregistering it; git clean/checkout removing untracked extension files; a partially failed install; wrong project root (running specify in a directory that never had the extension).
Related errors
- No extension.yml found in {source_path}
- Invalid YAML in {path}: {e}
- Manifest is not valid UTF-8: {path} ({e.reason} at byte {e.s
- Could not read manifest {path}: {e}
- Manifest must be a YAML mapping, got {type(data).__name__}:
AI-assisted analysis of github/spec-kit@bf88c9f9a8 (2026-08-14).
Data as JSON: /api/errors/78b0959131267837.
Report an issue: GitHub.