Lächelnde Baumwollfigur aus dem ursprünglichen Cotton-Logo, ohne Hintergrund und Schriftzug
Zurück zum Saal

Cotton

Translation workflow

Aus generierten Übersetzungen prüfbare Ergebnisse machen.

Ein Übersetzungs-Workflow für Spieldialoge.

2026.05.06 — 2026.05.26

Arbeitsprojekt · Übersetzungsverarbeitung, Beurteilung und Review-Pfad

  • Web-AppImplementiert · Entwicklung

Cotton vocabulary

Lens
Refinement Loop
Translation
Quality Estimation
Workflow
Job Control
Human Review
  1. prompt layers
  2. glossary
  3. generation
  4. revision
  1. judge
  2. hard gate
  3. score
  1. intake
  2. checkpoint
  3. spend control
  4. stale sweep
  1. approval
  2. correction
  3. 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

Scores, Wiederholungen und menschliches Review, jeweils an ihrer eigenen Grenze.

Generierung und Beurteilung teilen sich das Glossar, und ein vom Bewertungsmodell gemeldetes Scheitern eines Hard Gates kann nicht durch den Mittelwert ausgeglichen werden. Zwischenstände von Übersetzung und Beurteilung werden aufgezeichnet, Wiederholungs- und Kostenlimits bleiben von erschöpften Zugangsdaten getrennt, und hängende Jobs kehren je nach Ursache in die Queue oder ins Review zurück.

Dieses Arbeitsprojekt verbindet Übersetzungsgenerierung, vom Modell gemeldete Qualitätsbeurteilung, Wiederholungen und menschliches Review in einem Ablauf.

Vom Beginn des Repositorys bis zur während des Einsatzes bestätigten Arbeit

Eine Web-App aus Bildschirmen zum Bearbeiten und Freigeben von Übersetzungen, einer API und einem Job-Worker, in der Entwicklungsumgebung laufend.

Karte des Beurteilungsablaufs · nach nicht öffentlichen Implementierungsaufzeichnungen
Cotton: Übersetzungsbeurteilung · Wiederholung · WiederherstellungDie API committet Quelltext und Zielsprachen in die Datenbank und reiht dann pro Zielsprache einen Job ein. Ein Worker sperrt die Zeile, prüft den Versuch, legt Draft und Fortschrittszustand an, generiert eine Übersetzung mit dem Glossar und ruft separat ein Bewertungsmodell mit demselben Glossar auf. Die Übersetzung (Tx1) und das Urteil mit seinen Belegen (Tx2) werden in getrennten Transaktionen aufgezeichnet. Code aggregiert das Urteil, sodass ein Hard-Gate-Scheitern nicht durch den Mittelwert ausgeglichen wird: Ein Bestehen wird finalisiert, ein Scheitern erhält einen weiteren Turn, das Turn- oder Kostenlimit schickt den Job ins menschliche Review, und ein Quota- oder Auth-Signal stoppt die Ausgaben und wartet auf eine Prüfung der Zugangsdaten. Ein Sweep für hängende Jobs betrachtet bis zu 200 Drafts, die älter als 10 Minuten sind: Einer mit verbleibenden Versuchen, der in der Queue fehlt, wird erneut eingereiht, und einer mit aufgebrauchten Versuchen geht je nachdem, ob ein Ergebnis existiert, ins Review oder zur Prüfung der Zugangsdaten.Quelle · ZielsprachenGespeicherte SegmenteMenschliches Reviewneeds_review · keine FreigabePrüfung der Zugangsdatenneeds_credentialAPI · Job-RegistrierungNach Commit einreihenJob-QueueBullMQ · Job-IDJob-EintrittZeilensperre · VersuchsprüfungGlossar · KontextWorkspace-GlossarÜbersetzungs-TurnGenerieren · ModellaufrufAufruf des Bewertungsmodells · ParsenUrteilsregelnHard Gate · gewichteter MittelwertWiederholung · AusgabenTurns · Kosten · QuotaÜbersetzungszustandDraft · FortschrittZeilen für Übersetzung · UrteilZustand · AufrufprotokollFinalisierungAbschlusstransaktionQueue-AbgleichQueue-Zustand abgleichenSweep hängender JobsDrafts über 10 Min. · max. 200Eingabe · QueueGenerierung · BeurteilungZustand · AnnahmeWiederherstellung · menschliche Entscheidung1Quelle2 nach Commit · Nach Commit einreihen → BullMQ · Job-ID23 Job zustellen · BullMQ · Job-ID → Zeilensperre · Versuchsprüfung34Fortschrittszeile5Versuch erlaubt1Glossar2 dasselbe Glossar · Workspace-Glossar → Aufruf des Bewertungsmodells · Parsen23Tx1 · Übersetzung4Tx2 · Urteil5 Scores · Gates · Aufruf des Bewertungsmodells · Parsen → Hard Gate · gewichteter Mittelwert56Urteil7pass8finale Aufzeichnung1Urteil2nächster Turn3Limit · Abbruch4Quota · Authentifizierung5manuelle Wiederaufnahme1hängender Draft2 unter dem Limit · Drafts über 10 Min. · max. 200 → Queue-Zustand abgleichen23erneut einreihen4 Ergebnis vorhanden · Drafts über 10 Min. · max. 200 → Menschliches Review45kein Ergebnis

