
Cotton
Translation workflow
Convertir traducciones generadas en resultados revisables.
Un flujo de trabajo de traducción para diálogos de videojuegos.
Cotton vocabulary
- prompt layers
- glossary
- generation
- revision
- judge
- hard gate
- score
- intake
- checkpoint
- spend control
- stale sweep
- approval
- correction
- audit trail
Prompt Layers: SYSTEM_PROMPT_L0 · buildTranslateUserMessage · L1 CONTRACT · L3 SPEAKER · L6 SOURCE · L7 INSTRUCTION · ICU PLACEHOLDER · INLINE TAG · TARGET TEXT ONLY · FORCED MAPPING · L2 GLOSSARY · speaker_keyGlossary: glossary_term · fetchGlossaryHits · canonical_form · forbidden_translations · SUBSTRING MATCH · FORCED MAPPING · FORBIDDEN ALTERNATIVE · L2 GLOSSARY · glossary_hits · glossary_complianceGeneration: AdapterRegistry · anthropic-sdk · openai-sdk · claude-local · codex-local · llm_plan · PIVOT_VIA · shouldPivot · COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · pivot_register_carry · translation.refinedRevision: buildTranslateUserMessage · L7 INSTRUCTION · runRefinementLoop · priorAttempt · priorCritique · REJECTED BY THE JUDGE · maxTurns · willRetry · RefinementHooks · HOOK ABORT · turn_count_to_final · critique_for_retry · failingDimensions · cost_ceiling_usd · needs_reviewJudge: glossary_hits · runJudge · JUDGE_SYSTEM_PROMPT · judgeModel · TEMPERATURE 0 · parseJudgeResponse · FOUR-SECTION XML · VERBATIM CHUNKS · severity · critique_for_retry · judge_citation · missingHardGates · TRIGGER ABSENT = PASS · judge.scoredHard Gate: ICU PLACEHOLDER · INLINE TAG · FORBIDDEN ALTERNATIVE · hard_gate_fail · hardGatePassed · glossary_compliance · cps_budget_compliant · icu_validity · inline_tag_preserved · length_constraint · HARD GATE FIRST · missingHardGates · TRIGGER ABSENT = PASSScore: HARD GATE FIRST · computeVerdict · cottonEvalScore · WEIGHTED AVERAGE · tone_register · personality_consistent · emotional_state_match · cultural_marker_preserved · accuracy · pivot_register_carry · auto_approve_threshold · failingDimensions · approval_gate · judge.scoredIntake: processXlsxBytes · classifySheetName · parseGoogleSheetsUrl · source_file · content_sha256 · extractStageDirection · speaker_key · ingest_session · segment.ingested · github.push.receivedCheckpoint: translation_progress · last_completed_step · turn_translated · turn_judged · finalized · jobEntryGuard · SELECT FOR UPDATE · attempt_count · DEFAULT_MAX_RESUME_ATTEMPTS · TWO-TX SPLIT · ON CONFLICT DO NOTHINGSpend Control: llm_plan · costCap · cost_ceiling_usd · rateLimit · FailoverDispatcher · haltOnQuota · detectQuotaFromStream · quota_daily_exhausted · auth_revoked · NO AUTO-SWAP · needs_credential · POST /:id/resumeStale Sweep: COTTON_ADAPTER_CONCURRENCY · NODE_OPTIONS · attempt_count · runStaleSweep · STALE_THRESHOLD_INTERVAL · DLQ_ATTEMPT_CAP · LIMIT 200 · re_enqueued · dead_lettered · ORPHAN RE-ENQUEUE · IN-FLIGHT SET · /health/queues · maxStalledCount · needs_reviewApproval: auto_approve_threshold · ingest_session · SELECT FOR UPDATE · needs_credential · POST /:id/resume · POST /:id/approve · POST /:id/unapprove · POST /:id/reject · APPROVE_FROM · REJECT_FROM · needs_review · reviewer_id · HITL · approval_gate · translation.approved · EDIT & APPROVE · actor_idCorrection: POST /:id/correct · corrected_text · CORRECT_FROM · EDIT & APPROVE · human_corrected_segments · human-corrected-after-mt · translation.human_corrected · supersedes · NEW REVISION · IMMUTABLE HISTORYAudit Trail: turn_count_to_final · severity · judge_citation · content_sha256 · segment.ingested · github.push.received · translation.approved · human_corrected_segments · translation.human_corrected · IMMUTABLE HISTORY · event_log · appendNextEvent · ULID · AGGREGATE VERSION · translation_state_log · actor_id · llm_call_log · telemetryHook · judge.scored · translation.refined
Puntuaciones, reintentos y revisión humana, cada uno en su propia frontera.
La generación y el juicio comparten el glosario, y el fallo de una hard gate informado por el modelo juez no puede compensarse con la puntuación media. Se registran los estados intermedios de traducción y de juicio, los límites de reintentos y de costo se separan de las credenciales agotadas, y los trabajos estancados vuelven a la cola o a revisión según la causa.
Este proyecto laboral conecta en un solo flujo la generación de traducciones, el juicio de calidad informado por el modelo, los reintentos y la revisión humana.
Desde el inicio del repositorio hasta el trabajo confirmado durante la colaboración
Una aplicación web de pantallas de edición y aprobación de traducciones, una API y un worker de trabajos, que funciona en el entorno de desarrollo.
Registro → entrada
Se encola tras el commit en la base de datos; un worker bloquea la fila, comprueba el intento y crea el borrador.
Origen · configuraciones regionales de destinoDatos: origenEncolar tras el commit
API · registro de trabajosLos segmentos de origen y las configuraciones regionales de destino del proyecto se guardan en la base de datos. No se muestran datos de clientes.
Encolar tras el commit
API · registro de trabajosDatos: tras el commitBullMQ · ID de trabajoCola de trabajosTras el commit en la base de datos, se pone en cola un trabajo con un ID propio de la solicitud por cada configuración regional de destino activa. Si falla el encolado, solo se registra una advertencia y el commit no se revierte (no hay outbox atómico); por eso existe el barrido de inactivos.
BullMQ · ID de trabajo
Cola de trabajosEjecución · juicio: entregar el trabajoBloqueo de fila · comprobación del intentoEntrada del trabajoBullMQ entrega el trabajo a un worker de forma asíncrona.
Bloqueo de fila · comprobación del intento
Entrada del trabajoDatos: fila de avanceBorrador · avanceEstado de la traducciónDentro de una transacción se bloquea la fila de avance y se crea una traducción en borrador. Se omiten los reintentos automáticos de trabajos finalizados o pausados por credenciales; las solicitudes manuales se tratan aparte.
Bloqueo de fila · comprobación del intento
Entrada del trabajoEjecución · juicio: intento permitidoGenerar · llamada al modeloTurno de traducciónEl número de intentos sube en uno dentro de su límite y luego empieza el turno de traducción.
Generar → juzgar → finalizar
La generación y el juicio usan el mismo glosario; la traducción y el juicio se registran por separado, y el código agrega el juicio antes de finalizar.
Glosario del espacio de trabajo
Glosario · contextoDatos: glosarioGenerar · llamada al modeloTurno de traducciónSe buscan el glosario y el contexto del espacio de trabajo y se pasan a la generación.
Glosario del espacio de trabajo
Glosario · contextoDatos: mismo glosarioLlamada al modelo juez · análisisTurno de traducciónEl juicio recibe las mismas restricciones de glosario.
Generar · llamada al modelo
Turno de traducciónDatos: Tx1 · traducciónFilas de traducción · de juicioEstado de la traducciónSe llama al modelo directamente o mediante un pivote en-US, y la llamada, el evento y el avance se escriben en una sola transacción. Si el trabajo vuelve a ejecutarse tras una caída, la llamada de traducción y su costo pueden repetirse.
Llamada al modelo juez · análisis
Turno de traducciónDatos: Tx2 · juicioFilas de traducción · de juicioEstado de la traducciónLas puntuaciones y la evidencia del juez se insertan una vez por traducción y turno; un duplicado encuentra la fila existente, y las citas solo se escriben en la primera inserción. No es la misma transacción que la traducción.
Llamada al modelo juez · análisis
Turno de traducciónDatos: puntuaciones · gatesHard gate · media ponderadaReglas de veredictoLa respuesta del modelo juez se analiza en puntuaciones por dimensión y resultados de gates. Si el glosario pasó es lo que informa el modelo juez.
Hard gate · media ponderada
Reglas de veredictoEjecución · juicio: veredictoTurnos · costo · cuotaReintento · gastoCualquier fallo de hard gate informado supone un cero y un fallo; solo después se aplican la media ponderada y los umbrales por dimensión. El umbral global de 8.0 es un valor de configuración por defecto, no una calidad de traducción observada.
Turnos · costo · cuota
Reintento · gastoEjecución · juicio: passTransacción finalFinalizaciónUn aprobado se finaliza como translated.
Transacción final
FinalizaciónDatos: registro finalEstado · registro de llamadasEstado de la traducciónSe finalizan el candidato, el estado, la puntuación y los turnos, y el avance finalized y el registro de estado se escriben en una sola transacción. Solo se emite un evento de traducción completada para translated.
Reintentos · límites de gasto
Sin aprobado, otro turno; con un límite, revisión humana; con cuota o autenticación, se detiene el gasto a la espera de que un operador reanude.
Hard gate · media ponderada
Reglas de veredictoEjecución · juicio: veredictoTurnos · costo · cuotaReintento · gastoCualquier fallo de hard gate informado supone un cero y un fallo; solo después se aplican la media ponderada y los umbrales por dimensión. El umbral global de 8.0 es un valor de configuración por defecto, no una calidad de traducción observada.
Turnos · costo · cuota
Reintento · gastoEjecución · juicio: siguiente turnoGenerar · llamada al modeloTurno de traducciónUna traducción que no pasa se vuelve a generar con la traducción anterior y la crítica. Incluso un fallo de hard gate puede reintentarse primero en lugar de ir directamente a una persona.
Turnos · costo · cuota
Reintento · gastoEjecución · juicio: límite · cancelaciónRevisión humanaCuando se agotan los turnos o se alcanza el tope de costo, el trabajo se finaliza como needs_review. Finalizado significa que el procesamiento terminó, no que una persona lo aprobara.
Turnos · costo · cuota
Reintento · gastoFallo · límite: cuota · autenticaciónComprobación de credencialesUna señal de cuota o de autenticación detiene el gasto y fija needs_credential. No hay cambio automático a otra cuenta ni a otro proveedor. Los errores de transporte sin señal de detención vuelven a los reintentos de BullMQ.
Comprobación de credencialesEjecución · juicio: reanudación manualBullMQ · ID de trabajo
Cola de trabajosUn operador que ha comprobado las credenciales reinicia de forma explícita.
Recuperación de trabajos inactivos
Los borradores antiguos se separan por motivo: si no están en la cola, se vuelven a encolar; si agotaron los intentos, pasan a una decisión humana.
Borrador · avance
Estado de la traducciónObservación · informe: borrador inactivoBorradores de más de 10 min · máx. 200Barrido de inactivosSe leen hasta 200 candidatos que llevan más de 10 minutos en borrador, primero los más antiguos. La consulta no toma ningún bloqueo y las actualizaciones y los registros se ejecutan como sentencias separadas, así que no se describe como un lote libre de condiciones de carrera.
Borradores de más de 10 min · máx. 200
Barrido de inactivosEjecución · juicio: por debajo del límiteComparar el estado de la colaComprobación de la colaCon menos intentos que el límite (3), el trabajo se compara con los estados de cola active, waiting, delayed y prioritized. En el código, la rama de intentos agotados va antes de esta comprobación de la cola.
Comparar el estado de la cola
Comprobación de la colaEjecución · juicio: volver a encolarBullMQ · ID de trabajoCola de trabajosSi el trabajo no está en la cola, se vuelve a encolar. La API usa ID con un sufijo de solicitud mientras que el barrido busca el ID de segmento y de configuración regional, así que no se describe como coincidente con todas las solicitudes en curso.
Borradores de más de 10 min · máx. 200
Barrido de inactivosEjecución · juicio: hay resultadoRevisión humanaCon los 3 intentos usados y un resultado de traducción presente, el trabajo pasa a needs_review.
Borradores de más de 10 min · máx. 200
Barrido de inactivosEjecución · juicio: sin resultadoComprobación de credencialesCon los 3 intentos usados y sin resultado, el trabajo pasa a needs_credential.
Todas las conexiones con el mismo grosor. Elija un flujo para resaltar solo su recorrido, con pasos numerados.
- Continua · dirección de entradas, resultados y registros
- Discontinua · ejecución, juicio, solicitud
- Puntos largos · observación e informe, aparte del juicio
- Guiones cortos · fallo, parada, límite
- Línea negra gruesa · el flujo seleccionado; los números dan el orden
- Recuadro · frontera de código o de estado, con su nombre en la cabecera
- Chip interior · componente de esa frontera
- Recuadro punteado · fuera de esa frontera
- Contorno naranja · donde decide un modelo
- Generación · gasto · finalización
- Entrada · reglas de veredicto · barrido
- Cola · estado · registros
- Registro · comprobación de la cola
Dibujado a partir de registros privados de implementación y desarrollo. No se muestran datos de clientes ni rutas de código.
- Un barrido
- May 26, 2026, un ciclo de barrido en el entorno de desarrollo: 200 revisados, 106 transiciones de estado, 2 de nuevo en cola. Una transición de estado no es una traducción exitosa, y el reparto de los 106 por estado de destino no está registrado.
- Por qué no exactamente una vez
- Los registros se escriben sin duplicados, pero si un trabajo vuelve a ejecutarse tras una caída, las llamadas al modelo y su costo pueden repetirse. El límite de concurrencia es por proceso, no para todo el clúster.
- Alcance del veredicto
- Impedir que una media oculte un fallo de glosario es una regla de agregación sobre las gates informadas. No demuestra que se encuentre cada término prohibido ni que la calidad sea de nivel nativo.