{"record":{"id":"1139e174ed646e37","repo":"calesthio/OpenMontage","slug":"invalid-status-status-r","errorCode":null,"errorMessage":"Invalid status: {status!r}","messagePattern":"Invalid status: (.+?)","errorType":"validation","errorClass":"CheckpointValidationError","httpStatus":null,"severity":"error","filePath":"lib/checkpoint.py","lineNumber":182,"sourceCode":"    Falls back to ALL_KNOWN_STAGES when pipeline_type is absent.\n    \"\"\"\n    stage = checkpoint.get(\"stage\")\n    status = checkpoint.get(\"status\")\n    artifacts = checkpoint.get(\"artifacts\")\n    pipeline_type = checkpoint.get(\"pipeline_type\")\n\n    valid_stages = (\n        set(get_pipeline_stages(pipeline_type)) if pipeline_type\n        else ALL_KNOWN_STAGES\n    )\n\n    if not isinstance(stage, str) or stage not in valid_stages:\n        raise CheckpointValidationError(\n            f\"Invalid stage: {stage!r} for pipeline {pipeline_type!r}. \"\n            f\"Valid stages: {sorted(valid_stages)}\"\n        )\n    if not isinstance(status, str):\n        raise CheckpointValidationError(f\"Invalid status: {status!r}\")\n    if not isinstance(artifacts, dict):\n        raise CheckpointValidationError(\"Checkpoint artifacts must be a dictionary\")\n\n    _validate_artifacts_for_stage(stage, status, artifacts)\n\n    try:\n        jsonschema.validate(instance=checkpoint, schema=_load_checkpoint_schema())\n    except jsonschema.ValidationError as exc:\n        raise CheckpointValidationError(f\"Checkpoint failed schema validation: {exc.message}\") from exc\n\n\ndef _checkpoint_path(pipeline_dir: Path, project_id: str, stage: str) -> Path:\n    return pipeline_dir / project_id / f\"checkpoint_{stage}.json\"\n\n\ndef init_project(\n    project_id: str,\n    *,","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/calesthio/OpenMontage/blob/95e1c3d0ab93482159818560f6a8c8e866b9139f/lib/checkpoint.py#L164-L200","documentation":"shutil.which(\"ffprobe\") returned None — ffprobe (part of FFmpeg) is not on PATH, and the tool requires it to measure local/data-URI reference audio duration (2–15s rule). This is an environment dependency check, not an input error.","triggerScenarios":"Running in a minimal Docker image, CI runner, or slim Python environment without ffmpeg installed; a venv/PATH override that drops the directory containing ffprobe.","commonSituations":"Containerized deployments using python:slim or alpine without the ffmpeg package; CI pipelines where ffmpeg is present locally but not in the runner; Nix/asdf environments shadowing PATH.","solutions":["Install FFmpeg: apt-get install -y ffmpeg (Debian/Ubuntu), apk add ffmpeg (Alpine), brew install ffmpeg (macOS).","If installed in a custom location, add its bin directory to PATH for the process.","As a workaround for this one path, use https URLs for audio references — but installing ffprobe is the supported fix."],"exampleFix":"# before (container fails)\ndocker run myapp python -m tool --audio ref.wav\n# after\nRUN apt-get update && apt-get install -y --no-install-recommends ffmpeg","handlingStrategy":"type-guard","validationCode":"import shutil\nassert shutil.which(\"ffprobe\"), \"ffprobe missing: install ffmpeg and ensure it is on PATH\"","typeGuard":"def ffprobe_available() -> bool:\n    import shutil\n    return shutil.which(\"ffprobe\") is not None","tryCatchPattern":"try:\n    tool.run(inputs)\nexcept ValueError as e:\n    if \"ffprobe is required\" in str(e):\n        raise RuntimeError(\"Install ffmpeg (provides ffprobe) and retry; audio refs need it\") from e\n    raise","preventionTips":["Install ffmpeg in every image/environment that touches local reference audio.","Add a startup dependency check for ffprobe in deployment smoke tests."],"tags":["python","environment","ffmpeg","ffprobe","audio","seedance"],"backgroundTag":null,"analyzedSha":"95e1c3d0ab93482159818560f6a8c8e866b9139f","analyzedAt":"2026-08-15T06:31:20.014Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}