Registrierung → Eintritt

Nach dem Datenbank-Commit eingereiht; ein Worker sperrt die Zeile, prüft den Versuch und legt den Draft an.

  1. Quelle · ZielsprachenDaten: QuelleNach Commit einreihenAPI · Job-Registrierung

    Quellsegmente und die Zielsprachen des Projekts werden in der Datenbank gespeichert. Kundendaten werden nicht gezeigt.

  2. Nach Commit einreihenAPI · Job-RegistrierungDaten: nach CommitBullMQ · Job-IDJob-Queue

    Nach dem Datenbank-Commit wird pro aktiver Zielsprache ein Job mit anfragebezogener ID eingereiht. Scheitert das Einreihen, wird nur eine Warnung protokolliert und der Commit nicht zurückgerollt (keine atomare Outbox), weshalb es den Sweep für hängende Jobs gibt.

  3. BullMQ · Job-IDJob-QueueAusführen · Urteil: Job zustellenZeilensperre · VersuchsprüfungJob-Eintritt

    BullMQ übergibt den Job asynchron an einen Worker.

  4. Zeilensperre · VersuchsprüfungJob-EintrittDaten: FortschrittszeileDraft · FortschrittÜbersetzungszustand

    Innerhalb einer Transaktion wird die Fortschrittszeile gesperrt und eine Draft-Übersetzung angelegt. Automatische Wiederholungen bereits finalisierter oder wegen Zugangsdaten pausierter Jobs werden übersprungen; manuelle Anfragen werden gesondert behandelt.

  5. Zeilensperre · VersuchsprüfungJob-EintrittAusführen · Urteil: Versuch erlaubtGenerieren · ModellaufrufÜbersetzungs-Turn

    Der Versuchszähler steigt innerhalb seines Limits um eins, dann beginnt der Übersetzungs-Turn.

Generieren → bewerten → finalisieren

