Un fichier corrompu (RAR/ZIP/PDF qui ne répond plus) occupait un slot de concurrence indéfiniment, bloquant le pipeline à ex. 1517/1521. - Ajoute tokio::time::timeout autour de spawn_blocking(analyze_book) - Timeout lu depuis limits.timeout_seconds en DB (défaut 120s) - Le livre est marqué parse_status='error' en cas de timeout Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>