El personaje de algodón sonriente del logotipo original de Cotton, sin fondo ni letras
Volver a la sala

Cotton

Translation workflow

Convertir traducciones generadas en resultados revisables.

Un flujo de trabajo de traducción para diálogos de videojuegos.

2026.05.06 — 2026.05.26

Proyecto laboral · procesamiento de traducciones, juicio y ruta de revisión

  • Aplicación webImplementado · desarrollo

Cotton vocabulary

Lens
Refinement Loop
Translation
Quality Estimation
Workflow
Job Control
Human Review
  1. prompt layers
  2. glossary
  3. generation
  4. revision
  1. judge
  2. hard gate
  3. score
  1. intake
  2. checkpoint
  3. spend control
  4. stale sweep
  1. approval
  2. correction
  3. 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.

Mapa del flujo de juicio · según registros de implementación privados
Cotton: juicio de traducciones · reintento · recuperaciónLa API confirma en la base de datos el texto de origen y las configuraciones regionales de destino, y luego pone en cola un trabajo por cada una. Un worker bloquea la fila, comprueba el intento, crea el borrador y el estado de avance, genera una traducción con el glosario y llama por separado a un modelo juez con el mismo glosario. La traducción (Tx1) y el juicio con su evidencia (Tx2) se registran en transacciones distintas. El código agrega el juicio para que el fallo de una hard gate no se compense con la media: un aprobado se finaliza, un fallo obtiene otro turno, el límite de turnos o de costo lo envía a revisión humana, y una señal de cuota o de autenticación detiene el gasto y espera una comprobación de credenciales. Un barrido de inactivos examina hasta 200 borradores de más de 10 minutos: el que aún tiene intentos pero no está en la cola vuelve a ponerse en cola, y el que agotó sus intentos va a revisión o a la comprobación de credenciales según exista o no un resultado.Origen · configuraciones regionales de destinoSegmentos guardadosRevisión humananeeds_review · no es aprobaciónComprobación de credencialesneeds_credentialAPI · registro de trabajosEncolar tras el commitCola de trabajosBullMQ · ID de trabajoEntrada del trabajoBloqueo de fila · comprobación del intentoGlosario · contextoGlosario del espacio de trabajoTurno de traducciónGenerar · llamada al modeloLlamada al modelo juez · análisisReglas de veredictoHard gate · media ponderadaReintento · gastoTurnos · costo · cuotaEstado de la traducciónBorrador · avanceFilas de traducción · de juicioEstado · registro de llamadasFinalizaciónTransacción finalComprobación de la colaComparar el estado de la colaBarrido de inactivosBorradores de más de 10 min · máx. 200Entrada · colaGeneración · juicioEstado · aceptaciónRecuperación · decisión humana1origen2 tras el commit · Encolar tras el commit → BullMQ · ID de trabajo23 entregar el trabajo · BullMQ · ID de trabajo → Bloqueo de fila · comprobación del intento34fila de avance5intento permitido1glosario2 mismo glosario · Glosario del espacio de trabajo → Llamada al modelo juez · análisis23Tx1 · traducción4Tx2 · juicio5 puntuaciones · gates · Llamada al modelo juez · análisis → Hard gate · media ponderada56veredicto7pass8registro final1veredicto2siguiente turno3límite · cancelación4cuota · autenticación5reanudación manual1borrador inactivo2 por debajo del límite · Borradores de más de 10 min · máx. 200 → Comparar el estado de la cola23volver a encolar4 hay resultado · Borradores de más de 10 min · máx. 200 → Revisión humana45sin resultado

Registro → entrada

Se encola tras el commit en la base de datos; un worker bloquea la fila, comprueba el intento y crea el borrador.

  1. Origen · configuraciones regionales de destinoDatos: origenEncolar tras el commitAPI · registro de trabajos

    Los segmentos de origen y las configuraciones regionales de destino del proyecto se guardan en la base de datos. No se muestran datos de clientes.

  2. Encolar tras el commitAPI · registro de trabajosDatos: tras el commitBullMQ · ID de trabajoCola de trabajos

    Tras 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.

  3. BullMQ · ID de trabajoCola de trabajosEjecución · juicio: entregar el trabajoBloqueo de fila · comprobación del intentoEntrada del trabajo

    BullMQ entrega el trabajo a un worker de forma asíncrona.

  4. Bloqueo de fila · comprobación del intentoEntrada del trabajoDatos: fila de avanceBorrador · avanceEstado de la traducción

    Dentro 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.

  5. Bloqueo de fila · comprobación del intentoEntrada del trabajoEjecución · juicio: intento permitidoGenerar · llamada al modeloTurno de traducción

    El 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.

  1. Glosario del espacio de trabajoGlosario · contextoDatos: glosarioGenerar · llamada al modeloTurno de traducción

    Se buscan el glosario y el contexto del espacio de trabajo y se pasan a la generación.

  2. Glosario del espacio de trabajoGlosario · contextoDatos: mismo glosarioLlamada al modelo juez · análisisTurno de traducción

    El juicio recibe las mismas restricciones de glosario.

  3. Generar · llamada al modeloTurno de traducciónDatos: Tx1 · traducciónFilas de traducción · de juicioEstado de la traducción

    Se 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.

  4. Llamada al modelo juez · análisisTurno de traducciónDatos: Tx2 · juicioFilas de traducción · de juicioEstado de la traducción

    Las 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.

  5. Llamada al modelo juez · análisisTurno de traducciónDatos: puntuaciones · gatesHard gate · media ponderadaReglas de veredicto

    La 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.

  6. Hard gate · media ponderadaReglas de veredictoEjecución · juicio: veredictoTurnos · costo · cuotaReintento · gasto

    Cualquier 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.

  7. Turnos · costo · cuotaReintento · gastoEjecución · juicio: passTransacción finalFinalización

    Un aprobado se finaliza como translated.

  8. Transacción finalFinalizaciónDatos: registro finalEstado · registro de llamadasEstado de la traducción

    Se 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.

  1. Hard gate · media ponderadaReglas de veredictoEjecución · juicio: veredictoTurnos · costo · cuotaReintento · gasto

    Cualquier 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.

  2. Turnos · costo · cuotaReintento · gastoEjecución · juicio: siguiente turnoGenerar · llamada al modeloTurno de traducción

    Una 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.

  3. Turnos · costo · cuotaReintento · gastoEjecución · juicio: límite · cancelaciónRevisión humana

    Cuando 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.

  4. Turnos · costo · cuotaReintento · gastoFallo · límite: cuota · autenticaciónComprobación de credenciales

    Una 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.

  5. Comprobación de credencialesEjecución · juicio: reanudación manualBullMQ · ID de trabajoCola de trabajos

    Un 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.

  1. Borrador · avanceEstado de la traducciónObservación · informe: borrador inactivoBorradores de más de 10 min · máx. 200Barrido de inactivos

    Se 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.

  2. Borradores de más de 10 min · máx. 200Barrido de inactivosEjecución · juicio: por debajo del límiteComparar el estado de la colaComprobación de la cola

    Con 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.

  3. Comparar el estado de la colaComprobación de la colaEjecución · juicio: volver a encolarBullMQ · ID de trabajoCola de trabajos

    Si 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.

  4. Borradores de más de 10 min · máx. 200Barrido de inactivosEjecución · juicio: hay resultadoRevisión humana

    Con los 3 intentos usados y un resultado de traducción presente, el trabajo pasa a needs_review.

  5. Borradores de más de 10 min · máx. 200Barrido de inactivosEjecución · juicio: sin resultadoComprobación de credenciales

    Con 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.