Skip to content

[Bug] engine=codex 時に reviewer が全 ssot_refs/参考文書を Read し自前レビューまで実行し得る二重レビュー構造 #210

Description

@BlueEventHorizon

背景 / コンテキスト

/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 定義上明示されていること。

再現手順

  1. /forge:review code --files <対象> を実行する(engine=codex がデフォルト)
  2. 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 を最小化する)の明示がないため。

実装計画

関連ドキュメント

仕様書

種類 ドキュメント
設計書(reviewer 起動シーケンス) DES-029
設計書(review フロー) DES-015

参考 PR(実装パターン)

PR 参考ポイント
#206 [Fix] forge:reviewer Agent が run_review_engine.sh を同期実行するよう明記 reviewer.md 記述明確化 + DES-029 + テストの 3 ファイル構成(Issue #200
#214 [Fix] reviewer.md の Bash timeout パラメータ未指定による codex レビュー破棄を修正 reviewer.md 記述明確化 + テストの 2 ファイル構成(Issue #207

実装スコープ

レイヤー 実装内容 ファイルパス
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

実装する

  • reviewer.md Phase 1/2/3 に engine 条件を明記
  • DES-015 §Phase4① を DES-029 と整合させる

テストを書く

  • test_codex_launch_path.py に TestReviewerEngineScopedPhases を追加(4 テスト)

確認・レビュー準備を行う

  • テストを実行する(全 1459 件 OK, skipped=1)

完了する

  • PR を作成する
  • レビューに対応する

Metadata

Metadata

Assignees

No one assigned

    Labels

    BUGSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions