---
name: review-plan-diff
description: 実装完了後に、確定プラン (finalize-plan 出力)、または DD 該当タスクを転記した簡易プランと実装後の diff を突き合わせ、実装漏れ・仕様逸脱・計画外差異を検出したいときに使用する。「プランと突き合わせて」「実装漏れがないか見て」「diffがプラン通りか確認して」等の依頼で起動する。実案件 dogfood (2026-07-06) で実装漏れ2件 (計画済みテストの未実装) をCriticalとして検出した検査を独立skill化したもの。
argument-hint: "[確定プランファイルパス（省略可）] [起点ブランチ（省略可）]"
---

# review-plan-diff

確定プラン (`/finalize-plan` 出力)、または DD 該当タスクを転記した簡易プランと実装後の diff を突き合わせ、実装漏れ・仕様逸脱・計画外差異を Critical/Major/Minor で判定する検査。

判定を行う `agents/plan-diff-reviewer.md` は、廃止された仕様→PR チェーン自動遷移オーケストレータの一部だった検査を移設したものである。同オーケストレータは実案件 dogfood (2026-07-06) で実装リードタイムが遅すぎる (実装フェーズだけで 5.2 時間) ことを理由に利用者が廃止を決定したが、この突き合わせ検査自体は遅さの原因ではなく、同 dogfood で最も欠陥を検出した部品だった (実装漏れの Critical 2 件 — 計画済みだったテストの未実装 — を検出)。廃止の巻き添えにせず単独起動できる skill として救出した。

## Arguments

`$ARGUMENTS`: 確定プランファイルパス (省略可) 起点ブランチ (省略可)

## ワークフロー

### Step 1: 入力の特定

1. **確定プランファイルパス**: 以下の優先順で決定する。
   - `$ARGUMENTS` が指定されていればそれを採用する (委譲実行時は起動プロンプト本文で明示されたパスを `$ARGUMENTS` と同格に扱う)
   - 省略されている場合、現在のセッションコンテキストに既出のプランファイルパス (典型的には `~/.claude/plans/*.md`、`/finalize-plan` の出力先) があればそれを採用する (単独起動時のみ有効な経路)
   - どちらも無い場合、`AskUserQuestion` が利用可能ツール一覧にあれば以下を表示してユーザーに尋ね、返答を待って停止する。無ければ「## 委譲実行」節に従う:
     「突き合わせ対象の確定プランファイルパスを教えてください。」
2. **分析ファイルパス**: プランファイルの拡張子前に `.analysis` を挿入して導出する (例 `feature-xxx.md` → `feature-xxx.analysis.md`)。存在しない場合は Step 3 の起動プロンプトに「無し」と渡し、AC/MECE分析結果との突き合わせは対象外にする。QA-ID カバレッジマトリクスがプラン内に存在しない場合 (finalize-plan 未経由の簡易プランを対象にする場合等)、その不在自体を乖離・判定不能として報告せず、プラン本文の記載項目と diff のみで突き合わせる。
3. **対象リポジトリの絶対パス**: 起動プロンプト本文で明示されていればそれを採用する (委譲実行時)。明示が無ければ現在の作業ディレクトリを採用する (単独起動時)。nested 起動する `plan-diff-reviewer` は呼び出し元の作業ディレクトリを引き継がないため、Step 3 の diff 取得コマンドにはこの絶対パスを `git -C` で明示する。

### Step 2: 比較対象 diff の決定

1. **起点ブランチ**: diff の比較元 (親) となるブランチを指す。プラン記載の実装対象ブランチ (作業ブランチ、diff の HEAD 側) とは別物であり、両者を混同しない。以下の優先順で決定する:
   - `$ARGUMENTS` の第 2 引数、または委譲実行時に起動プロンプト本文で明示されていればそれを採用する
   - プランファイルまたは同ディレクトリの `<プラン名>.preflight.md` に「起点ブランチ」とラベル付きで記載されていればそれを採用する。「ブランチ戦略」等の節が作業ブランチ (実装を継続する現ブランチ) を説明しているだけの記載は、起点ブランチのラベルが無い限り採用しない
   - 記載が無ければ、`AskUserQuestion` が利用可能ツール一覧にあればユーザーに尋ね、返答を待って停止する。無ければ「## 委譲実行」節に従う:
     「diff の起点ブランチを教えてください (例: develop、main)。」
   - 起点ブランチの確定に `git branch` 等リポジトリの分岐関係の参照は用いない。分岐関係の推定は本 skill の対象外であり、上記の情報源のみで判断する
