
レビューが見つけた競合状態、原因別に戻した停滞ジョブ
指針とコミットに、実装はClaude、レビューはCodexと名前が残る事例と、停滞したジョブを診断できるようにした事例です。
May 19, 2026
クォータが尽きたら停止する変更を、レビューが見つけた競合状態も含めて同じPRで修正しました
人人
行動クォータが尽きたら支出を停止 · 自動フォールバックなし
- 引き継ぎ実装の制約→ チェックポイント · 停止 · 手動再開を実装 (Claude)
コーディングエージェントClaude
行動チェックポイント · 停止 · 手動再開を実装
- 引き継ぎ同じPRでのレビュー→ 指摘:競合状態 · 状態遷移の重複 (Codex)
レビュー · 検証Codex
観測 · 指摘指摘:競合状態 · 状態遷移の重複
- 差し戻し競合状態 · 冪等性→ 同じPRで:行ロック · 一意のスコアキー · アトミックな遷移 (同じPR)
成果物同じPR
成果物同じPRで:行ロック · 一意のスコアキー · アトミックな遷移
- 引き継ぎ→ ローカルのフィクスチャ · DB統合検査の記録 (同じPR)
成果物同じPR
成果物ローカルのフィクスチャ · DB統合検査の記録
- 記録された実行ではない確認した範囲→ 新しいCIや本番デプロイの結果は収集していない (同じPR)
成果物同じ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
停滞したジョブを診断できるようにし、原因別に戻しました
開発対象翻訳ワーカー · キュー
観測 · 指摘draftに残ったジョブ · 試行を使い切り
- 引き継ぎ観測値→ failedReason · 終了コード · draft状態を照合 (開発者)
人開発者
行動failedReason · 終了コード · draft状態を照合
- 引き継ぎ→ 原因:継承されたNODE_OPTIONSがサブプロセスで衝突 (開発者)
人開発者
観測 · 指摘原因:継承されたNODE_OPTIONSがサブプロセスで衝突
- 差し戻し継承されたオプションの衝突→ NODE_OPTIONSを除去 · プロセス単位の同時実行上限 (コードの変更)
作業セッションコードの変更
行動NODE_OPTIONSを除去 · プロセス単位の同時実行上限
- 引き継ぎ→ キューの状態:waiting · active · failed · stale (コードの変更)
作業セッションコードの変更
行動キューの状態:waiting · active · failed · stale
- 引き継ぎ→ 停滞スイープ:キューにない vs 試行を使い切った、結果の有無で分岐 (コードの変更)
作業セッションコードの変更
行動停滞スイープ:キューにない vs 試行を使い切った、結果の有無で分岐
- 引き継ぎ1サイクル→ 開発環境のスイープ:候補200 → 移動106 · 再投入2 · エラー0 (成果物)
成果物成果物
成果物開発環境のスイープ:候補200 → 移動106 · 再投入2 · エラー0
- 記録された実行ではない解釈の限界→ 106件は翻訳の成功ではない (成果物)
成果物成果物
指針 · 未確認106件は翻訳の成功ではない
- 背景
- BullMQのfailedReason、サブプロセスの終了コード、draftに残ったジョブを突き合わせ、継承されたNODE_OPTIONSがサブプロセスで衝突していることを見つけました。その後、同じ状況をキューの状態として見えるようにしました。
- 結果
- 停滞したジョブは、キューにないものと試行を使い切ったものに分けられ、後者は結果の有無に応じて理由とともにneeds_reviewまたはneeds_credentialへ移ります。人によるレビューはそのまま残ります。
- 限界
- 同時実行の上限はプロセス単位です。確認した資料では元の実行ログが得られず、当時のモデルとeffortが記録されていないため、レイテンシの数値は省いています。ビルドとリリースのコードだけでは、公開デプロイの根拠になりません。
根拠と残る限界
- CHANGELOGには並列adapterブランチの提案が記録されていますが、実際の並列実行の記録としては扱っていません。
- 200件の残りは、この記録では内訳を示していません。