O personagem de algodão sorridente do logotipo original do Cotton, sem fundo nem letras
Voltar à sala

Cotton

Translation workflow

Transformar traduções geradas em resultados revisáveis.

Um fluxo de trabalho de tradução para diálogos de jogos.

2026.05.06 — 2026.05.26

Projeto de trabalho · processamento de traduções, julgamento e caminho de revisão

  • App webImplementado · desenvolvimento

Uma condição de corrida achada na revisão, jobs travados devolvidos conforme a causa

Um caso cuja política e cujos commits nomeiam Claude para a implementação e Codex para a revisão, e outro que tornou os jobs travados diagnosticáveis.

Legenda completa

Como ler · uma mesma gramática para todos os casos

  • As colunas mostram quem agiu; de cima para baixo, o tempo
  • Contínua: um repasse registrado ou uma próxima etapa
  • ↩ lápis-lazúli grossa: um achado que devolveu o trabalho
  • Tracejada: não é uma execução registrada (uma regra escrita, um conselho sem autoridade, uma fronteira não verificada)
  • Retângulo: uma ação
  • Arredondado: um estado observado ou um achado
  • Canto dobrado: um artefato ou uma evidência
  • Coluna hachurada: partes do produto em desenvolvimento (não os agentes usados para construí-lo)

Caso 1 / 2 · Uma mudança que para quando a cota se esgota foi corrigida no mesmo PR, incluindo a condição de corrida achada na revisão

May 19, 2026

Uma mudança que para quando a cota se esgota foi corrigida no mesmo PR, incluindo a condição de corrida achada na revisão

  1. PessoaPessoa

    AçãoParar os gastos quando a cota se esgota · sem fallback automático

    • repasseRestrição de implementação→ Implementar checkpoint · parada · retomada manual (Claude)
  2. Agente de programaçãoClaude

    AçãoImplementar checkpoint · parada · retomada manual

    • repasseRevisão no mesmo PR→ Achado: condição de corrida · transições de estado duplicadas (Codex)
  3. Revisão · verificaçãoCodex

    Observação · achadoAchado: condição de corrida · transições de estado duplicadas

  4. ArtefatosMesmo PR

    ArtefatoNo mesmo PR: lock de linha · chave de pontuação única · transição atômica

    • repasse→ Fixture local · registros da verificação de integração com o banco (Mesmo PR)
  5. ArtefatosMesmo PR

    ArtefatoFixture local · registros da verificação de integração com o banco

    • não é uma execução registradaEscopo verificado→ Nenhum resultado novo de CI ou de implantação em produção coletado (Mesmo PR)
  6. ArtefatosMesmo PR

    Regra · não verificadaNenhum resultado novo de CI ou de implantação em produção coletado

Contexto
A condição definida por uma pessoa era parar os gastos quando a cota se esgotasse, sem fallback automático. Claude implementou checkpoint, parada e retomada manual, e uma revisão do Codex executada pelo MCP do projeto encontrou uma condição de corrida e duplicação nas transições de estado.
Resultado
As transições de entrada e de retomada rodam dentro de um lock, as pontuações do juiz têm uma chave única contra duplicatas, e a fronteira da transação foi definida. Isso não significa que todas as condições de corrida foram eliminadas.
Limite
O commit cita 140 verificações e o CHANGELOG de integração posterior cita 160, então elas não são somadas em uma única contagem de execuções. Pela política, a revisão do Codex é uma etapa local opcional, então isso não significa que todo PR anterior passou por ela.
Fontes e limites restantes
  • A política registra a ordem: Claude implementa, Codex revisa localmente pelo MCP do projeto, a revisão é anexada ao PR, e as divergências são investigadas junto com o agente de revisão do Claude. A revisão automática do Codex na CI tinha sido adiada.
  • As verificações de desenvolvimento usam fixtures e mocks, e chamadas reais ao modelo precisam de escopo próprio. Os achados da revisão são incorporados ao mesmo PR, que entra por squash merge de feature → main.

May 26, 2026

Os jobs travados se tornaram diagnosticáveis e foram devolvidos conforme a causa

  1. Em desenvolvimentoWorker de tradução · fila

    Observação · achadoJobs deixados em rascunho · tentativas esgotadas

    • repasseValores observados→ Cruzar failedReason · códigos de saída · estado de rascunho (Desenvolvedor)
  2. PessoaDesenvolvedor

    AçãoCruzar failedReason · códigos de saída · estado de rascunho

    • repasse→ Causa: o NODE_OPTIONS herdado entra em conflito nos subprocessos (Desenvolvedor)
  3. PessoaDesenvolvedor

    Observação · achadoCausa: o NODE_OPTIONS herdado entra em conflito nos subprocessos

  4. Sessão de trabalhoMudanças de código

    AçãoRemover NODE_OPTIONS · teto de concorrência por processo

    • repasse→ Estado da fila: waiting · active · failed · stale (Mudanças de código)
  5. Sessão de trabalhoMudanças de código

    AçãoEstado da fila: waiting · active · failed · stale

    • repasse→ Varredura de parados: fora da fila vs tentativas esgotadas, conforme exista um resultado (Mudanças de código)
  6. Sessão de trabalhoMudanças de código

    AçãoVarredura de parados: fora da fila vs tentativas esgotadas, conforme exista um resultado

    • repasseUm ciclo→ Varredura em dev: 200 candidatos → 106 movidos · 2 recolocados na fila · 0 erros (Artefatos)
  7. ArtefatosArtefatos

    ArtefatoVarredura em dev: 200 candidatos → 106 movidos · 2 recolocados na fila · 0 erros

    • não é uma execução registradaLimite da interpretação→ Os 106 não são traduções bem-sucedidas (Artefatos)
  8. ArtefatosArtefatos

    Regra · não verificadaOs 106 não são traduções bem-sucedidas

Contexto
Cruzar o failedReason do BullMQ, os códigos de saída dos subprocessos e os jobs deixados em rascunho mostrou que o NODE_OPTIONS herdado entrava em conflito nos subprocessos. Depois, a mesma situação passou a ser visível como estado da fila.
Resultado
Os jobs travados são separados entre os que não estão na fila e os que esgotaram as tentativas; estes vão, com um motivo, para needs_review ou needs_credential conforme exista um resultado. A revisão humana continua no lugar.
Limite
O teto de concorrência é por processo. Os logs originais de execução não estavam disponíveis no material analisado; os números de latência foram omitidos porque os modelos e o esforço solicitados não foram registrados. Código de build e de release, por si só, não é evidência de implantação pública.
Fontes e limites restantes
  • O CHANGELOG registra uma proposta de branches de adaptadores em paralelo, mas ela não é transformada em registro de execução paralela real.
  • O restante dos 200 não é detalhado neste registro.