
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
スコア、再試行、人によるレビューを、それぞれの境界に。
生成と判定は用語集を共有し、判定モデルが報告したハードゲートの失敗は平均スコアで相殺できません。翻訳と判定の中間状態を記録し、再試行とコストの上限を認証情報の枯渇とは区別し、停滞したジョブは原因に応じてキューかレビューに戻します。
この業務プロジェクトは、翻訳の生成、モデルが報告する品質判定、再試行、人によるレビューを1つの流れにつないでいます。
リポジトリの開始から、参加期間中に確認した作業まで
翻訳の編集・承認画面、API、ジョブワーカーからなるWebアプリで、開発環境で動作しています。
登録 → 開始
データベースのコミット後にキューに入れ、ワーカーが行をロックして試行を確認し、draftを作成します。
原文 · 対象ロケールデータ: 原文コミット後にキューへ
API · ジョブ登録原文のセグメントとプロジェクトの対象ロケールがデータベースに保存されます。顧客データは表示しません。
コミット後にキューへ
API · ジョブ登録データ: コミット後BullMQ · ジョブIDジョブキューデータベースのコミット後、有効な対象ロケールごとに、リクエスト単位で決まるIDを持つジョブをキューに入れます。キュー登録に失敗しても警告をログに残すだけで、コミットは巻き戻しません(アトミックなoutboxはありません)。停滞スイープがあるのはそのためです。
BullMQ · ジョブID
ジョブキュー実行 · 判定: ジョブの受け渡し行ロック · 試行の確認ジョブの開始BullMQがジョブをワーカーへ非同期に渡します。
行ロック · 試行の確認
ジョブの開始データ: 進捗行draft · 進捗翻訳の状態トランザクション内で進捗行をロックし、draftの翻訳を作成します。確定済みのジョブや認証情報の問題で一時停止したジョブの自動再試行は飛ばし、手動の要求は別に扱います。
行ロック · 試行の確認
ジョブの開始実行 · 判定: 試行を許可生成 · モデル呼び出し翻訳ターン試行回数を上限内で1つ増やしてから、翻訳ターンを始めます。
生成 → 判定 → 確定
生成と判定は同じ用語集を使い、翻訳と判定を別々に記録したうえで、コードが判定を集計して確定します。
ワークスペースの用語集
用語集 · コンテキストデータ: 用語集生成 · モデル呼び出し翻訳ターンワークスペースの用語集とコンテキストを照会し、生成に渡します。
ワークスペースの用語集
用語集 · コンテキストデータ: 同じ用語集判定モデル呼び出し · パース翻訳ターン判定にも同じ用語集の制約を渡します。
生成 · モデル呼び出し
翻訳ターンデータ: Tx1 · 翻訳翻訳 · 判定の行翻訳の状態モデルを直接、またはen-USのピボットを介して呼び出し、呼び出し、イベント、進捗を1つのトランザクションで書き込みます。クラッシュ後にジョブが再実行されると、翻訳の呼び出しとそのコストが繰り返されることがあります。
判定モデル呼び出し · パース
翻訳ターンデータ: Tx2 · 判定翻訳 · 判定の行翻訳の状態判定スコアと根拠は翻訳とターンごとに1回だけ挿入し、重複時は既存の行を見つけます。引用は最初の挿入時にだけ書き込みます。翻訳と同じトランザクションではありません。
判定モデル呼び出し · パース
翻訳ターンデータ: スコア · ゲートハードゲート · 加重平均判定ルール判定モデルの応答をパースして、次元ごとのスコアとゲートの結果にします。用語集を通過したかどうかは、判定モデルが報告するものです。
ハードゲート · 加重平均
判定ルール実行 · 判定: 判定ターン · コスト · クォータ再試行 · 支出報告されたハードゲートの失敗が1つでもあれば0点で不合格とし、そのあとで加重平均と次元ごとの基準を適用します。総合基準の8.0は設定の既定値であり、観測された翻訳品質ではありません。
ターン · コスト · クォータ
再試行 · 支出実行 · 判定: pass確定トランザクション確定通過した翻訳はtranslatedとして確定します。
確定トランザクション
確定データ: 確定記録状態 · 呼び出しログ翻訳の状態候補、状態、スコア、ターンを確定し、進捗のfinalizedと状態ログを1つのトランザクションで書き込みます。翻訳完了イベントはtranslatedの場合にのみ発行します。
再試行 · 支出の上限
通過しなければ次のターン、上限に達すれば人によるレビュー、クォータや認証なら支出を止めて運用者の再開を待ちます。
ハードゲート · 加重平均
判定ルール実行 · 判定: 判定ターン · コスト · クォータ再試行 · 支出報告されたハードゲートの失敗が1つでもあれば0点で不合格とし、そのあとで加重平均と次元ごとの基準を適用します。総合基準の8.0は設定の既定値であり、観測された翻訳品質ではありません。
ターン · コスト · クォータ
再試行 · 支出実行 · 判定: 次のターン生成 · モデル呼び出し翻訳ターン通過しなかった翻訳は、前回の翻訳と講評を添えて再生成されます。ハードゲートの失敗でも、すぐに人へ回さず、先に再試行することがあります。
ターン · コスト · クォータ
再試行 · 支出実行 · 判定: 上限 · 中断人によるレビューターンを使い切るかコストの上限に達すると、needs_reviewとして確定します。finalizedは処理の終了を意味し、人による承認を意味しません。
ターン · コスト · クォータ
再試行 · 支出失敗 · 上限: クォータ · 認証認証情報の確認クォータや認証のシグナルがあると支出を止め、needs_credentialにします。別のアカウントやプロバイダーへの自動切り替えはありません。停止シグナルを伴わない通信エラーは、BullMQの再試行に戻します。
認証情報の確認実行 · 判定: 手動再開BullMQ · ジョブID
ジョブキュー認証情報を確認した運用者が、明示的に再開します。
停滞ジョブの復旧
古いdraftを理由別に分け、キューになければ再投入し、試行を使い切っていれば人の判断に回します。
draft · 進捗
翻訳の状態観測 · 報告: 停滞したdraft10分超のdraft · 最大200停滞スイープ10分を超えてdraftのままの候補を、古い順に最大200件読み取ります。クエリはロックを取らず、更新とログの書き込みは別々の文として実行されるため、競合のない一括処理とは記述していません。
10分超のdraft · 最大200
停滞スイープ実行 · 判定: 上限未満キュー状態の比較キューの確認試行が上限(3回)未満なら、ジョブをactive、waiting、delayed、prioritizedのキュー状態と照合します。コード上では、試行を使い切った場合の分岐がこのキュー照合より先に来ます。
キュー状態の比較
キューの確認実行 · 判定: 再投入BullMQ · ジョブIDジョブキューキューになければ、ジョブを再びキューに入れます。APIはリクエスト接尾辞の付いたIDを使い、スイープはセグメントとロケールのIDで探すため、処理中のすべてのリクエストと一致するとは記述していません。
10分超のdraft · 最大200
停滞スイープ実行 · 判定: 結果あり人によるレビュー3回の試行を使い切り、翻訳結果がある場合はneeds_reviewへ送ります。
10分超のdraft · 最大200
停滞スイープ実行 · 判定: 結果なし認証情報の確認3回の試行を使い切り、結果がない場合はneeds_credentialへ送ります。
すべての接続を同じ太さで表示します。フローを選ぶと、その経路だけを番号付きで強調します。
- 実線 · 入力、結果、記録の流れる方向
- 破線 · 実行、判定、要求
- 長い点線 · 観測と報告、判定とは別
- 短い破線 · 失敗、停止、上限
- 太い黒線 · 選んだフロー。番号は順序
- ボックス · コードまたは状態の境界、見出しに名前
- 内側のチップ · その境界の構成要素
- 点線ボックス · その境界の外
- オレンジの枠 · モデルが判断する場所
- 生成 · 支出 · 確定
- 開始 · 判定ルール · スイープ
- キュー · 状態 · 記録
- 登録 · キューの確認
非公開の実装記録と開発記録から作図しました。顧客データとコードパスは表示していません。
- 1回のスイープ
- 2026年5月26日、開発環境でのスイープ1サイクル:200件を確認、106件の状態遷移、2件を再投入。状態遷移は翻訳の成功ではなく、106件の移行先状態ごとの内訳は記録されていません。
- 厳密に1回ではない理由
- 記録は重複なく書き込まれますが、クラッシュ後にジョブが再実行されると、モデル呼び出しとそのコストは繰り返されることがあります。同時実行の上限はプロセス単位で、クラスター全体のものではありません。
- 判定の範囲
- 平均が用語集の失敗を覆い隠さないようにするのは、報告されたゲートに対する集計ルールです。すべての禁止語を見つけることも、ネイティブ水準の品質も証明しません。