元のCottonロゴから背景と文字を取り除いた、笑顔の綿のキャラクター
展示室へ戻る

Cotton

Translation workflow

生成された翻訳を、レビューできる結果へ。

ゲームのセリフのための翻訳ワークフローです。

2026.05.06 — 2026.05.26

業務プロジェクト · 翻訳の処理、判定、レビューの経路

  • Webアプリ実装済み · 開発環境

レビューが見つけた競合状態、原因別に戻した停滞ジョブ

指針とコミットに、実装はClaude、レビューはCodexと名前が残る事例と、停滞したジョブを診断できるようにした事例です。

凡例の全体

読み方 · すべての事例に同じ規則

  • 列は誰が行ったか、上から下へは時間の順
  • 実線: 記録された引き継ぎ・次の段階
  • 太い瑠璃色 ↩: 作業を差し戻した指摘
  • 破線: 記録された実行ではない(指針、権限のない仮説、未確認の境界)
  • 長方形: 行動
  • 角丸: 観測された状態・指摘
  • 折れた角: 成果物・証拠
  • 斜線の列: 開発対象の製品の構成要素(開発に使ったエージェントではない)

事例 1 / 2 · クォータが尽きたら停止する変更を、レビューが見つけた競合状態も含めて同じPRで修正しました

May 19, 2026

クォータが尽きたら停止する変更を、レビューが見つけた競合状態も含めて同じPRで修正しました

  1. 人人

    行動クォータが尽きたら支出を停止 · 自動フォールバックなし

    • 引き継ぎ実装の制約→ チェックポイント · 停止 · 手動再開を実装 (Claude)
  2. コーディングエージェントClaude

    行動チェックポイント · 停止 · 手動再開を実装

    • 引き継ぎ同じPRでのレビュー→ 指摘:競合状態 · 状態遷移の重複 (Codex)
  3. レビュー · 検証Codex

    観測 · 指摘指摘:競合状態 · 状態遷移の重複

  4. 成果物同じPR

    成果物同じPRで:行ロック · 一意のスコアキー · アトミックな遷移

    • 引き継ぎ→ ローカルのフィクスチャ · DB統合検査の記録 (同じPR)
  5. 成果物同じPR

    成果物ローカルのフィクスチャ · DB統合検査の記録

    • 記録された実行ではない確認した範囲→ 新しいCIや本番デプロイの結果は収集していない (同じPR)
  6. 成果物同じPR

    指針 · 未確認新しいCIや本番デプロイの結果は収集していない

背景
人が定めた条件は、クォータが尽きたら支出を止め、自動フォールバックを行わないことでした。Claudeがチェックポイント、停止、手動再開を実装し、プロジェクトのMCPで実行したCodexのレビューが状態遷移の競合状態と重複を見つけました。
結果
開始と再開の遷移をロック内で実行し、判定スコアに一意キーを設けて重複を防ぎ、トランザクション境界を定めました。すべての競合状態を取り除いたという意味ではありません。
限界
コミットには検査140件、後の統合CHANGELOGには160件と記されているため、1つの実行数にまとめていません。指針上、Codexのレビューはローカルの任意手順なので、過去のすべてのPRがこれを経たという意味ではありません。
根拠と残る限界
  • 指針には、Claudeが実装し、CodexがプロジェクトのMCPでローカルにレビューし、そのレビューをPRに添付し、意見が分かれたらClaudeのレビューエージェントと一緒に調査するという順序が記されています。CIでの自動Codexレビューは保留されていました。
  • 開発時の検査はフィクスチャとモックを使い、実際のモデル呼び出しには個別のスコープが必要です。レビューの指摘は同じPRに取り込み、feature → mainへsquashマージします。

May 26, 2026

停滞したジョブを診断できるようにし、原因別に戻しました

  1. 開発対象翻訳ワーカー · キュー

    観測 · 指摘draftに残ったジョブ · 試行を使い切り

    • 引き継ぎ観測値→ failedReason · 終了コード · draft状態を照合 (開発者)
  2. 人開発者

    行動failedReason · 終了コード · draft状態を照合

    • 引き継ぎ→ 原因:継承されたNODE_OPTIONSがサブプロセスで衝突 (開発者)
  3. 人開発者

    観測 · 指摘原因:継承されたNODE_OPTIONSがサブプロセスで衝突

  4. 作業セッションコードの変更

    行動NODE_OPTIONSを除去 · プロセス単位の同時実行上限

    • 引き継ぎ→ キューの状態:waiting · active · failed · stale (コードの変更)
  5. 作業セッションコードの変更

    行動キューの状態:waiting · active · failed · stale

    • 引き継ぎ→ 停滞スイープ:キューにない vs 試行を使い切った、結果の有無で分岐 (コードの変更)
  6. 作業セッションコードの変更

    行動停滞スイープ:キューにない vs 試行を使い切った、結果の有無で分岐

    • 引き継ぎ1サイクル→ 開発環境のスイープ:候補200 → 移動106 · 再投入2 · エラー0 (成果物)
  7. 成果物成果物

    成果物開発環境のスイープ:候補200 → 移動106 · 再投入2 · エラー0

    • 記録された実行ではない解釈の限界→ 106件は翻訳の成功ではない (成果物)
  8. 成果物成果物

    指針 · 未確認106件は翻訳の成功ではない

背景
BullMQのfailedReason、サブプロセスの終了コード、draftに残ったジョブを突き合わせ、継承されたNODE_OPTIONSがサブプロセスで衝突していることを見つけました。その後、同じ状況をキューの状態として見えるようにしました。
結果
停滞したジョブは、キューにないものと試行を使い切ったものに分けられ、後者は結果の有無に応じて理由とともにneeds_reviewまたはneeds_credentialへ移ります。人によるレビューはそのまま残ります。
限界
同時実行の上限はプロセス単位です。確認した資料では元の実行ログが得られず、当時のモデルとeffortが記録されていないため、レイテンシの数値は省いています。ビルドとリリースのコードだけでは、公開デプロイの根拠になりません。
根拠と残る限界
  • CHANGELOGには並列adapterブランチの提案が記録されていますが、実際の並列実行の記録としては扱っていません。
  • 200件の残りは、この記録では内訳を示していません。