calesthio/OpenMontage · error · FileNotFoundError
Pipeline manifest not found: {path}
Error message
Pipeline manifest not found: {path} What it means
Raised by lib/pipeline_loader.py's load_pipeline() when no {name}.yaml exists in the pipeline definitions directory (defaults to PIPELINE_DEFS_DIR, overridable via defs_dir). The loader resolves the manifest purely by filename inside the defs directory, so any name that doesn't correspond to a checked-in YAML file fails before schema validation runs. The message includes the full resolved path, which tells you exactly which directory was searched.
Source
Thrown at lib/pipeline_loader.py:62
re-parsing YAML + re-validating the schema each call.
"""
return _load_pipeline_cached(name, str(defs_dir) if defs_dir else "")
def load_pipeline(name: str, defs_dir: Optional[Path] = None) -> dict[str, Any]:
"""Load and validate a pipeline manifest by name.
Args:
name: Pipeline name (without .yaml extension).
defs_dir: Override directory for pipeline definitions.
Returns:
Validated pipeline manifest dict.
"""
defs_dir = defs_dir or PIPELINE_DEFS_DIR
path = defs_dir / f"{name}.yaml"
if not path.exists():
raise FileNotFoundError(f"Pipeline manifest not found: {path}")
with open(path, encoding="utf-8") as f:
manifest = yaml.safe_load(f)
schema = _load_manifest_schema()
jsonschema.validate(instance=manifest, schema=schema)
return manifest
def list_pipelines(defs_dir: Optional[Path] = None) -> list[str]:
"""List all available pipeline manifest names."""
defs_dir = defs_dir or PIPELINE_DEFS_DIR
return [p.stem for p in defs_dir.glob("*.yaml")]
def _condition_is_active(condition: Optional[str], context: Optional[dict[str, Any]]) -> bool:
"""Evaluate a simple manifest condition against runtime context."""View on GitHub (pinned to 95e1c3d0ab)
Solutions
- Check the resolved path in the error message and confirm the file actually exists there.
- List available pipelines with list_pipelines() (or list_pipelines(defs_dir=...)) and use an exact name without the .yaml extension.
- If using a custom definitions directory, verify defs_dir points at the folder containing the YAML, and fix the path if it was moved.
Example fix
# before
manifest = load_pipeline("short-form-video") # FileNotFoundError
# after
from lib.pipeline_loader import list_pipelines, load_pipeline
print(list_pipelines()) # see exact valid names
manifest = load_pipeline("short_form_video") Defensive patterns
Strategy: validation
Validate before calling
from lib.pipeline_loader import list_pipelines
available = set(list_pipelines())
if pipeline_name not in available:
raise SystemExit(f"Unknown pipeline {pipeline_name!r}. Available: {sorted(available)}") Type guard
from lib.pipeline_loader import list_pipelines
def pipeline_exists(name: str, defs_dir=None) -> bool:
return name in list_pipelines(defs_dir) Try / catch
try:
manifest = load_pipeline(name)
except FileNotFoundError as e:
# e.args[0] contains the resolved path — report it so the user sees which dir was searched
raise SystemExit(str(e)) from e Prevention
- Pass the bare pipeline name (no .yaml extension).
- When using a custom defs_dir, verify the directory contains the YAML before loading.
- Offer list_pipelines() output in CLI help/usage errors.
When it happens
Trigger: Calling load_pipeline('nonexistent') or with a typo'd pipeline name; passing a custom defs_dir that doesn't contain the manifest; name includes a .yaml extension so the loader looks for name.yaml.yaml; the definitions directory moved or the file was deleted.
Common situations: Typo in a CLI argument or config reference; custom pipeline directory misconfigured; expecting a pipeline that only exists in another checkout/branch; passing the filename with extension.
Related errors
- Playbook not found: {name}
- media not found
- Invalid stage: {stage!r} for pipeline {pipeline_type!r}. Val
- Required environment variable {key!r} is not set
- Unknown profile {name!r}. Available: {available}
AI-assisted analysis of calesthio/OpenMontage@95e1c3d0ab (2026-08-15).
Data as JSON: /api/errors/8eea0786920667f8.
Report an issue: GitHub.