Skip to content

[issue-plan-strategy] 個別PRの cross-review がスキップされ、重大バグが release 統合後まで残る #35

Description

@takemi-ohama

概要

ndf:issue-plan-strategy(multi-PR ワークフロー)の実運用で、個別 PR の cross-review(codex+gemini 収束ループ)がスキップされ、軽量レビューのまま release ブランチへ merge されてしまう問題が再現しました。結果として、本来 individual PR 段階で潰せたはずの重大バグが release 統合後まで残り、release PR でまとめて検出される(=アンチパターン「release PR で個別 PR 範囲の指摘を解決」に該当)状態になりました。

実際に起きたこと(再現ケース)

ある PLAN(6個の個別 PR + release PR)の実装フェーズで、メインエージェントが:

  1. 個別 PR (ndf/cross-review: gemini が result.json を TMP_DIR に書けず monitor.py が NO_RESULT を返す #7Fix: fix skill の「コードコメント」→「インラインコメント」修正 #12) を ndf:code-reviewer エージェント(単一視点)でだけレビューして release へ squash merge した。/ndf:cross-review は回さなかった。
  2. 全部 merge し終えてから、ユーザー指摘で release PR にだけ /ndf:cross-review を実行したところ、8 ラウンドかけて以下のような重大バグが続々と検出された:
    • BigQuery view の結合ミス(会員の最新 lead を使い、別申込の特徴量が混入=train/serve parity を直接破壊)
    • 特徴量「年齢」が CURRENT_DATE() 基準で point-in-time leakage / feature drift(ML 致命)
    • 採点対象の期間判定が会員作成日基準で、既存会員の新規申込(全体の約14%)を丸ごと取りこぼし
    • 外部 API 配信の再送不能・重複再送など信頼性欠陥の連鎖
    • 作業生成物(*.diff / pr_*.json 等)の誤コミット

これらは ndf:code-reviewer の単発レビューでは出ず、codex+gemini の cross-review で初めて検出された。つまり個別 PR 段階で cross-review していれば各 PR 内で潰せたはずのものが、統合後にまとめて出た。

根本原因(推測)

  1. Step 6 が cross-review を必須化していないissue-plan-strategy の Step 6 は「PR 作成前 self review = /ndf:review-branch / GitHub 上単体 = /ndf:review / 収束ループ = /ndf:cross-review」と選択肢として並列に提示しており、「個別 PR は cross-review 必須」と読めない。実装を急ぐと最も軽い経路に流れる。
  2. ndf:code-reviewer(単一エージェント)で代替してしまえる余地がある。code-reviewer は単一視点で、codex+gemini の独立 2 エンジン収束より検出力が低い(今回まさにそれが顕在化)。
  3. メインエージェント側の判断で「個別は軽く、release で厚く」に最適化しがちで、Step 7(release は結合観点のみ)の前提(=個別は既に cross-review 済み)が崩れる。

影響

  • 個別 PR が既に close/merge 済みのため、release 段階で見つかったバグの修正コミットが「どの個別 PR の意図か」を辿りにくい(skill 自身がアンチパターンとして挙げている状態)。
  • 重大バグ(parity 破壊・leakage・取りこぼし)が統合後まで生存する。
  • release PR の cross-review が無ければ完全に見逃していた可能性が高い。

提案

issue-plan-strategy および関連ドキュメントを以下のように強化してほしい:

  1. Step 6 を「個別 PR は原則 /ndf:cross-review 必須」と明記する。/ndf:review-branch は「PR 作成前の self review」に限定し、GitHub 上の収束は cross-review を既定とする。ndf:code-reviewer 単発での代替 merge を非推奨として明示。
  2. release PR の前提条件をチェックリスト化: 「全個別 PR が cross-review approved 済みであること」を release PR Ready の前提に入れる(Step 7「release は結合観点のみ」と整合させる)。
  3. 個別 cross-review を省略した場合のフォールバックを公式化: どうしても省略する運用なら「release PR で /ndf:cross-review を必須実行」と明記(今回の救済パターンの制度化)。ただし手戻りが増える旨も併記。
  4. アンチパターン表に追記: 「個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する」を追加。
  5. 可能なら、ワークフロー実行時に「個別 PR が cross-review 未実施のまま merge されようとしている」ことを検知・警告する仕組み(state やチェック)も検討。

環境

  • plugin: ndf 4.16.1
  • 関連 skill: ndf:issue-plan-strategy, ndf:cross-review, ndf:code-reviewer

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions