
Cotton
Translation workflow
Convertir traducciones generadas en resultados revisables.
Un flujo de trabajo de traducción para diálogos de videojuegos.
Una condición de carrera hallada en revisión y trabajos estancados devueltos según su causa
Un caso cuya política y cuyos commits nombran a Claude para la implementación y a Codex para la revisión, y otro que hizo diagnosticables los trabajos estancados.
May 19, 2026
Un cambio que se detiene al agotarse la cuota se corrigió en el mismo PR, incluida la condición de carrera hallada en revisión
PersonaPersona
AcciónDetener el gasto al agotarse la cuota · sin fallback automático
- traspasoRestricción de implementación→ Implementar checkpoint · detención · reanudación manual (Claude)
Agente de programaciónClaude
AcciónImplementar checkpoint · detención · reanudación manual
- traspasoRevisión en el mismo PR→ Hallazgo: condición de carrera · transiciones de estado duplicadas (Codex)
Revisión · verificaciónCodex
Observación · hallazgoHallazgo: condición de carrera · transiciones de estado duplicadas
- devueltoCarrera · idempotencia→ En el mismo PR: bloqueo de fila · clave de puntuación única · transición atómica (Mismo PR)
ArtefactosMismo PR
ArtefactoEn el mismo PR: bloqueo de fila · clave de puntuación única · transición atómica
- traspaso→ Fixture local · registros de la comprobación de integración con la BD (Mismo PR)
ArtefactosMismo PR
ArtefactoFixture local · registros de la comprobación de integración con la BD
- no es una ejecución registradaAlcance comprobado→ No se recopilaron nuevos resultados de CI ni de despliegue en producción (Mismo PR)
ArtefactosMismo PR
Regla · sin verificarNo se recopilaron nuevos resultados de CI ni de despliegue en producción
- Contexto
- La condición que fijó una persona era detener el gasto al agotarse la cuota, sin fallback automático. Claude implementó checkpoint, detención y reanudación manual, y una revisión de Codex ejecutada mediante el MCP del proyecto encontró una condición de carrera y duplicación en las transiciones de estado.
- Resultado
- Las transiciones de entrada y de reanudación se ejecutan dentro de un bloqueo, las puntuaciones del juez llevan una clave única contra duplicados, y se fijó la frontera de la transacción. Esto no significa que se hayan eliminado todas las condiciones de carrera.
- Límite
- El commit indica 140 comprobaciones y el CHANGELOG de integración posterior indica 160, así que no se suman en un único número de ejecuciones. Según la política, la revisión de Codex es un paso local opcional, así que esto no significa que todos los PR anteriores pasaran por ella.
Fuentes y límites restantes
- La política registra el orden: Claude implementa, Codex revisa localmente mediante el MCP del proyecto, la revisión se adjunta al PR, y los desacuerdos se investigan junto con el agente de revisión de Claude. La revisión automática de Codex en la CI se había aplazado.
- Las comprobaciones de desarrollo usan fixtures y mocks, y las llamadas reales al modelo necesitan su propio alcance. Los hallazgos de la revisión se incorporan al mismo PR, que se integra con squash merge de feature → main.
May 26, 2026
Los trabajos estancados se hicieron diagnosticables y se devolvieron según su causa
En desarrolloWorker de traducción · cola
Observación · hallazgoTrabajos que quedan en borrador · intentos agotados
- traspasoValores observados→ Cotejar failedReason · códigos de salida · estado de borrador (Desarrollador)
PersonaDesarrollador
AcciónCotejar failedReason · códigos de salida · estado de borrador
- traspaso→ Causa: el NODE_OPTIONS heredado entra en conflicto en los subprocesos (Desarrollador)
PersonaDesarrollador
Observación · hallazgoCausa: el NODE_OPTIONS heredado entra en conflicto en los subprocesos
- devueltoConflicto de opción heredada→ Quitar NODE_OPTIONS · tope de concurrencia por proceso (Cambios de código)
Sesión de trabajoCambios de código
AcciónQuitar NODE_OPTIONS · tope de concurrencia por proceso
- traspaso→ Estado de la cola: waiting · active · failed · stale (Cambios de código)
Sesión de trabajoCambios de código
AcciónEstado de la cola: waiting · active · failed · stale
- traspaso→ Barrido de inactivos: ausente de la cola frente a intentos agotados, según exista o no un resultado (Cambios de código)
Sesión de trabajoCambios de código
AcciónBarrido de inactivos: ausente de la cola frente a intentos agotados, según exista o no un resultado
- traspasoUn ciclo→ Barrido en desarrollo: 200 candidatos → 106 movidos · 2 de nuevo en cola · 0 errores (Artefactos)
ArtefactosArtefactos
ArtefactoBarrido en desarrollo: 200 candidatos → 106 movidos · 2 de nuevo en cola · 0 errores
- no es una ejecución registradaLímite de la interpretación→ Los 106 no son traducciones exitosas (Artefactos)
ArtefactosArtefactos
Regla · sin verificarLos 106 no son traducciones exitosas
- Contexto
- Al cotejar el failedReason de BullMQ, los códigos de salida de los subprocesos y los trabajos que quedaban en borrador, se descubrió que el NODE_OPTIONS heredado entraba en conflicto en los subprocesos. Después, la misma situación se hizo visible como estado de la cola.
- Resultado
- Los trabajos estancados se dividen entre los que no están en la cola y los que agotaron sus intentos; estos últimos pasan, con un motivo, a needs_review o needs_credential según exista o no un resultado. La revisión humana se mantiene.
- Límite
- El tope de concurrencia es por proceso. Los registros originales de ejecución no estaban disponibles en el material revisado; las cifras de latencia se omiten porque no se registraron los modelos ni el esfuerzo solicitados. El código de compilación y de versión por sí solo no es evidencia de un despliegue público.
Fuentes y límites restantes
- El CHANGELOG registra una propuesta de ramas de adaptadores en paralelo, pero no se convierte en registro de una ejecución paralela real.
- El resto de los 200 no se desglosa en este registro.