Status: Shipped
PR: #121
Depends on: milestones/pipeline-fail-closed.md,
milestones/visual-beats-numeric.md (PR #120)
Composer._run_ffmpeg treated subprocess.TimeoutExpired as
success when the output path already existed and had a non-zero
size. A hung mux could leave a truncated recordings/<stem>.mp4;
compose printed a warning, returned, and counted the segment as
composed. Concat already raises ConcatError on ffmpeg timeout.
Fail closed. A timed-out ffmpeg compose run must raise
ComposeError even when a partial output file exists. Remove the
incomplete file so later stages cannot treat it as a finished
recording.
- Timeout with a partial output raises
ComposeError. - Incomplete output is removed.
- Tests cover timeout with and without an existing output file.
-
ruff check src/ tests/ -
pytest tests/(703 passed, 1 skipped) -
docgen benchmark(no clock change; meets baseline)
- Changing
compose.ffmpeg_timeout_secdefaults. - Duration-probe SKIP when ffprobe is missing (pipeline still fails when mapped segments are not composed).
- Manim render timeouts (already treated as a failed scene, not a successful mp4).