
Cotton
Translation workflow
Genererte oversettelser gjøres om til resultater som kan gjennomgås.
En oversettelsesarbeidsflyt for spilldialog.
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
Score, nye forsøk og menneskelig gjennomgang, hver ved sin egen grense.
Generering og vurdering deler ordlisten, og en hard gate-feil rapportert av bedømmermodellen kan ikke oppveies av gjennomsnittsscoren. Mellomtilstander for oversettelse og vurdering registreres, grenser for nye forsøk og kostnad holdes atskilt fra oppbrukt påloggingsinformasjon, og hengende jobber går tilbake til køen eller til gjennomgang avhengig av årsaken.
Dette arbeidsprosjektet kobler sammen generering av oversettelser, kvalitetsvurdering rapportert av en modell, nye forsøk og menneskelig gjennomgang i én flyt.
Fra starten av repositoryet til arbeidet som er bekreftet i oppdragsperioden
En nettapp med skjermer for redigering og godkjenning av oversettelser, et API og en jobb-worker, som kjører i utviklingsmiljøet.
Registrering → inngang
Legges i kø etter commit til databasen; en worker låser raden, kontrollerer forsøket og oppretter draften.
Kilde · målspråkData: kildeLegg i kø etter commit
API · jobbregistreringKildesegmenter og prosjektets målspråk lagres i databasen. Kundedata vises ikke.
Legg i kø etter commit
API · jobbregistreringData: etter commitBullMQ · jobb-IDJobbkøEtter commit til databasen legges én jobb per aktivt målspråk i kø med en ID som er fastsatt per forespørsel. Mislykkes det, logges bare en advarsel, og commiten rulles ikke tilbake (ingen atomisk outbox); derfor finnes oppryddingen av hengende jobber.
BullMQ · jobb-ID
JobbkøKjøring · vurdering: lever jobbRadlås · kontroll av forsøkInngang til jobbBullMQ overleverer jobben asynkront til en worker.
Radlås · kontroll av forsøk
Inngang til jobbData: framdriftsradDraft · framdriftOversettelsestilstandInnenfor en transaksjon låses framdriftsraden, og en draft-oversettelse opprettes. Automatiske nye forsøk for jobber som er ferdigstilt eller satt på pause på grunn av påloggingsinformasjon, hoppes over; manuelle forespørsler håndteres separat.
Radlås · kontroll av forsøk
Inngang til jobbKjøring · vurdering: forsøk tillattGenerer · modellkallOversettelsesturAntallet forsøk økes med én innenfor grensen, og deretter starter oversettelsesturen.
Generer → vurder → ferdigstill
Generering og vurdering bruker den samme ordlisten; oversettelsen og vurderingen registreres hver for seg, og koden aggregerer vurderingen før ferdigstillingen.
Workspace-ordliste
Ordliste · kontekstData: ordlisteGenerer · modellkallOversettelsesturWorkspace-ordlisten og konteksten slås opp og sendes videre til genereringen.
Workspace-ordliste
Ordliste · kontekstData: samme ordlisteKall til bedømmermodell · parsingOversettelsesturVurderingen får de samme begrensningene fra ordlisten.
Generer · modellkall
OversettelsesturData: Tx1 · oversettelseRader for oversettelse · vurderingOversettelsestilstandModellen kalles direkte eller via en en-US-pivot, og kall, hendelse og framdrift skrives i én transaksjon. Hvis jobben kjører på nytt etter et krasj, kan oversettelseskallet og kostnaden gjentas.
Kall til bedømmermodell · parsing
OversettelsesturData: Tx2 · vurderingRader for oversettelse · vurderingOversettelsestilstandBedømmerens score og belegg settes inn én gang per oversettelse og tur; et duplikat finner den eksisterende raden, og sitater skrives bare ved første innsetting. Ikke samme transaksjon som oversettelsen.
Kall til bedømmermodell · parsing
OversettelsesturData: score · gatesHard gate · vektet gjennomsnittDomsreglerSvaret fra bedømmermodellen parses til score per dimensjon og gate-resultater. Om ordlisten ble overholdt, er det bedømmermodellen som rapporterer.
Hard gate · vektet gjennomsnitt
DomsreglerKjøring · vurdering: domTurer · kostnad · kvoteNye forsøk · forbrukEnhver rapportert hard gate-feil betyr null og ikke bestått; først deretter brukes det vektede gjennomsnittet og tersklene per dimensjon. Den samlede terskelen på 8.0 er en standardverdi i konfigurasjonen, ikke en observert oversettelseskvalitet.
Turer · kostnad · kvote
Nye forsøk · forbrukKjøring · vurdering: passAvsluttende transaksjonFerdigstillingEn bestått oversettelse ferdigstilles som translated.
Avsluttende transaksjon
FerdigstillingData: endelig postTilstand · kalloggOversettelsestilstandKandidat, tilstand, score og turer ferdigstilles, og framdriften finalized og tilstandsloggen skrives i én transaksjon. En hendelse om fullført oversettelse sendes bare for translated.
Nye forsøk · forbruksgrenser
Ikke bestått betyr en tur til, en grense betyr menneskelig gjennomgang, og kvote eller autentisering stopper forbruket og venter på at en operatør gjenopptar.
Hard gate · vektet gjennomsnitt
DomsreglerKjøring · vurdering: domTurer · kostnad · kvoteNye forsøk · forbrukEnhver rapportert hard gate-feil betyr null og ikke bestått; først deretter brukes det vektede gjennomsnittet og tersklene per dimensjon. Den samlede terskelen på 8.0 er en standardverdi i konfigurasjonen, ikke en observert oversettelseskvalitet.
Turer · kostnad · kvote
Nye forsøk · forbrukKjøring · vurdering: neste turGenerer · modellkallOversettelsesturEn oversettelse som ikke består, genereres på nytt med den forrige oversettelsen og kritikken. Selv en hard gate-feil kan først prøves på nytt i stedet for å gå rett til en person.
Turer · kostnad · kvote
Nye forsøk · forbrukKjøring · vurdering: grense · avbrytMenneskelig gjennomgangNår turene er brukt opp eller kostnadstaket er nådd, ferdigstilles jobben som needs_review. Tilstanden finalized betyr at behandlingen ble avsluttet, ikke at en person godkjente den.
Turer · kostnad · kvote
Nye forsøk · forbrukFeil · grense: kvote · autentiseringKontroll av påloggingsinformasjonEt kvote- eller autentiseringssignal stopper forbruket og setter needs_credential. Det byttes ikke automatisk til en annen konto eller leverandør. Transportfeil uten stoppsignal går tilbake til nye forsøk i BullMQ.
Kontroll av påloggingsinformasjonKjøring · vurdering: manuell gjenopptakelseBullMQ · jobb-ID
JobbkøEn operatør som har kontrollert påloggingsinformasjonen, starter på nytt eksplisitt.
Gjenoppretting av hengende jobber
Gamle drafts deles etter årsak: mangler de i køen, legges de i kø på nytt; er forsøkene brukt opp, går de til en menneskelig beslutning.
Draft · framdrift
OversettelsestilstandObservasjon · rapport: hengende draftDrafts over 10 min · maks. 200Opprydding av hengende jobberOpptil 200 kandidater som har vært drafts i over 10 minutter, leses med de eldste først. Spørringen tar ingen lås, og oppdateringer og logger kjører som separate setninger, så dette beskrives ikke som en batch uten race conditions.
Drafts over 10 min · maks. 200
Opprydding av hengende jobberKjøring · vurdering: under grensenSammenlign køtilstandKøkontrollMed færre forsøk enn grensen (3) sammenlignes jobben med køtilstandene active, waiting, delayed og prioritized. I koden kommer grenen for oppbrukte forsøk før denne køkontrollen.
Sammenlign køtilstand
KøkontrollKjøring · vurdering: legg i kø på nyttBullMQ · jobb-IDJobbkøHvis jobben ikke er i køen, legges den i kø på nytt. API-et bruker ID-er med et forespørselssuffiks, mens oppryddingen leter etter segment- og språk-ID, så den beskrives ikke som å treffe alle pågående forespørsler.
Drafts over 10 min · maks. 200
Opprydding av hengende jobberKjøring · vurdering: resultat finnesMenneskelig gjennomgangMed alle 3 forsøk brukt og et oversettelsesresultat til stede går jobben til needs_review.
Drafts over 10 min · maks. 200
Opprydding av hengende jobberKjøring · vurdering: uten resultatKontroll av påloggingsinformasjonMed alle 3 forsøk brukt og uten resultat går jobben til needs_credential.
Alle forbindelser med samme tykkelse. Velg en flyt for å fremheve bare dens vei, med nummererte steg.
- Heltrukket · retning for input, resultater og logger
- Stiplet · kjøring, vurdering, forespørsel
- Lange prikker · observasjon og rapportering, atskilt fra vurdering
- Korte streker · feil, stopp, grense
- Kraftig svart linje · den valgte flyten; tallene angir rekkefølgen
- Boks · kode- eller tilstandsgrense, navngitt i overskriften
- Indre chip · en komponent innenfor grensen
- Prikket boks · utenfor grensen
- Oransje kontur · der en modell tar beslutninger
- Generering · forbruk · ferdigstilling
- Inngang · domsregler · opprydding
- Kø · tilstand · logger
- Registrering · køkontroll
Tegnet ut fra private implementerings- og utviklingslogger. Kundedata og kodestier vises ikke.
- Én opprydding
- 26. mai 2026, én oppryddingssyklus i utviklingsmiljøet: 200 kontrollert, 106 tilstandsoverganger, 2 satt i kø på nytt. En tilstandsovergang er ikke en vellykket oversettelse, og fordelingen av de 106 etter måltilstand er ikke registrert.
- Hvorfor ikke nøyaktig én gang
- Poster skrives uten duplikater, men hvis en jobb kjører på nytt etter et krasj, kan modellkall og kostnadene deres gjentas. Grensen for samtidighet gjelder per prosess, ikke for hele klyngen.
- Dommens rekkevidde
- At et gjennomsnitt ikke kan skjule en ordlistefeil, er en aggregeringsregel over rapporterte gates. Det beviser ikke at alle forbudte termer blir funnet, eller at kvaliteten er på morsmålsnivå.