
Cotton
Translation workflow
Din traduceri generate, rezultate care pot fi revizuite.
Un flux de lucru pentru traducerea dialogurilor din jocuri.
O condiție de concurență găsită de revizuire, joburi blocate returnate după cauză
Un caz în care politica și commitul îl numesc pe Claude pentru implementare și Codex pentru revizuire și unul care a făcut joburile blocate diagnosticabile.
May 19, 2026
O schimbare care oprește lucrul la epuizarea cotei a fost corectată în același PR, inclusiv condiția de concurență găsită de revizuire
PersoanăPersoană
AcțiuneOprirea cheltuielilor la epuizarea cotei · fără fallback automat
- predareConstrângere de implementare→ Implementarea punctului de control · opririi · reluării manuale (Claude)
Agent de programareClaude
AcțiuneImplementarea punctului de control · opririi · reluării manuale
- predareRevizuire în același PR→ Constatare: condiție de concurență · tranziții de stare duplicate (Codex)
Revizuire · verificareCodex
Observație · constatareConstatare: condiție de concurență · tranziții de stare duplicate
- trimis înapoiConcurență · idempotență→ În același PR: blocare pe rând · cheie unică de scor · tranziție atomică (Același PR)
ArtefacteAcelași PR
ArtefactÎn același PR: blocare pe rând · cheie unică de scor · tranziție atomică
- predare→ Fixture local · înregistrări ale verificării de integrare cu baza de date (Același PR)
ArtefacteAcelași PR
ArtefactFixture local · înregistrări ale verificării de integrare cu baza de date
- nu este o execuție înregistratăDomeniu verificat→ Nu au fost colectate rezultate noi CI sau de implementare în producție (Același PR)
ArtefacteAcelași PR
Regulă · neverificatăNu au fost colectate rezultate noi CI sau de implementare în producție
- Context
- Condiția stabilită de o persoană a fost oprirea cheltuielilor când cota se epuizează, fără fallback automat. Claude a implementat punctul de control, oprirea și reluarea manuală, iar o revizuire Codex rulată prin MCP-ul proiectului a găsit o condiție de concurență și duplicare în tranzițiile de stare.
- Rezultat
- Tranzițiile de intrare și de reluare rulează sub blocare, scorurile judecătorului au o cheie unică împotriva duplicatelor, iar granița tranzacției a fost stabilită. Nu înseamnă că toate condițiile de concurență au fost eliminate.
- Limită
- Commitul menționează 140 de verificări, iar CHANGELOG-ul de integrare ulterior 160, așa că nu sunt reunite într-un singur număr de rulare. Conform politicii, revizuirea Codex este un pas local opțional, deci nu înseamnă că fiecare PR anterior a trecut prin ea.
Surse și limite rămase
- Politica înregistrează ordinea: Claude implementează, Codex revizuiește local prin MCP-ul proiectului, revizuirea este atașată la PR, iar dezacordurile sunt investigate împreună cu agentul de revizuire al lui Claude. Revizuirea Codex automată în CI fusese amânată.
- Verificările de dezvoltare folosesc fixture-uri și mock-uri, iar apelurile reale de model au nevoie de propriul domeniu. Constatările revizuirii sunt incluse în același PR și integrate prin squash merge feature → main.
May 26, 2026
Joburile blocate au fost făcute diagnosticabile și returnate după cauză
Obiectul dezvoltăriiWorker de traducere · coadă
Observație · constatareJoburi rămase în draft · încercări epuizate
- predareValori observate→ Corelarea failedReason · coduri de ieșire · starea draft (Dezvoltator)
PersoanăDezvoltator
AcțiuneCorelarea failedReason · coduri de ieșire · starea draft
- predare→ Cauza: NODE_OPTIONS moștenit intră în conflict în subprocese (Dezvoltator)
PersoanăDezvoltator
Observație · constatareCauza: NODE_OPTIONS moștenit intră în conflict în subprocese
- trimis înapoiConflict de opțiuni moștenite→ Eliminarea NODE_OPTIONS · limită de concurență per proces (Schimbări de cod)
Sesiune de lucruSchimbări de cod
AcțiuneEliminarea NODE_OPTIONS · limită de concurență per proces
- predare→ Starea cozii: waiting · active · failed · stale (Schimbări de cod)
Sesiune de lucruSchimbări de cod
AcțiuneStarea cozii: waiting · active · failed · stale
- predare→ Terificare stale: lipsă din coadă vs încercări consumate, ramificare după existența unui rezultat (Schimbări de cod)
Sesiune de lucruSchimbări de cod
AcțiuneTerificare stale: lipsă din coadă vs încercări consumate, ramificare după existența unui rezultat
- predareUn singur ciclu→ Trecere în dev: 200 de candidați → 106 mutați · 2 repuși în coadă · 0 erori (Artefacte)
ArtefacteArtefacte
ArtefactTrecere în dev: 200 de candidați → 106 mutați · 2 repuși în coadă · 0 erori
- nu este o execuție înregistratăLimita interpretării→ Cele 106 nu sunt traduceri reușite (Artefacte)
ArtefacteArtefacte
Regulă · neverificatăCele 106 nu sunt traduceri reușite
- Context
- Corelarea failedReason din BullMQ, a codurilor de ieșire ale subproceselor și a joburilor rămase în draft a arătat că NODE_OPTIONS moștenit intra în conflict în subprocese. După aceea, aceeași situație a fost făcută vizibilă ca stare a cozii.
- Rezultat
- Joburile blocate sunt împărțite în cele care lipsesc din coadă și cele care și-au consumat încercările; acestea din urmă trec, cu un motiv, în needs_review sau needs_credential, după cum există sau nu un rezultat. Revizuirea umană rămâne în vigoare.
- Limită
- Limita de concurență este per proces. Jurnalele originale ale rulărilor nu au fost disponibile în materialul revizuit; cifrele de latență sunt omise, deoarece modelele cerute și effort-ul nu au fost înregistrate. Codul de build și de release nu este singur o dovadă a implementării publice.
Surse și limite rămase
- CHANGELOG-ul consemnează o propunere de ramuri de adaptor paralele, dar ea nu este transformată într-o înregistrare a unei execuții paralele reale.
- Restul celor 200 nu este detaliat în această înregistrare.