- Se descapó
- 10 de mayo de 2026 a las 4:33 UTC
- Autor
- Kamo
- Compromit
- c0a87b7
Dos modos de falla fueron indistinguibles en la respuesta, por lo que el guión no podía distinguirlos y no podía distinguirlos y siguió "traducando" las mismas llaves del inglés en cada sincronización, con subconjuntos aleatorios que tienen éxito debido a lo cual exacto La solicitud de LibreTranslate ocurrió con tierra durante una reanudación de trabajo: 1. Comprador error (timeout, 5xx, conexión rechazada a mitad de descanso) 2. Proveedor tuvo éxito pero devolvió fuente sin cambios (legit "no traducción necesaria" . . . . . . . . . . . . . . . . . . . . . Ambos terminaron escribiendo la fuente como la traducción. Cambios: * LibreTranslateProvider / BergamotProvider: 3 intentos con 1s/3s backoff para fallos transitorios (5xx, 429, tiempo de espera, conexión errores); 4xx (no-429) se propaga inmediatamente porque volver a intentarlo a La petición malformada nunca ayudará. Solicitud de pedido de tiempo de tiempo de espera = 30s. Lanza el agotamiento en lugar de devolver el texto de origen. * ProviderRouter: ahora distingue "todos los proveedores de apoyo error" (lanza) de "al menos una fuente triunfó pero devuelta" (de transferencia legítima y texto devuelve el texto). Sin apoyos sin cambios. * **************** atrapa excepciones por llave, los recoge en una nueva lista fallida de los teeyes en la respuesta, y omite las llaves fallidas de los mensajes. * BatchTranslateResponse: añade campo fallecoKeys. * translate.ts: lee fracasadoKeys, nunca escribe esas llaves de vuelta, así que el apiTranslated[key] ?? existente [key] revolver deja el anterior Valor Inglés en su lugar - que en la siguiente carrera satisface Cur ===enVal y re-queues exactamente esas llaves para volver a intentar. Pruebas: pruebas de regresión añadidas para "todos los proveedores errores lanzados", "en al menos uno tuvo éxito sin cambios de texto devuelve texto", "router Quédate con el error primario transitorio" y TranslationService particionar correctamente en los mensajes vs fallKeys.