
Cotton
Translation workflow
Aus generierten Übersetzungen prüfbare Ergebnisse machen.
Ein Übersetzungs-Workflow für Spieldialoge.
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
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.
Registrierung → Eintritt
Nach dem Datenbank-Commit eingereiht; ein Worker sperrt die Zeile, prüft den Versuch und legt den Draft an.
Quelle · ZielsprachenDaten: QuelleNach Commit einreihen
API · Job-RegistrierungQuellsegmente und die Zielsprachen des Projekts werden in der Datenbank gespeichert. Kundendaten werden nicht gezeigt.
Nach Commit einreihen
API · Job-RegistrierungDaten: nach CommitBullMQ · Job-IDJob-QueueNach 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.
BullMQ · Job-ID
Job-QueueAusführen · Urteil: Job zustellenZeilensperre · VersuchsprüfungJob-EintrittBullMQ übergibt den Job asynchron an einen Worker.
Zeilensperre · Versuchsprüfung
Job-EintrittDaten: FortschrittszeileDraft · FortschrittÜbersetzungszustandInnerhalb 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.
Zeilensperre · Versuchsprüfung
Job-EintrittAusführen · Urteil: Versuch erlaubtGenerieren · ModellaufrufÜbersetzungs-TurnDer 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.
Workspace-Glossar
Glossar · KontextDaten: GlossarGenerieren · ModellaufrufÜbersetzungs-TurnGlossar und Kontext des Workspace werden nachgeschlagen und an die Generierung übergeben.
Workspace-Glossar
Glossar · KontextDaten: dasselbe GlossarAufruf des Bewertungsmodells · ParsenÜbersetzungs-TurnDie Beurteilung erhält dieselben Glossarvorgaben.
Generieren · Modellaufruf
Übersetzungs-TurnDaten: Tx1 · ÜbersetzungZeilen für Übersetzung · UrteilÜbersetzungszustandDas 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.
Aufruf des Bewertungsmodells · Parsen
Übersetzungs-TurnDaten: Tx2 · UrteilZeilen für Übersetzung · UrteilÜbersetzungszustandBewertungsscores 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.
Aufruf des Bewertungsmodells · Parsen
Übersetzungs-TurnDaten: Scores · GatesHard Gate · gewichteter MittelwertUrteilsregelnDie Antwort des Bewertungsmodells wird in Scores pro Dimension und Gate-Ergebnisse zerlegt. Ob das Glossar bestanden wurde, ist das, was das Bewertungsmodell meldet.
Hard Gate · gewichteter Mittelwert
UrteilsregelnAusführen · Urteil: UrteilTurns · Kosten · QuotaWiederholung · AusgabenJedes 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.
Turns · Kosten · Quota
Wiederholung · AusgabenAusführen · Urteil: passAbschlusstransaktionFinalisierungEin Bestehen wird als translated finalisiert.
Abschlusstransaktion
FinalisierungDaten: finale AufzeichnungZustand · AufrufprotokollÜbersetzungszustandKandidat, 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.
Hard Gate · gewichteter Mittelwert
UrteilsregelnAusführen · Urteil: UrteilTurns · Kosten · QuotaWiederholung · AusgabenJedes 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.
Turns · Kosten · Quota
Wiederholung · AusgabenAusführen · Urteil: nächster TurnGenerieren · ModellaufrufÜbersetzungs-TurnEine Ü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.
Turns · Kosten · Quota
Wiederholung · AusgabenAusführen · Urteil: Limit · AbbruchMenschliches ReviewSind 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.
Turns · Kosten · Quota
Wiederholung · AusgabenFehlschlag · Limit: Quota · AuthentifizierungPrüfung der ZugangsdatenEin 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.
Prüfung der ZugangsdatenAusführen · Urteil: manuelle WiederaufnahmeBullMQ · Job-ID
Job-QueueEin 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.
Draft · Fortschritt
ÜbersetzungszustandBeobachtung · Bericht: hängender DraftDrafts über 10 Min. · max. 200Sweep hängender JobsBis 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.
Drafts über 10 Min. · max. 200
Sweep hängender JobsAusführen · Urteil: unter dem LimitQueue-Zustand abgleichenQueue-AbgleichBei 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.
Queue-Zustand abgleichen
Queue-AbgleichAusführen · Urteil: erneut einreihenBullMQ · Job-IDJob-QueueIst 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.
Drafts über 10 Min. · max. 200
Sweep hängender JobsAusführen · Urteil: Ergebnis vorhandenMenschliches ReviewSind alle 3 Versuche verbraucht und liegt ein Übersetzungsergebnis vor, geht der Job zu needs_review.
Drafts über 10 Min. · max. 200
Sweep hängender JobsAusführen · Urteil: kein ErgebnisPrüfung der ZugangsdatenSind 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.