Audio is extracted into the job's tmp/ and moved into place only after ffprobe confirms a readable duration, so an interrupted run never leaves a plausible-looking stub that later verifies as complete. transcript.json is always written even when not requested: it doubles as the segment cache, which is what lets a deleted subtitle file be re-rendered instead of re-transcribing a two-hour recording. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>