
Cotton
Translation workflow
Transformar traduções geradas em resultados revisáveis.
Um fluxo de trabalho de tradução para diálogos de jogos.
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.
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
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)
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)
Revisão · verificaçãoCodex
Observação · achadoAchado: condição de corrida · transições de estado duplicadas
- devolvidoCorrida · idempotência→ No mesmo PR: lock de linha · chave de pontuação única · transição atômica (Mesmo PR)
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)
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)
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
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)
PessoaDesenvolvedor
AçãoCruzar failedReason · códigos de saída · estado de rascunho
- repasse→ Causa: o NODE_OPTIONS herdado entra em conflito nos subprocessos (Desenvolvedor)
PessoaDesenvolvedor
Observação · achadoCausa: o NODE_OPTIONS herdado entra em conflito nos subprocessos
- devolvidoConflito de opção herdada→ Remover NODE_OPTIONS · teto de concorrência por processo (Mudanças de código)
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)
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)
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)
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)
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.