2. 比較対象は `<起点ブランチ>..HEAD` とする。

### Step 3: レビューエージェント起動

`Task` ツール (`subagent_type: general-purpose`、本リポ標準の dispatch パターン) で `plan-diff-reviewer` を起動する。

- `Task` が利用可能ツール一覧に無い場合: 本 Step は実行せず「## 委譲実行」節の fallback (自分で判定する) に切り替える。
- 指示ファイルパスの `${CLAUDE_PLUGIN_ROOT}` が生文字列のまま残っている場合: `Task` 起動は継続したうえで、「## 委譲実行」節に従い絶対パスへ読み替えてから埋め込む。

```
Task:
  subagent_type: general-purpose
  prompt: |
    あなたはプラン突き合わせレビューエージェントです。
    以下の指示ファイルを読み、その内容に厳密に従ってレビューを実行してください。

    指示ファイル: ${CLAUDE_PLUGIN_ROOT}/skills/review-plan-diff/agents/plan-diff-reviewer.md

    ## 入力
    - 確定プランファイルパス: {Step 1 で特定したパス}
    - 分析ファイルパス: {Step 1 で導出したパス、無ければ「無し」}
    - 対象 diff の取得コマンド: git -C {Step 1 で特定した対象リポジトリの絶対パス} diff {Step 2 で決定した起点ブランチ}..HEAD

    指示ファイルのワークフローに従い、プラン記載の各項目 (AC・QA-ID で定義された変更範囲) と diff を突き合わせてください。
    結果は指示ファイルの「結果出力」フォーマットに厳密に従ってください。
```

### Step 4: 結果報告

エージェントの出力をそのままユーザーへ提示し、総合判定に応じて以下を付す:

- **Critical あり**: 該当行を「未実装の計画項目」として提示し、修正を促す
- **Major/Minor のみ**: 一覧を提示する (修正するかどうかの判断はユーザーに委ねる)
- **乖離なし**: そのまま完了報告する

## 委譲実行 (subagent として起動された場合)

`AskUserQuestion` が利用可能ツール一覧に無い場合、Step 1・2 の「ユーザーに尋ね、返答を待って停止する」は以下に読み替える。単独起動時の動作は変えない。

- **入力が確定できない場合**: 質問文を出して待つ代わりに、「不足入力: 確定プランファイルパス」または「不足入力: 起点ブランチ」を最終メッセージに含め、その場で終了する (返答を待つために停止しない)。
- **`Task` が利用可能ツール一覧に無い場合**: Step 3 は実行できないため、`agents/plan-diff-reviewer.md` を Read し、そのワークフローに従って自分で突き合わせ判定を行う。
- **`${CLAUDE_PLUGIN_ROOT}` が生文字列のまま見える場合**: 今読んでいる本 SKILL.md が置かれているディレクトリを skill root とみなし、`${CLAUDE_PLUGIN_ROOT}/skills/review-plan-diff/` をその絶対パスに読み替えてから Step 3 のプロンプトへ埋め込む。

## Gotchas（観測済みの罠 — 失敗を 1 件観測するたび 1 行追記）

- `${CLAUDE_PLUGIN_ROOT}` 解決規則が「## 委譲実行」節にのみ書かれているため、単独起動時にも Step 3 の dispatch 文面から参照される規則だと見落としやすい (実行評価で複数回指摘された。誤判定には至っていないため未修正)

## 併用推奨 skill

- `/finalize-plan` — 突き合わせ対象の QA-ID カバレッジマトリクスを供給する
- `/qa-ui` — 本検査の後段で UI 面の検証を行う
