Personaggio sorridente di cotone dal logo originale di Cotton, senza sfondo e scritta
Torna alla sala

Cotton

Translation workflow

Trasformare traduzioni generate in risultati verificabili.

Un workflow di traduzione per i dialoghi di gioco.

2026.05.06 — 2026.05.26

Progetto di lavoro · elaborazione delle traduzioni, giudizio e percorso di revisione

  • App webImplementato · sviluppo

Una race condition trovata dalla revisione, job bloccati rimandati per causa

Un caso in cui regola e commit indicano Claude per l’implementazione e Codex per la revisione, e uno che ha reso diagnosticabili i job bloccati.

Legenda completa

Come leggere · una grammatica per ogni caso

  • Le colonne indicano chi ha agito; dall’alto in basso scorre il tempo
  • Continua: un passaggio di consegne registrato o un passo successivo
  • Linea lapislazzuli spessa ↩: un rilievo che ha rimandato indietro il lavoro
  • Tratteggiata: non un’esecuzione registrata (una regola scritta, un consiglio senza autorità, un confine non verificato)
  • Rettangolo: un’azione
  • Arrotondato: uno stato osservato o un rilievo
  • Angolo piegato: un artefatto o una prova
  • Colonna a righe oblique: parti del prodotto in sviluppo (non gli agenti usati per costruirlo)

Caso 1 / 2 · Una modifica che si ferma all’esaurimento della quota è stata corretta nella stessa PR, inclusa la race condition trovata dalla revisione

May 19, 2026

Una modifica che si ferma all’esaurimento della quota è stata corretta nella stessa PR, inclusa la race condition trovata dalla revisione

  1. PersonaPersona

    AzioneFermare la spesa all’esaurimento della quota · nessun fallback automatico

    • consegnaVincolo di implementazione→ Implementare checkpoint · halt · ripresa manuale (Claude)
  2. Agente di programmazioneClaude

    AzioneImplementare checkpoint · halt · ripresa manuale

    • consegnaRevisione nella stessa PR→ Rilievo: race condition · transizioni di stato duplicate (Codex)
  3. Revisione · verificaCodex

    Osservazione · rilievoRilievo: race condition · transizioni di stato duplicate

  4. ArtefattiStessa PR

    ArtefattoNella stessa PR: row lock · chiave univoca del punteggio · transizione atomica

    • consegna→ Fixture locale · registri del controllo d’integrazione del DB (Stessa PR)
  5. ArtefattiStessa PR

    ArtefattoFixture locale · registri del controllo d’integrazione del DB

    • non un’esecuzione registrataAmbito verificato→ Nessun nuovo risultato di CI o di deployment in produzione raccolto (Stessa PR)
  6. ArtefattiStessa PR

    Regola · non verificataNessun nuovo risultato di CI o di deployment in produzione raccolto

Contesto
La condizione posta da una persona era fermare la spesa all’esaurimento della quota, senza fallback automatico. Claude ha implementato checkpoint, halt e ripresa manuale, e una revisione di Codex eseguita tramite l’MCP del progetto ha trovato una race condition e duplicazioni nelle transizioni di stato.
Esito
Le transizioni di ingresso e di ripresa avvengono all’interno di un lock, i punteggi del giudice hanno una chiave univoca contro i duplicati, e il confine della transazione è stato fissato. Ciò non significa che ogni race condition sia stata eliminata.
Limite
Il commit riporta 140 controlli e il successivo CHANGELOG d’integrazione 160, quindi non vengono uniti in un unico conteggio di esecuzioni. Secondo la regola, la revisione di Codex è un passaggio locale facoltativo, quindi ciò non significa che ogni PR passata l’abbia ricevuta.
Fonti e limiti residui
  • La regola fissa l’ordine: Claude implementa, Codex rivede in locale tramite l’MCP del progetto, la revisione viene allegata alla PR, e i disaccordi vengono esaminati insieme all’agente di revisione di Claude. La revisione automatica di Codex in CI era stata rimandata.
  • I controlli di sviluppo usano fixture e mock, e le chiamate reali al modello richiedono un ambito proprio. I rilievi della revisione confluiscono nella stessa PR e vengono uniti con squash merge feature → main.

May 26, 2026

Resi diagnosticabili i job bloccati e rimandati per causa

  1. In sviluppoWorker di traduzione · coda

    Osservazione · rilievoJob rimasti in draft · tentativi esauriti

    • consegnaValori osservati→ Confronto tra failedReason · codici di uscita · stato draft (Sviluppatore)
  2. PersonaSviluppatore

    AzioneConfronto tra failedReason · codici di uscita · stato draft

    • consegna→ Causa: le NODE_OPTIONS ereditate entrano in conflitto nei subprocessi (Sviluppatore)
  3. PersonaSviluppatore

    Osservazione · rilievoCausa: le NODE_OPTIONS ereditate entrano in conflitto nei subprocessi

  4. Sessione di lavoroModifiche al codice

    AzioneRimozione di NODE_OPTIONS · tetto di concorrenza per processo

    • consegna→ Stato della coda: waiting · active · failed · stale (Modifiche al codice)
  5. Sessione di lavoroModifiche al codice

    AzioneStato della coda: waiting · active · failed · stale

    • consegna→ Stale sweep: assente dalla coda vs tentativi esauriti, con diramazione in base all’esistenza di un risultato (Modifiche al codice)
  6. Sessione di lavoroModifiche al codice

    AzioneStale sweep: assente dalla coda vs tentativi esauriti, con diramazione in base all’esistenza di un risultato

    • consegnaUn ciclo→ Sweep di sviluppo: 200 candidati → 106 spostati · 2 rimessi in coda · 0 errori (Artefatti)
  7. ArtefattiArtefatti

    ArtefattoSweep di sviluppo: 200 candidati → 106 spostati · 2 rimessi in coda · 0 errori

    • non un’esecuzione registrataLimite dell’interpretazione→ I 106 job non sono traduzioni riuscite (Artefatti)
  8. ArtefattiArtefatti

    Regola · non verificataI 106 job non sono traduzioni riuscite

Contesto
Confrontando il failedReason di BullMQ, i codici di uscita dei subprocessi e i job rimasti in draft si è scoperto che le NODE_OPTIONS ereditate entravano in conflitto nei subprocessi. In seguito la stessa situazione è stata resa visibile come stato della coda.
Esito
I job bloccati sono divisi tra quelli assenti dalla coda e quelli che hanno esaurito i tentativi; questi ultimi passano, con un motivo, a needs_review o needs_credential a seconda che esista un risultato. La revisione umana resta in vigore.
Limite
Il tetto di concorrenza è per processo. I log originali delle esecuzioni non erano disponibili nel materiale esaminato; i dati di latenza sono omessi perché i modelli richiesti e l’effort non sono stati registrati. Il solo codice di build e rilascio non è prova di un deployment pubblico.
Fonti e limiti residui
  • Il CHANGELOG riporta una proposta di branch paralleli degli adapter, ma non viene trasformata in un registro di esecuzione parallela effettiva.
  • Il resto dei 200 non è dettagliato in questo registro.