背景 / コンテキスト
/forge:review の reviewer 遅延調査(2026-07-15)の過程で発見した。plugins/forge/agents/reviewer.md のワークフロー構成が、engine=codex 時にも reviewer Agent(sonnet)自身に全参照文書の精読と自前レビューを実行させ得る書き方になっており、codex への委譲と二重になる。
現象(実際の動作)
agents/reviewer.md のワークフローは以下の直列構成で書かれている:
- Phase 1:
refs.yaml の全 ssot_refs[].path / reference_docs / related_code を Read する(engine 条件なし)
- Phase 2: レビュー実行(P1 → P2 → P3 順次評価)(engine=claude 限定の条件が書かれていない)
- Phase 3: severity 委譲経路(同上)
- Phase 4: エンジン別の実行(ここで初めて engine=codex / engine=claude が分岐)
engine=codex では、実レビューは run_review_engine.sh 経由の codex exec が行い、codex はプロンプトに列挙されたパス(「参考文書 (必ず読んでからレビュー)」)を自力で Read する。したがって reviewer Agent 自身が全文書を精読し P1→P2→P3 の評価を行う必要はないが、Phase 1〜4 を字義通りに順次実行する Agent は自前レビューを一巡してから codex を回す二重レビューになり得る。全 ssot_refs(目安 6〜8 文書)+ reference_docs + related_code(上限 10 ファイル程度)+ target_files の読み込みと評価が重複し、レビュー全体の所要時間・トークン消費を大きく増やす。
期待動作
engine=codex の場合、reviewer Agent は Phase 4 のプロンプト構築に必要な最小限の Read(criteria_path の中身引用等)に留め、Phase 2〜3(自前の P1→P2→P3 評価)を実行せずに run_review_engine.sh の起動と構造化変換に進むこと。Phase 2〜3 が engine=claude(および Codex 不在フォールバック)限定であることが agent 定義上明示されていること。
再現手順
/forge:review code --files <対象> を実行する(engine=codex がデフォルト)
forge:reviewer Agent のトランスクリプトで、run_review_engine.sh 起動前に全 ssot_refs / reference_docs / related_code の Read と P1→P2→P3 の自前評価が行われているかを確認する
再現はモデルの指示解釈に依存するため確率的だが、agent 定義の記述構造上、二重実行を否定する記述が存在しない。
環境情報
- リポジトリ: BlueEventHorizon/bw-cc-plugins(develop ブランチ、
plugins/forge/agents/reviewer.md)
forge:reviewer agent 定義: model: sonnet / engine=codex デフォルト(codex-cli 0.144.4)
重大度
軽微
証跡
なし
原因
agents/reviewer.md のワークフロー節が「Phase 1(全文書 Read)→ Phase 2〜3(レビュー実行)→ Phase 4(エンジン別の実行)」の無条件直列で記述されており、Phase 1〜3 に engine 分岐(engine=codex では Phase 2〜3 をスキップし Phase 1 を最小化する)の明示がないため。
実装計画
関連ドキュメント
仕様書
参考 PR(実装パターン)
実装スコープ
| レイヤー |
実装内容 |
ファイルパス |
| agent 定義 |
Phase 1 の Read 範囲最小化・Phase 2/3 を engine=claude 限定に明記 |
plugins/forge/agents/reviewer.md |
| 設計書 |
§Phase4① の P1→P2→P3 記述を DES-029 §4.2 シーケンス図と整合させる |
docs/specs/forge/design/DES-015_review_workflow_design.md |
| テスト |
engine 分岐の静的回帰テスト追加(TestReviewerEngineScopedPhases) |
tests/forge/review/test_codex_launch_path.py |
スコープ外
| 項目 |
理由 |
| DES-029 自体の変更 |
§4.2 シーケンス図は既に alt engine=codex / else engine=claude で P1→P2→P3 評価を正しく限定済みのため不要 |
TODO
実装する
テストを書く
確認・レビュー準備を行う
完了する
背景 / コンテキスト
/forge:reviewの reviewer 遅延調査(2026-07-15)の過程で発見した。plugins/forge/agents/reviewer.mdのワークフロー構成が、engine=codex 時にも reviewer Agent(sonnet)自身に全参照文書の精読と自前レビューを実行させ得る書き方になっており、codex への委譲と二重になる。現象(実際の動作)
agents/reviewer.mdのワークフローは以下の直列構成で書かれている:refs.yamlの全ssot_refs[].path/reference_docs/related_codeを Read する(engine 条件なし)engine=codex では、実レビューは
run_review_engine.sh経由のcodex execが行い、codex はプロンプトに列挙されたパス(「参考文書 (必ず読んでからレビュー)」)を自力で Read する。したがって reviewer Agent 自身が全文書を精読し P1→P2→P3 の評価を行う必要はないが、Phase 1〜4 を字義通りに順次実行する Agent は自前レビューを一巡してから codex を回す二重レビューになり得る。全 ssot_refs(目安 6〜8 文書)+ reference_docs + related_code(上限 10 ファイル程度)+ target_files の読み込みと評価が重複し、レビュー全体の所要時間・トークン消費を大きく増やす。期待動作
engine=codex の場合、reviewer Agent は Phase 4 のプロンプト構築に必要な最小限の Read(
criteria_pathの中身引用等)に留め、Phase 2〜3(自前の P1→P2→P3 評価)を実行せずにrun_review_engine.shの起動と構造化変換に進むこと。Phase 2〜3 が engine=claude(および Codex 不在フォールバック)限定であることが agent 定義上明示されていること。再現手順
/forge:review code --files <対象>を実行する(engine=codex がデフォルト)forge:reviewerAgent のトランスクリプトで、run_review_engine.sh起動前に全 ssot_refs / reference_docs / related_code の Read と P1→P2→P3 の自前評価が行われているかを確認する再現はモデルの指示解釈に依存するため確率的だが、agent 定義の記述構造上、二重実行を否定する記述が存在しない。
環境情報
plugins/forge/agents/reviewer.md)forge:revieweragent 定義:model: sonnet/ engine=codex デフォルト(codex-cli 0.144.4)重大度
軽微
証跡
なし
原因
agents/reviewer.mdのワークフロー節が「Phase 1(全文書 Read)→ Phase 2〜3(レビュー実行)→ Phase 4(エンジン別の実行)」の無条件直列で記述されており、Phase 1〜3 に engine 分岐(engine=codex では Phase 2〜3 をスキップし Phase 1 を最小化する)の明示がないため。実装計画
関連ドキュメント
仕様書
参考 PR(実装パターン)
実装スコープ
plugins/forge/agents/reviewer.mddocs/specs/forge/design/DES-015_review_workflow_design.mdtests/forge/review/test_codex_launch_path.pyスコープ外
alt engine=codex / else engine=claudeで P1→P2→P3 評価を正しく限定済みのため不要TODO
実装する
テストを書く
確認・レビュー準備を行う
完了する