Generierung und Beurteilung nutzen dasselbe Glossar; Übersetzung und Urteil werden getrennt aufgezeichnet, und Code aggregiert das Urteil vor dem Finalisieren.

  1. Workspace-GlossarGlossar · KontextDaten: GlossarGenerieren · ModellaufrufÜbersetzungs-Turn

    Glossar und Kontext des Workspace werden nachgeschlagen und an die Generierung übergeben.

  2. Workspace-GlossarGlossar · KontextDaten: dasselbe GlossarAufruf des Bewertungsmodells · ParsenÜbersetzungs-Turn

    Die Beurteilung erhält dieselben Glossarvorgaben.

  3. Generieren · ModellaufrufÜbersetzungs-TurnDaten: Tx1 · ÜbersetzungZeilen für Übersetzung · UrteilÜbersetzungszustand

    Das Modell wird direkt oder über einen en-US-Pivot aufgerufen, und Aufruf, Ereignis und Fortschritt werden in einer Transaktion geschrieben. Läuft der Job nach einem Absturz erneut, können sich der Übersetzungsaufruf und seine Kosten wiederholen.

  4. Aufruf des Bewertungsmodells · ParsenÜbersetzungs-TurnDaten: Tx2 · UrteilZeilen für Übersetzung · UrteilÜbersetzungszustand

    Bewertungsscores und Belege werden einmal pro Übersetzung und Turn eingefügt; ein Duplikat findet die bestehende Zeile, und Zitate werden nur beim ersten Einfügen geschrieben. Nicht dieselbe Transaktion wie die Übersetzung.

  5. Aufruf des Bewertungsmodells · ParsenÜbersetzungs-TurnDaten: Scores · GatesHard Gate · gewichteter MittelwertUrteilsregeln

    Die Antwort des Bewertungsmodells wird in Scores pro Dimension und Gate-Ergebnisse zerlegt. Ob das Glossar bestanden wurde, ist das, was das Bewertungsmodell meldet.

  6. Hard Gate · gewichteter MittelwertUrteilsregelnAusführen · Urteil: UrteilTurns · Kosten · QuotaWiederholung · Ausgaben

    Jedes gemeldete Scheitern eines Hard Gates bedeutet null Punkte und Nichtbestehen; erst dann werden der gewichtete Mittelwert und die Schwellen pro Dimension angewandt. Die Gesamtschwelle von 8.0 ist ein Standardwert der Konfiguration, keine beobachtete Übersetzungsqualität.

  7. Turns · Kosten · QuotaWiederholung · AusgabenAusführen · Urteil: passAbschlusstransaktionFinalisierung

    Ein Bestehen wird als translated finalisiert.

  8. AbschlusstransaktionFinalisierungDaten: finale AufzeichnungZustand · AufrufprotokollÜbersetzungszustand

    Kandidat, Zustand, Score und Turns werden finalisiert, und der Fortschritt finalized sowie das Zustandsprotokoll werden in einer Transaktion geschrieben. Ein Ereignis für abgeschlossene Übersetzung wird nur bei translated ausgelöst.

Wiederholung · Ausgabenlimits

Kein Bestehen heißt ein weiterer Turn; ein Limit heißt menschliche Prüfung; Quota oder Auth stoppen die Ausgaben und warten auf die Wiederaufnahme durch einen Operator.

  1. Hard Gate · gewichteter MittelwertUrteilsregelnAusführen · Urteil: UrteilTurns · Kosten · QuotaWiederholung · Ausgaben

    Jedes gemeldete Scheitern eines Hard Gates bedeutet null Punkte und Nichtbestehen; erst dann werden der gewichtete Mittelwert und die Schwellen pro Dimension angewandt. Die Gesamtschwelle von 8.0 ist ein Standardwert der Konfiguration, keine beobachtete Übersetzungsqualität.

  2. Turns · Kosten · QuotaWiederholung · AusgabenAusführen · Urteil: nächster TurnGenerieren · ModellaufrufÜbersetzungs-Turn

    Eine Übersetzung, die nicht besteht, wird mit der vorherigen Übersetzung und der Kritik erneut generiert. Auch ein Hard-Gate-Fehlschlag kann zuerst wiederholt werden, statt direkt an einen Menschen zu gehen.

  3. Turns · Kosten · QuotaWiederholung · AusgabenAusführen · Urteil: Limit · AbbruchMenschliches Review

    Sind die Turns aufgebraucht oder ist die Kostenobergrenze erreicht, wird der Job als needs_review finalisiert. Finalisiert heißt, dass die Verarbeitung endete, nicht dass ein Mensch zugestimmt hat.

  4. Turns · Kosten · QuotaWiederholung · AusgabenFehlschlag · Limit: Quota · AuthentifizierungPrüfung der Zugangsdaten

    Ein Quota- oder Auth-Signal stoppt die Ausgaben und setzt needs_credential. Es gibt keinen automatischen Wechsel zu einem anderen Konto oder Anbieter. Transportfehler ohne Halt-Signal gehen zurück in den BullMQ-Retry.

  5. Prüfung der ZugangsdatenAusführen · Urteil: manuelle WiederaufnahmeBullMQ · Job-IDJob-Queue

    Ein Operator, der die Zugangsdaten geprüft hat, startet explizit neu.

Wiederherstellung hängender Jobs

