
Cotton
Translation workflow
Din traduceri generate, rezultate care pot fi revizuite.
Un flux de lucru pentru traducerea dialogurilor din jocuri.
Cotton vocabulary
- prompt layers
- glossary
- generation
- revision
- judge
- hard gate
- score
- intake
- checkpoint
- spend control
- stale sweep
- approval
- correction
- 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
Scoruri, reîncercări și revizuire umană, fiecare la propria graniță.
Generarea și judecata împart glosarul, iar eșecul unei porți stricte raportat de modelul judecător nu poate fi compensat de scorul mediu. Stările intermediare ale traducerii și judecății sunt înregistrate, limitele de reîncercare și de cost sunt ținute separat de credențialele epuizate, iar joburile blocate revin în coadă sau la revizuire în funcție de cauză.
Acest proiect de lucru leagă într-un singur flux generarea traducerilor, judecata de calitate raportată de model, reîncercările și revizuirea umană.
De la începutul depozitului până la lucrul confirmat în timpul colaborării
O aplicație web cu ecrane de editare și aprobare a traducerilor, un API și un worker pentru joburi, care rulează în mediul de dezvoltare.
Înregistrare → intrare
Pus în coadă după commitul în baza de date; un worker blochează rândul, verifică încercarea și creează draftul.
Sursă · limbi țintăDate: sursăPunere în coadă după commit
API · înregistrarea joburilorSegmentele sursă și limbile țintă ale proiectului sunt stocate în baza de date. Datele clienților nu sunt afișate.
Punere în coadă după commit
API · înregistrarea joburilorDate: după commitBullMQ · ID de jobCoada de joburiDupă commitul în baza de date, pentru fiecare limbă țintă activă este pus în coadă un job cu un ID la nivel de cerere. Dacă punerea în coadă eșuează, se înregistrează doar un avertisment, iar commitul nu este anulat (fără outbox atomic), motiv pentru care există verificarea stale.
BullMQ · ID de job
Coada de joburiRulare · judecată: livrarea jobuluiBlocare pe rând · verificarea încercăriiIntrarea jobuluiBullMQ predă jobul unui worker în mod asincron.
Blocare pe rând · verificarea încercării
Intrarea jobuluiDate: rând de progresDraft · progresStarea traduceriiÎntr-o tranzacție, rândul de progres este blocat și este creată o traducere draft. Reîncercările automate ale joburilor finalizate sau oprite din cauza credențialelor sunt sărite; cererile manuale sunt tratate separat.
Blocare pe rând · verificarea încercării
Intrarea jobuluiRulare · judecată: încercare permisăGenerare · apel de modelTura de traducereNumărul de încercări crește cu unu în limita sa, apoi începe tura de traducere.
Generare → judecată → finalizare
Generarea și judecata folosesc același glosar; traducerea și judecata sunt înregistrate separat, iar codul agregă judecata înainte de finalizare.
Glosarul spațiului de lucru
Glosar · contextDate: glosarGenerare · apel de modelTura de traducereGlosarul și contextul spațiului de lucru sunt căutate și transmise generării.
Glosarul spațiului de lucru
Glosar · contextDate: același glosarApelul modelului judecător · parsareTura de traducereJudecata primește aceleași constrângeri de glosar.
Generare · apel de model
Tura de traducereDate: Tx1 · traducereRânduri de traducere · judecatăStarea traduceriiModelul este apelat direct sau printr-un pivot en-US, iar apelul, evenimentul și progresul sunt scrise într-o singură tranzacție. Dacă jobul rulează din nou după o cădere, apelul de traducere și costul lui se pot repeta.
Apelul modelului judecător · parsare
Tura de traducereDate: Tx2 · judecatăRânduri de traducere · judecatăStarea traduceriiScorurile și dovezile judecătorului sunt inserate o singură dată pentru fiecare traducere și tură; un duplicat găsește rândul existent, iar citările sunt scrise doar la prima inserare. Nu este aceeași tranzacție cu traducerea.
Apelul modelului judecător · parsare
Tura de traducereDate: scoruri · porțiPoartă strictă · medie ponderatăRegulile verdictuluiRăspunsul modelului judecător este parsat în scoruri pe dimensiuni și rezultate ale porților. Dacă glosarul a fost respectat este ceea ce raportează modelul judecător.
Poartă strictă · medie ponderată
Regulile verdictuluiRulare · judecată: verdictTure · cost · cotăReîncercare · cheltuieliOrice eșec raportat al unei porți stricte înseamnă zero și respingere; abia apoi se aplică media ponderată și pragurile pe dimensiuni. Pragul general de 8.0 este o valoare implicită de configurare, nu o calitate observată a traducerii.
Ture · cost · cotă
Reîncercare · cheltuieliRulare · judecată: passTranzacția finalăFinalizareUn rezultat reușit este finalizat ca translated.
Tranzacția finală
FinalizareDate: înregistrare finalăStare · jurnal de apeluriStarea traduceriiCandidatul, starea, scorul și turele sunt finalizate, iar progresul finalized și jurnalul de stare sunt scrise într-o singură tranzacție. Un eveniment de traducere finalizată este emis doar pentru translated.
Reîncercare · limite de cheltuieli
Fără trecere urmează o nouă tură; la limită, revizuire umană; la cotă sau autentificare, cheltuielile se opresc și se așteaptă reluarea de către un operator.
Poartă strictă · medie ponderată
Regulile verdictuluiRulare · judecată: verdictTure · cost · cotăReîncercare · cheltuieliOrice eșec raportat al unei porți stricte înseamnă zero și respingere; abia apoi se aplică media ponderată și pragurile pe dimensiuni. Pragul general de 8.0 este o valoare implicită de configurare, nu o calitate observată a traducerii.
Ture · cost · cotă
Reîncercare · cheltuieliRulare · judecată: tura următoareGenerare · apel de modelTura de traducereO traducere care nu trece este generată din nou împreună cu traducerea și critica anterioare. Chiar și eșecul unei porți stricte poate fi mai întâi reîncercat, în loc să ajungă direct la o persoană.
Ture · cost · cotă
Reîncercare · cheltuieliRulare · judecată: limită · abandonRevizuire umanăCând turele se epuizează sau se atinge plafonul de cost, jobul este finalizat ca needs_review. Finalizat înseamnă că procesarea s-a încheiat, nu că a aprobat-o o persoană.
Ture · cost · cotă
Reîncercare · cheltuieliEșec · limită: cotă · autentificareVerificarea credențialelorUn semnal de cotă sau de autentificare oprește cheltuielile și setează needs_credential. Nu există comutare automată la alt cont sau furnizor. Erorile de transport fără semnal de oprire revin la reîncercarea BullMQ.
Verificarea credențialelorRulare · judecată: reluare manualăBullMQ · ID de job
Coada de joburiUn operator care a verificat credențialele repornește explicit.
Recuperarea joburilor blocate
Drafturile vechi sunt împărțite după motiv: lipsa din coadă înseamnă repunere în coadă, încercările consumate înseamnă o decizie umană.
Draft · progres
Starea traduceriiObservare · raport: draft blocatDrafturi mai vechi de 10 min · max. 200Terificare staleSunt citiți cel mult 200 de candidați aflați în draft de peste 10 minute, începând cu cei mai vechi. Interogarea nu face blocări, iar actualizările și jurnalizarea rulează ca instrucțiuni separate, așa că nu este descrisă ca un lot fără condiții de concurență.
Drafturi mai vechi de 10 min · max. 200
Terificare staleRulare · judecată: sub limităCompararea stării coziiVerificarea coziiCu mai puține încercări decât limita (3), jobul este comparat cu stările de coadă active, waiting, delayed și prioritized. În cod, ramura încercărilor epuizate vine înaintea acestei verificări a cozii.
Compararea stării cozii
Verificarea coziiRulare · judecată: repunere în coadăBullMQ · ID de jobCoada de joburiDacă jobul nu este în coadă, este pus din nou. API-ul folosește ID-uri cu un sufix de cerere, în timp ce trecerea caută ID-ul de segment și de limbă, așa că nu este descrisă ca acoperind fiecare cerere în curs.
Drafturi mai vechi de 10 min · max. 200
Terificare staleRulare · judecată: există rezultatRevizuire umanăCu toate cele 3 încercări consumate și un rezultat de traducere prezent, jobul merge la needs_review.
Drafturi mai vechi de 10 min · max. 200
Terificare staleRulare · judecată: fără rezultatVerificarea credențialelorCu toate cele 3 încercări consumate și fără rezultat, jobul merge la needs_credential.
Fiecare conexiune cu aceeași grosime. Alegeți un flux pentru a evidenția doar traseul lui, cu pași numerotați.
- Continuă · direcția intrărilor, rezultatelor și înregistrărilor
- Întreruptă · rulare, judecată, cerere
- Puncte lungi · observare și raportare, separate de judecată
- Liniuțe scurte · eșec, oprire, limită
- Linie neagră groasă · fluxul selectat; numerele dau ordinea
- Casetă · graniță de cod sau de stare, cu numele în antet
- Etichetă interioară · o componentă a acelei granițe
- Casetă punctată · în afara acelei granițe
- Contur portocaliu · locul în care decide un model
- Generare · cheltuieli · finalizare
- Intrare · regulile verdictului · trecere
- Coadă · stare · înregistrări
- Înregistrare · verificarea cozii
Desenat după înregistrări private de implementare și dezvoltare. Datele clienților și căile de cod nu sunt afișate.
- O singură trecere
- 26 mai 2026, un singur ciclu de trecere în mediul de dezvoltare: 200 verificate, 106 tranziții de stare, 2 repuse în coadă. O tranziție de stare nu este o traducere reușită, iar împărțirea celor 106 pe stările de destinație nu este înregistrată.
- De ce nu exact o singură dată
- Înregistrările sunt scrise fără duplicate, dar dacă un job rulează din nou după o cădere, apelurile de model și costul lor se pot repeta. Limita de concurență este per proces, nu la nivelul întregului cluster.
- Domeniul verdictului
- Faptul că o medie nu poate acoperi un eșec de glosar este o regulă de agregare a porților raportate. Nu dovedește că fiecare termen interzis este găsit sau că calitatea este la nivel de vorbitor nativ.