github/spec-kit · error · BundlerError
No bundle.yml found at '{target}'.
Error message
No bundle.yml found at '{target}'. What it means
_resolve_manifest_path resolves the given path (or the current working directory when omitted); if it is a directory it appends bundle.yml, and then requires the target to exist. This fired because neither the explicit path nor <dir>/bundle.yml (or ./bundle.yml when no path was given) exists on disk.
Source
Thrown at src/specify_cli/commands/bundle/__init__.py:831
f"Invalid YAML in bundle.yml inside '{candidate}': {exc}"
) from exc
return BundleManifest.from_dict(data)
if candidate.name == "bundle.yml" or candidate.suffix in (".yml", ".yaml"):
return BundleManifest.from_file(candidate)
raise BundlerError(
f"'{candidate}' is not a recognised bundle source (.zip artifact, bundle "
"directory, or bundle.yml)."
)
def _resolve_manifest_path(path: Path | None) -> Path:
target = (path or Path.cwd()).resolve()
if target.is_dir():
target = target / "bundle.yml"
if not target.exists():
raise BundlerError(f"No bundle.yml found at '{target}'.")
return target
def _download_manifest(resolved, *, offline: bool):
"""Resolve a bundle's manifest from its catalog ``download_url``.
Catalog ``download_url``s are HTTPS-only (``http`` allowed for localhost),
matching the extensions/presets/workflows catalog systems. Remote URLs are
fetched with the shared authenticated, redirect-validated HTTP client, and
only when not ``--offline``.
Local and ``file://`` sources are intentionally not resolved here: to
install a bundle from disk, pass the path positionally
(``specify bundle install ./path/to/bundle.yml`` — a bundle directory or a
``.zip`` artifact also works), which :func:`_local_manifest_source` handles
before catalog resolution and which never touches ``download_url``.
"""
from urllib.parse import urlparseView on GitHub (pinned to bf88c9f9a8)
Solutions
- cd into the bundle directory (or pass the directory containing bundle.yml) so <dir>/bundle.yml resolves.
- Pass the manifest file explicitly if it is named differently but has .yml/.yaml.
- Ensure bundle.yml exists at the location the command expects.
Example fix
# before specify bundle validate # cwd lacks bundle.yml # after specify bundle validate --path ./my-bundle
Defensive patterns
Strategy: validation
Validate before calling
from pathlib import Path
target = (path or Path.cwd()).resolve()
if target.is_dir():
target = target / "bundle.yml"
if not target.exists():
raise SystemExit(f"No manifest at {target}; run from the bundle directory or pass --path") Type guard
def manifest_path_exists(path: Path | None) -> bool:
target = (path or Path.cwd()).resolve()
if target.is_dir():
target = target / "bundle.yml"
return target.exists() Try / catch
try:
target = _resolve_manifest_path(path)
except BundlerError as exc:
if "No bundle.yml found at" in str(exc):
# cd to the bundle dir or pass the correct --path
... Prevention
- Run path-based bundle commands from inside the bundle directory.
- Keep bundle.yml at the root of the bundle folder.
When it happens
Trigger: Running a bundle command that loads a manifest by path (e.g. validate-style flows) with --path pointing at a directory lacking bundle.yml, or running it with no path from a cwd that has no bundle.yml.
Common situations: Executing the command from the repo root instead of the bundle folder; a renamed bundle.yaml; the file not checked out.
Related errors
- No bundle.yml found in '{bundle_dir}'.
- No bundle.yml found in '{candidate}'.
- '{candidate}' is not a recognised bundle source (.zip artifa
- Manifest must be a YAML mapping at the top level.
- Manifest is missing the required 'bundle' mapping.
AI-assisted analysis of github/spec-kit@bf88c9f9a8 (2026-08-14).
Data as JSON: /api/errors/7b43fc0b356fe26a.
Report an issue: GitHub.