Alte Drafts werden nach Grund getrennt: Fehlt der Job in der Queue, wird er erneut eingereiht; sind die Versuche aufgebraucht, entscheidet ein Mensch.

  1. Draft · FortschrittÜbersetzungszustandBeobachtung · Bericht: hängender DraftDrafts über 10 Min. · max. 200Sweep hängender Jobs

    Bis zu 200 Kandidaten, die seit über 10 Minuten Drafts sind, werden gelesen, die ältesten zuerst. Die Abfrage setzt keine Sperre, und Updates und Protokolle laufen als getrennte Anweisungen, daher wird dies nicht als wettlauffreier Batch beschrieben.

  2. Drafts über 10 Min. · max. 200Sweep hängender JobsAusführen · Urteil: unter dem LimitQueue-Zustand abgleichenQueue-Abgleich

    Bei weniger Versuchen als dem Limit (3) wird der Job mit den Queue-Zuständen active, waiting, delayed und prioritized abgeglichen. Im Code steht der Zweig für erschöpfte Versuche vor dieser Queue-Prüfung.

  3. Queue-Zustand abgleichenQueue-AbgleichAusführen · Urteil: erneut einreihenBullMQ · Job-IDJob-Queue

    Ist der Job nicht in der Queue, wird er erneut eingereiht. Die API nutzt IDs mit Anfragesuffix, während der Sweep nach Segment- und Locale-ID sucht; daher wird er nicht so beschrieben, als erfasse er jede laufende Anfrage.

  4. Drafts über 10 Min. · max. 200Sweep hängender JobsAusführen · Urteil: Ergebnis vorhandenMenschliches Review

    Sind alle 3 Versuche verbraucht und liegt ein Übersetzungsergebnis vor, geht der Job zu needs_review.

  5. Drafts über 10 Min. · max. 200Sweep hängender JobsAusführen · Urteil: kein ErgebnisPrüfung der Zugangsdaten

    Sind alle 3 Versuche verbraucht und gibt es kein Ergebnis, geht der Job zu needs_credential.

Alle Verbindungen in gleicher Stärke. Wird ein Ablauf gewählt, ist nur sein Pfad hervorgehoben, mit nummerierten Schritten.

  • Durchgezogen · Richtung von Eingaben, Ergebnissen und Aufzeichnungen
  • Gestrichelt · Ausführen, Urteil, Anfrage
  • Lang gepunktet · Beobachtung und Berichte, getrennt vom Urteil
  • Kurz gestrichelt · Fehlschlag, Stopp, Limit
  • Dicke schwarze Linie · der gewählte Ablauf; Nummern geben die Reihenfolge an
  • Kasten · Code- oder Zustandsgrenze, benannt in der Kopfzeile
  • Innerer Chip · eine Komponente dieser Grenze
  • Gepunkteter Kasten · außerhalb dieser Grenze
  • Orange Umrandung · wo ein Modell entscheidet
  • Generierung · Ausgaben · Finalisierung
  • Eintritt · Urteilsregeln · Sweep
  • Queue · Zustand · Aufzeichnungen
  • Registrierung · Queue-Abgleich

Gezeichnet nach nicht öffentlichen Implementierungs- und Entwicklungsaufzeichnungen. Kundendaten und Codepfade werden nicht gezeigt.

Ein Sweep
May 26, 2026, ein Sweep-Zyklus in der Entwicklungsumgebung: 200 geprüft, 106 Zustandsübergänge, 2 erneut eingereiht. Ein Zustandsübergang ist keine erfolgreiche Übersetzung, und die Aufteilung der 106 nach Zielzustand ist nicht aufgezeichnet.
Warum nicht genau einmal
Aufzeichnungen werden ohne Duplikate geschrieben, doch läuft ein Job nach einem Absturz erneut, können sich Modellaufrufe und ihre Kosten wiederholen. Das Nebenläufigkeitslimit gilt pro Prozess, nicht clusterweit.
Reichweite des Urteils
Dass ein Mittelwert ein Glossar-Scheitern nicht überdeckt, ist eine Aggregationsregel über gemeldete Gates. Sie beweist nicht, dass jeder verbotene Begriff gefunden wird oder die Qualität muttersprachliches Niveau hat.