The TTS error handling had a bug where failed jobs stayed in
'tts_generating' status instead of being set to 'tts_failed'.
Root cause: synthesize_cue_task used autoretry_for=(Exception,)
which raises the original exception after max retries, not
MaxRetriesExceededError. The exception handler never fired.
Changes:
- tts_synthesis.py: Replace autoretry_for with manual retry logic
that returns a failure dict on final failure instead of raising
- translate_and_synthesize.py: Add propagate=False to group.get()
to safely retrieve all results including failures
- translate_and_synthesize.py: Update outer exception handler to
set job status to tts_failed, store error details, and broadcast
status update via WebSocket
Now TTS failures will:
1. Set job status to 'tts_failed'
2. Store detailed error info (cue index, text, message)
3. Show error in UI with retry button
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>