You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[F4-06] Reintentos, errores clasificados y cancelación #67
Que los fallos pasajeros se recuperen solos, que los definitivos se expliquen con claridad y que el usuario pueda parar un proyecto en cualquier momento sin seguir gastando.
Alcance
Reintentos: 3 intentos con backoff exponencial para rate_limit, timeout, unavailable y errores de red, respetando retryAfterMs. auth, safety, quota e invalid_request no se reintentan (UnrecoverableError de BullMQ).
Mensajes: cada code tiene un texto para el usuario en es/en con la acción sugerida (p. ej. auth → "tu clave de OpenAI no es válida: revísala en Ajustes"; safety → "el proveedor bloqueó esta escena: edita su prompt y regenera").
Cancelación:POST /projects/:id/cancel pone el proyecto en cancelled; los trabajos en cola se descartan y los activos reciben un AbortSignal (adaptadores y FFmpeg paran) y quedan cancelled.
Fallo del proyecto: si un paso falla de forma definitiva, el proyecto pasa a failed y no se ejecuta nada más que dependa de él.
Reintento manual:POST /projects/:id/steps/:step/retry y POST /projects/:id/scenes/:n/retry vuelven a poner el paso en pending y llaman a advance.
Criterios de aceptación
Test con fake: dos rate_limit seguidos y después éxito → el paso termina succeeded con attempts = 3.
Test: safety en imagen → la escena queda failed tras 1 intento, con mensaje traducido.
Test: cancelar durante el montaje mata FFmpeg en < 2 s y el proyecto queda cancelled; no se llama a ningún proveedor después.
Test: reintentar manualmente una escena fallida y después el montaje deja el proyecto completed.
Activity