From 56317153a6123e600e96f71cc8c043e91ffa4b7f Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Thu, 16 Jul 2026 23:26:43 +0000 Subject: [PATCH 01/10] =?UTF-8?q?Docs:=20issue-plan-strategy=20=E3=81=AE?= =?UTF-8?q?=E5=80=8B=E5=88=A5PR=20cross-review=20=E3=82=92=E5=8E=9F?= =?UTF-8?q?=E5=89=87=E5=BF=85=E9=A0=88=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit issue #35 対応。multi-PR ワークフローで個別 PR が軽量レビューだけで release ブランチへ merge され、重大バグが release 統合後まで残る運用を防ぐ。 - Step 6: 個別 PR は原則 /ndf:cross-review 必須とし、codex + gemini の APPROVE 収束を確認してから merge する方針を明記 - 軽量レビューの位置づけを限定 (/ndf:review-branch=セルフレビュー、 /ndf:review=例外的単発確認)。code-reviewer / 単発を cross-review の代替にしない - Step 8: Ready 前チェックに「全個別 PR が cross-review approved 済み」を追加。 省略時フォールバック (release PR で cross-review 必須だが手戻り増) を明記 - アンチパターンに「cross-review せず単発レビューだけで release へ merge」を追加 - cross-review 側の関連リンクに issue-plan-strategy での必須運用を補足 - runtime 配布物 (claude/codex/kiro) を build-runtime-plugins.sh で同期 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- ...sue-35-issue-plan-cross-review-required.md | 87 +++++++++++++++++++ .../ndf-claude/skills/cross-review/SKILL.md | 3 + .../skills/issue-plan-strategy/SKILL.md | 31 +++++-- .../ndf-codex/skills/cross-review/SKILL.md | 3 + .../skills/issue-plan-strategy/SKILL.md | 31 +++++-- plugins/ndf-kiro/skills/cross-review/SKILL.md | 3 + .../skills/issue-plan-strategy/SKILL.md | 31 +++++-- .../ndf-shared/skills/cross-review/SKILL.md | 3 + .../skills/issue-plan-strategy/SKILL.md | 31 +++++-- 9 files changed, 187 insertions(+), 36 deletions(-) create mode 100644 issues/issue-35-issue-plan-cross-review-required.md diff --git a/issues/issue-35-issue-plan-cross-review-required.md b/issues/issue-35-issue-plan-cross-review-required.md new file mode 100644 index 0000000..62ebaac --- /dev/null +++ b/issues/issue-35-issue-plan-cross-review-required.md @@ -0,0 +1,87 @@ +# Issue 35: issue-plan-strategy 個別 PR cross-review 必須化 + +## 関連リンク + +- GitHub Issue: https://github.com/devbasex/ai-plugins/issues/35 +- 関連 Skill: `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` +- 関連 Skill: `plugins/ndf-shared/skills/cross-review/SKILL.md` + +## 概要 + +`ndf:issue-plan-strategy` の multi-PR ワークフローで、個別 PR のレビューが軽量レビューだけで済まされ、重大バグが release 統合後まで残る運用を防ぐ。 + +Step 6 を「個別 PR は原則 `/ndf:cross-review` 必須」と読める内容に変更し、release PR Ready 前の前提条件とアンチパターンを明文化する。 + +## 問題・背景 + +現行の Step 6 は `/ndf:review-branch`、`/ndf:review`、`/ndf:cross-review` を選択肢として並べているため、個別 PR を `code-reviewer` や単発レビューだけで release ブランチへ merge できるように読める。 + +その運用では、release PR 側の cross-review が個別 PR 範囲の重大バグをまとめて検出する形になり、ワークフロー自身が禁止している「release PR で個別 PR 範囲の指摘を解決する」状態に近づく。 + +## 修正対象 + +- `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` +- `plugins/ndf-shared/skills/cross-review/SKILL.md` +- `plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md` +- `plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md` +- `plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md` +- 必要に応じて `docs/ndf-plugin-reference.md` + +runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runtime-plugins.sh` で同期する。 + +## タスク分解 + +### Task 1: Step 6 のレビュー方針を強化 + +- **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` +- **変更内容:** 個別 PR は原則 `/ndf:cross-review ` を実行し、codex + gemini の収束を確認してから release ブランチへ merge する、と明記する。 + +### Task 2: 軽量レビューの位置づけを限定 + +- **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` +- **変更内容:** `/ndf:review-branch` は PR 作成前のセルフレビュー、`/ndf:review` は例外的な単発確認に限定する。`ndf:code-reviewer` 単発レビューを cross-review の代替にしない方針を明記する。 + +### Task 3: release PR Ready 前チェックを追加 + +- **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` +- **変更内容:** Step 8 の body 最終化 / Ready for review 前チェックに「全個別 PR が cross-review approved 済み」を追加する。省略した場合のフォールバックとして、release PR で `/ndf:cross-review` を必須実行するが、手戻りが増えることを明記する。 + +### Task 4: アンチパターン追記 + +- **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` +- **変更内容:** 「個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する」をアンチパターン表に追加する。 + +### Task 5: cross-review 側との整合確認 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/SKILL.md` +- **変更内容:** issue-plan-strategy から見た cross-review の役割と矛盾がないか確認する。必要なら関連リンクまたは利用場面の説明を補足する。 + +### Task 6: runtime 配布物同期 + +- **対象ファイル:** `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` +- **変更内容:** `bash scripts/build-runtime-plugins.sh` を実行し、shared の変更を runtime 別配布物へ反映する。 + +## PR 分割計画 + +単一 PR で進める。変更は主に skill 文書の運用ルール強化で、コード変更や複数機能の段階的 merge は不要。 + +| PR # | branch 名 | 概要 | 依存 | 並行可否 | +|---|---|---|---|---| +| 1 | `docs/issue-35-require-cross-review-per-pr` | issue-plan-strategy の個別 PR cross-review 必須化と runtime 同期 | なし | - | + +release branch: なし +base branch: `main` + +## 影響範囲 + +- `ndf:issue-plan-strategy` の multi-PR 実行手順 +- 個別 PR と release PR のレビュー責務分担 +- release PR Ready 前のチェックリスト +- runtime 別 NDF plugin 配布物 + +## テスト計画 + +- [ ] `bash scripts/build-runtime-plugins.sh --check` +- [ ] `bash scripts/validate-runtime-plugins.sh` +- [ ] Markdown link check が通ることを確認する +- [ ] `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` と runtime 別コピーに drift がないことを確認する diff --git a/plugins/ndf-claude/skills/cross-review/SKILL.md b/plugins/ndf-claude/skills/cross-review/SKILL.md index 5a63867..62174ac 100644 --- a/plugins/ndf-claude/skills/cross-review/SKILL.md +++ b/plugins/ndf-claude/skills/cross-review/SKILL.md @@ -472,4 +472,7 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:codex` — codex CLI 呼び出し手順 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 +- `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 + `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md index 4275a37..4a092da 100644 --- a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md @@ -64,7 +64,7 @@ issue 取得 ─┤ │ 既存 plan ─▶│ Step 3: release branch 作成 + Draft release PR │ │ Step 4: 個別 PR ブランチ作成 + 各 Draft PR (release base) │ Step 5: git worktree で並行開発 (依存関係を考慮) │ - │ Step 6: 個別 PR ごとに /ndf:review or /ndf:cross-review + │ Step 6: 個別 PR ごとに /ndf:cross-review (原則必須) │ │ → /ndf:fix → merge into release │ │ Step 7: release ブランチで結合テスト相当のレビュー │ │ Step 8: release PR body 最終化 → Ready & merge │ @@ -225,16 +225,22 @@ git worktree add ../--ui feature/-ui ## Step 6: 個別 PR のレビュー -**レビューは原則個別 PR 単位**で行う: +**個別 PR は原則 `/ndf:cross-review ` を必須**とする。codex + gemini の両者が +`APPROVE` に収束したことを確認してから Draft を解除し、release ブランチへ merge する。 +個別 PR で重大バグを取りこぼすと、release PR 側の cross-review がまとめて検出する形に +なり、本 skill が禁止する「release PR で個別 PR 範囲の指摘を解決する」状態に陥る。 -| 用途 | コマンド | -|---|---| -| PR 作成前のセルフレビュー | `/ndf:review-branch` | -| GitHub 上の単体レビュー | `/ndf:review ` | -| codex + gemini 両方の収束ループ | `/ndf:cross-review ` | -| 指摘の修正 | `/ndf:fix ` | +| 用途 | コマンド | 位置づけ | +|---|---|---| +| PR 作成前のセルフレビュー | `/ndf:review-branch` | push / PR 化の前段。cross-review の代替にはしない | +| 個別 PR の収束レビュー (原則必須) | `/ndf:cross-review ` | codex + gemini 両方の APPROVE 収束を確認する本線 | +| GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | +| 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -個別 PR が APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 +- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の + 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため + 取りこぼしが残る。 +- 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -264,11 +270,17 @@ gh pr edit --title "..." --body "..." 最終化のチェック観点 (Step 3 のレビュアー視点の原則を満たすこと): +- [ ] **全個別 PR が `/ndf:cross-review` で APPROVE 収束済み** (Step 6 の前提。未実施の PR が残っていないこと) - [ ] 「何のために」「何を」が個別 PR や plan ファイルを辿らずに理解できる - [ ] 実装中の方針変更・スコープ増減が body に反映されている - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して +> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が +> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の +> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 + ### Draft 解除と merge release PR が APPROVE されたら: @@ -319,6 +331,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | +| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | diff --git a/plugins/ndf-codex/skills/cross-review/SKILL.md b/plugins/ndf-codex/skills/cross-review/SKILL.md index 208437b..6fb2d17 100644 --- a/plugins/ndf-codex/skills/cross-review/SKILL.md +++ b/plugins/ndf-codex/skills/cross-review/SKILL.md @@ -472,4 +472,7 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:codex` — codex CLI 呼び出し手順 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 +- `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 + `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md index 4275a37..4a092da 100644 --- a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md @@ -64,7 +64,7 @@ issue 取得 ─┤ │ 既存 plan ─▶│ Step 3: release branch 作成 + Draft release PR │ │ Step 4: 個別 PR ブランチ作成 + 各 Draft PR (release base) │ Step 5: git worktree で並行開発 (依存関係を考慮) │ - │ Step 6: 個別 PR ごとに /ndf:review or /ndf:cross-review + │ Step 6: 個別 PR ごとに /ndf:cross-review (原則必須) │ │ → /ndf:fix → merge into release │ │ Step 7: release ブランチで結合テスト相当のレビュー │ │ Step 8: release PR body 最終化 → Ready & merge │ @@ -225,16 +225,22 @@ git worktree add ../--ui feature/-ui ## Step 6: 個別 PR のレビュー -**レビューは原則個別 PR 単位**で行う: +**個別 PR は原則 `/ndf:cross-review ` を必須**とする。codex + gemini の両者が +`APPROVE` に収束したことを確認してから Draft を解除し、release ブランチへ merge する。 +個別 PR で重大バグを取りこぼすと、release PR 側の cross-review がまとめて検出する形に +なり、本 skill が禁止する「release PR で個別 PR 範囲の指摘を解決する」状態に陥る。 -| 用途 | コマンド | -|---|---| -| PR 作成前のセルフレビュー | `/ndf:review-branch` | -| GitHub 上の単体レビュー | `/ndf:review ` | -| codex + gemini 両方の収束ループ | `/ndf:cross-review ` | -| 指摘の修正 | `/ndf:fix ` | +| 用途 | コマンド | 位置づけ | +|---|---|---| +| PR 作成前のセルフレビュー | `/ndf:review-branch` | push / PR 化の前段。cross-review の代替にはしない | +| 個別 PR の収束レビュー (原則必須) | `/ndf:cross-review ` | codex + gemini 両方の APPROVE 収束を確認する本線 | +| GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | +| 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -個別 PR が APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 +- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の + 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため + 取りこぼしが残る。 +- 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -264,11 +270,17 @@ gh pr edit --title "..." --body "..." 最終化のチェック観点 (Step 3 のレビュアー視点の原則を満たすこと): +- [ ] **全個別 PR が `/ndf:cross-review` で APPROVE 収束済み** (Step 6 の前提。未実施の PR が残っていないこと) - [ ] 「何のために」「何を」が個別 PR や plan ファイルを辿らずに理解できる - [ ] 実装中の方針変更・スコープ増減が body に反映されている - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して +> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が +> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の +> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 + ### Draft 解除と merge release PR が APPROVE されたら: @@ -319,6 +331,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | +| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | diff --git a/plugins/ndf-kiro/skills/cross-review/SKILL.md b/plugins/ndf-kiro/skills/cross-review/SKILL.md index 709c281..393d7d2 100644 --- a/plugins/ndf-kiro/skills/cross-review/SKILL.md +++ b/plugins/ndf-kiro/skills/cross-review/SKILL.md @@ -472,4 +472,7 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:codex` — codex CLI 呼び出し手順 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 +- `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 + `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md index 4275a37..4a092da 100644 --- a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md @@ -64,7 +64,7 @@ issue 取得 ─┤ │ 既存 plan ─▶│ Step 3: release branch 作成 + Draft release PR │ │ Step 4: 個別 PR ブランチ作成 + 各 Draft PR (release base) │ Step 5: git worktree で並行開発 (依存関係を考慮) │ - │ Step 6: 個別 PR ごとに /ndf:review or /ndf:cross-review + │ Step 6: 個別 PR ごとに /ndf:cross-review (原則必須) │ │ → /ndf:fix → merge into release │ │ Step 7: release ブランチで結合テスト相当のレビュー │ │ Step 8: release PR body 最終化 → Ready & merge │ @@ -225,16 +225,22 @@ git worktree add ../--ui feature/-ui ## Step 6: 個別 PR のレビュー -**レビューは原則個別 PR 単位**で行う: +**個別 PR は原則 `/ndf:cross-review ` を必須**とする。codex + gemini の両者が +`APPROVE` に収束したことを確認してから Draft を解除し、release ブランチへ merge する。 +個別 PR で重大バグを取りこぼすと、release PR 側の cross-review がまとめて検出する形に +なり、本 skill が禁止する「release PR で個別 PR 範囲の指摘を解決する」状態に陥る。 -| 用途 | コマンド | -|---|---| -| PR 作成前のセルフレビュー | `/ndf:review-branch` | -| GitHub 上の単体レビュー | `/ndf:review ` | -| codex + gemini 両方の収束ループ | `/ndf:cross-review ` | -| 指摘の修正 | `/ndf:fix ` | +| 用途 | コマンド | 位置づけ | +|---|---|---| +| PR 作成前のセルフレビュー | `/ndf:review-branch` | push / PR 化の前段。cross-review の代替にはしない | +| 個別 PR の収束レビュー (原則必須) | `/ndf:cross-review ` | codex + gemini 両方の APPROVE 収束を確認する本線 | +| GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | +| 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -個別 PR が APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 +- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の + 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため + 取りこぼしが残る。 +- 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -264,11 +270,17 @@ gh pr edit --title "..." --body "..." 最終化のチェック観点 (Step 3 のレビュアー視点の原則を満たすこと): +- [ ] **全個別 PR が `/ndf:cross-review` で APPROVE 収束済み** (Step 6 の前提。未実施の PR が残っていないこと) - [ ] 「何のために」「何を」が個別 PR や plan ファイルを辿らずに理解できる - [ ] 実装中の方針変更・スコープ増減が body に反映されている - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して +> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が +> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の +> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 + ### Draft 解除と merge release PR が APPROVE されたら: @@ -319,6 +331,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | +| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | diff --git a/plugins/ndf-shared/skills/cross-review/SKILL.md b/plugins/ndf-shared/skills/cross-review/SKILL.md index 5a63867..62174ac 100644 --- a/plugins/ndf-shared/skills/cross-review/SKILL.md +++ b/plugins/ndf-shared/skills/cross-review/SKILL.md @@ -472,4 +472,7 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:codex` — codex CLI 呼び出し手順 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 +- `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 + `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md index 4275a37..4a092da 100644 --- a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md @@ -64,7 +64,7 @@ issue 取得 ─┤ │ 既存 plan ─▶│ Step 3: release branch 作成 + Draft release PR │ │ Step 4: 個別 PR ブランチ作成 + 各 Draft PR (release base) │ Step 5: git worktree で並行開発 (依存関係を考慮) │ - │ Step 6: 個別 PR ごとに /ndf:review or /ndf:cross-review + │ Step 6: 個別 PR ごとに /ndf:cross-review (原則必須) │ │ → /ndf:fix → merge into release │ │ Step 7: release ブランチで結合テスト相当のレビュー │ │ Step 8: release PR body 最終化 → Ready & merge │ @@ -225,16 +225,22 @@ git worktree add ../--ui feature/-ui ## Step 6: 個別 PR のレビュー -**レビューは原則個別 PR 単位**で行う: +**個別 PR は原則 `/ndf:cross-review ` を必須**とする。codex + gemini の両者が +`APPROVE` に収束したことを確認してから Draft を解除し、release ブランチへ merge する。 +個別 PR で重大バグを取りこぼすと、release PR 側の cross-review がまとめて検出する形に +なり、本 skill が禁止する「release PR で個別 PR 範囲の指摘を解決する」状態に陥る。 -| 用途 | コマンド | -|---|---| -| PR 作成前のセルフレビュー | `/ndf:review-branch` | -| GitHub 上の単体レビュー | `/ndf:review ` | -| codex + gemini 両方の収束ループ | `/ndf:cross-review ` | -| 指摘の修正 | `/ndf:fix ` | +| 用途 | コマンド | 位置づけ | +|---|---|---| +| PR 作成前のセルフレビュー | `/ndf:review-branch` | push / PR 化の前段。cross-review の代替にはしない | +| 個別 PR の収束レビュー (原則必須) | `/ndf:cross-review ` | codex + gemini 両方の APPROVE 収束を確認する本線 | +| GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | +| 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -個別 PR が APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 +- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の + 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため + 取りこぼしが残る。 +- 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -264,11 +270,17 @@ gh pr edit --title "..." --body "..." 最終化のチェック観点 (Step 3 のレビュアー視点の原則を満たすこと): +- [ ] **全個別 PR が `/ndf:cross-review` で APPROVE 収束済み** (Step 6 の前提。未実施の PR が残っていないこと) - [ ] 「何のために」「何を」が個別 PR や plan ファイルを辿らずに理解できる - [ ] 実装中の方針変更・スコープ増減が body に反映されている - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して +> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が +> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の +> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 + ### Draft 解除と merge release PR が APPROVE されたら: @@ -319,6 +331,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | +| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | From abb1bee76c6c82bc8309be4579763c366d19c539 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:01:23 +0000 Subject: [PATCH 02/10] =?UTF-8?q?Update:=20cross-review=20skill=20?= =?UTF-8?q?=E3=82=92=20model=20=E3=81=8B=E3=82=89=E3=82=82=E8=B5=B7?= =?UTF-8?q?=E5=8B=95=E5=8F=AF=E8=83=BD=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit disable-model-invocation: true を削除し、モデル(メインセッション)から Skill tool 経由で /ndf:cross-review を起動できるようにする。false が既定値の ため行ごと削除。runtime 配布物 (claude/codex/kiro) を build スクリプトで同期。 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- plugins/ndf-claude/skills/cross-review/SKILL.md | 1 - plugins/ndf-codex/skills/cross-review/SKILL.md | 1 - plugins/ndf-kiro/skills/cross-review/SKILL.md | 1 - plugins/ndf-shared/skills/cross-review/SKILL.md | 1 - 4 files changed, 4 deletions(-) diff --git a/plugins/ndf-claude/skills/cross-review/SKILL.md b/plugins/ndf-claude/skills/cross-review/SKILL.md index 62174ac..bba00d2 100644 --- a/plugins/ndf-claude/skills/cross-review/SKILL.md +++ b/plugins/ndf-claude/skills/cross-review/SKILL.md @@ -2,7 +2,6 @@ name: cross-review description: "Run iterative Codex and Gemini PR reviews." argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" -disable-model-invocation: true allowed-tools: - Bash - Read diff --git a/plugins/ndf-codex/skills/cross-review/SKILL.md b/plugins/ndf-codex/skills/cross-review/SKILL.md index 6fb2d17..c6c0d4e 100644 --- a/plugins/ndf-codex/skills/cross-review/SKILL.md +++ b/plugins/ndf-codex/skills/cross-review/SKILL.md @@ -2,7 +2,6 @@ name: cross-review description: "Run iterative Codex and Gemini PR reviews." argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" -disable-model-invocation: true allowed-tools: - Bash - Read diff --git a/plugins/ndf-kiro/skills/cross-review/SKILL.md b/plugins/ndf-kiro/skills/cross-review/SKILL.md index 393d7d2..efa5e2d 100644 --- a/plugins/ndf-kiro/skills/cross-review/SKILL.md +++ b/plugins/ndf-kiro/skills/cross-review/SKILL.md @@ -2,7 +2,6 @@ name: cross-review description: "Run iterative Codex and Gemini PR reviews." argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" -disable-model-invocation: true allowed-tools: - Bash - Read diff --git a/plugins/ndf-shared/skills/cross-review/SKILL.md b/plugins/ndf-shared/skills/cross-review/SKILL.md index 62174ac..bba00d2 100644 --- a/plugins/ndf-shared/skills/cross-review/SKILL.md +++ b/plugins/ndf-shared/skills/cross-review/SKILL.md @@ -2,7 +2,6 @@ name: cross-review description: "Run iterative Codex and Gemini PR reviews." argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" -disable-model-invocation: true allowed-tools: - Bash - Read From 1e8263959473dfe5e35ad39f59d83ce18828f49c Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:07:56 +0000 Subject: [PATCH 03/10] =?UTF-8?q?Fix:=20cross-review=20round=201=20?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=20(runtime=E9=9D=9E?= =?UTF-8?q?=E4=BE=9D=E5=AD=98=E5=8C=96=20/=20=E3=83=95=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=90=E3=83=83=E3=82=AF=E6=95=B4=E5=90=88=20/=20wh?= =?UTF-8?q?en=5Fto=5Fuse)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit codex + gemini の指摘に対応: - [major] Step 8 フォールバックを、release PR ではなく未レビューの個別 PR (閉じていれば release 配下の修正 PR) で cross-review を回す手順に修正。 release PR で回すとループ内 /ndf:fix が release PR を直接修正し原則が崩れるため - [major] cross-review skill に when_to_use を追加。disable-model-invocation 削除で 自動発動可能になったが、通常の単発レビューは /ndf:review、本 skill は収束ループ 明示時のみと責務を明確化 - [minor] ndf:code-reviewer は Claude Code 固有のため shared 文書 (codex/kiro にも配布) では「Claude Code の code-reviewer 等」と runtime 非依存な表現に統一 (Step 6 / アンチ パターン表 / cross-review 関連リンク) - runtime 配布物を build スクリプトで同期 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- .../ndf-claude/skills/cross-review/SKILL.md | 3 ++- .../skills/issue-plan-strategy/SKILL.md | 19 +++++++++++-------- .../ndf-codex/skills/cross-review/SKILL.md | 3 ++- .../skills/issue-plan-strategy/SKILL.md | 19 +++++++++++-------- plugins/ndf-kiro/skills/cross-review/SKILL.md | 3 ++- .../skills/issue-plan-strategy/SKILL.md | 19 +++++++++++-------- .../ndf-shared/skills/cross-review/SKILL.md | 3 ++- .../skills/issue-plan-strategy/SKILL.md | 19 +++++++++++-------- 8 files changed, 52 insertions(+), 36 deletions(-) diff --git a/plugins/ndf-claude/skills/cross-review/SKILL.md b/plugins/ndf-claude/skills/cross-review/SKILL.md index bba00d2..034dae4 100644 --- a/plugins/ndf-claude/skills/cross-review/SKILL.md +++ b/plugins/ndf-claude/skills/cross-review/SKILL.md @@ -1,6 +1,7 @@ --- name: cross-review description: "Run iterative Codex and Gemini PR reviews." +when_to_use: "PR を codex + gemini 両方でレビューし、両者 APPROVE まで自動収束させたいときに限定して使う。明示トリガ: 'cross-review', 'クロスレビュー', '両AIレビュー', '収束レビュー', 'codex と gemini でレビュー'。通常の単発 PR レビュー依頼 (第二意見が 1 回欲しい等) は本 skill を選ばず /ndf:review を使う。重い収束ループ (codex+gemini を複数ラウンド起動) のため、単発レビューと責務を明確に分ける。" argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" allowed-tools: - Bash @@ -472,6 +473,6 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 - `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 - `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + `/ndf:review` 単発や Claude Code の `code-reviewer` は代替にせず、release ブランチへ merge する前に codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md index 4a092da..5124962 100644 --- a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md @@ -237,9 +237,9 @@ git worktree add ../--ui feature/-ui | GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | | 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の - 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため - 取りこぼしが残る。 +- Claude Code の `code-reviewer` などの単発レビュアーや `/ndf:review` の単発レビューを + **cross-review の代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを + 回さないため取りこぼしが残る。 - 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -276,10 +276,13 @@ gh pr edit --title "..." --body "..." - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない -> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して -> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が -> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の -> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に +> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を +> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を +> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは +> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の +> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 +> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge @@ -331,7 +334,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | -| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | +| 個別 PR を cross-review せず、Claude Code の code-reviewer 等の単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | diff --git a/plugins/ndf-codex/skills/cross-review/SKILL.md b/plugins/ndf-codex/skills/cross-review/SKILL.md index c6c0d4e..473b07f 100644 --- a/plugins/ndf-codex/skills/cross-review/SKILL.md +++ b/plugins/ndf-codex/skills/cross-review/SKILL.md @@ -1,6 +1,7 @@ --- name: cross-review description: "Run iterative Codex and Gemini PR reviews." +when_to_use: "PR を codex + gemini 両方でレビューし、両者 APPROVE まで自動収束させたいときに限定して使う。明示トリガ: 'cross-review', 'クロスレビュー', '両AIレビュー', '収束レビュー', 'codex と gemini でレビュー'。通常の単発 PR レビュー依頼 (第二意見が 1 回欲しい等) は本 skill を選ばず /ndf:review を使う。重い収束ループ (codex+gemini を複数ラウンド起動) のため、単発レビューと責務を明確に分ける。" argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" allowed-tools: - Bash @@ -472,6 +473,6 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 - `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 - `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + `/ndf:review` 単発や Claude Code の `code-reviewer` は代替にせず、release ブランチへ merge する前に codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md index 4a092da..5124962 100644 --- a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md @@ -237,9 +237,9 @@ git worktree add ../--ui feature/-ui | GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | | 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の - 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため - 取りこぼしが残る。 +- Claude Code の `code-reviewer` などの単発レビュアーや `/ndf:review` の単発レビューを + **cross-review の代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを + 回さないため取りこぼしが残る。 - 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -276,10 +276,13 @@ gh pr edit --title "..." --body "..." - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない -> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して -> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が -> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の -> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に +> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を +> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を +> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは +> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の +> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 +> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge @@ -331,7 +334,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | -| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | +| 個別 PR を cross-review せず、Claude Code の code-reviewer 等の単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | diff --git a/plugins/ndf-kiro/skills/cross-review/SKILL.md b/plugins/ndf-kiro/skills/cross-review/SKILL.md index efa5e2d..77e1384 100644 --- a/plugins/ndf-kiro/skills/cross-review/SKILL.md +++ b/plugins/ndf-kiro/skills/cross-review/SKILL.md @@ -1,6 +1,7 @@ --- name: cross-review description: "Run iterative Codex and Gemini PR reviews." +when_to_use: "PR を codex + gemini 両方でレビューし、両者 APPROVE まで自動収束させたいときに限定して使う。明示トリガ: 'cross-review', 'クロスレビュー', '両AIレビュー', '収束レビュー', 'codex と gemini でレビュー'。通常の単発 PR レビュー依頼 (第二意見が 1 回欲しい等) は本 skill を選ばず /ndf:review を使う。重い収束ループ (codex+gemini を複数ラウンド起動) のため、単発レビューと責務を明確に分ける。" argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" allowed-tools: - Bash @@ -472,6 +473,6 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 - `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 - `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + `/ndf:review` 単発や Claude Code の `code-reviewer` は代替にせず、release ブランチへ merge する前に codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md index 4a092da..5124962 100644 --- a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md @@ -237,9 +237,9 @@ git worktree add ../--ui feature/-ui | GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | | 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の - 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため - 取りこぼしが残る。 +- Claude Code の `code-reviewer` などの単発レビュアーや `/ndf:review` の単発レビューを + **cross-review の代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを + 回さないため取りこぼしが残る。 - 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -276,10 +276,13 @@ gh pr edit --title "..." --body "..." - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない -> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して -> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が -> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の -> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に +> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を +> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を +> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは +> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の +> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 +> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge @@ -331,7 +334,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | -| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | +| 個別 PR を cross-review せず、Claude Code の code-reviewer 等の単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | diff --git a/plugins/ndf-shared/skills/cross-review/SKILL.md b/plugins/ndf-shared/skills/cross-review/SKILL.md index bba00d2..034dae4 100644 --- a/plugins/ndf-shared/skills/cross-review/SKILL.md +++ b/plugins/ndf-shared/skills/cross-review/SKILL.md @@ -1,6 +1,7 @@ --- name: cross-review description: "Run iterative Codex and Gemini PR reviews." +when_to_use: "PR を codex + gemini 両方でレビューし、両者 APPROVE まで自動収束させたいときに限定して使う。明示トリガ: 'cross-review', 'クロスレビュー', '両AIレビュー', '収束レビュー', 'codex と gemini でレビュー'。通常の単発 PR レビュー依頼 (第二意見が 1 回欲しい等) は本 skill を選ばず /ndf:review を使う。重い収束ループ (codex+gemini を複数ラウンド起動) のため、単発レビューと責務を明確に分ける。" argument-hint: "[PR番号] [--max-rounds N] [--rotate-after K] [--rotate-mode light|squash] [--only codex|gemini] [--focus TEXT] [--extra-instructions-file PATH]" allowed-tools: - Bash @@ -472,6 +473,6 @@ pint / larastan / test / build などは **中断** を原則とする。 - `/ndf:gemini` — gemini CLI 呼び出し手順 - `/ndf:resolve-pr-comments` — Resolve Conversation の詳細 - `/ndf:issue-plan-strategy` — multi-PR ワークフローでは **個別 PR ごとに本 cross-review が原則必須**。 - `/ndf:review` 単発や `ndf:code-reviewer` は代替にせず、release ブランチへ merge する前に + `/ndf:review` 単発や Claude Code の `code-reviewer` は代替にせず、release ブランチへ merge する前に codex + gemini の APPROVE 収束を確認する (Step 6) - `general-purpose` エージェント — fix 実行用サブエージェント diff --git a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md index 4a092da..5124962 100644 --- a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md @@ -237,9 +237,9 @@ git worktree add ../--ui feature/-ui | GitHub 上の例外的な単発確認 | `/ndf:review ` | ごく軽微な差分の単発確認に限定。cross-review の代替にはしない | | 指摘の修正 | `/ndf:fix ` | cross-review ループ内・後で自動起動される | -- `ndf:code-reviewer` エージェントや `/ndf:review` の単発レビューを **cross-review の - 代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを回さないため - 取りこぼしが残る。 +- Claude Code の `code-reviewer` などの単発レビュアーや `/ndf:review` の単発レビューを + **cross-review の代替にしない**。単発レビューは片側 AI の一発判定にとどまり、収束ループを + 回さないため取りこぼしが残る。 - 個別 PR が cross-review で APPROVE → Draft 解除 → release ブランチへ merge (squash 推奨)。 ## Step 7: release ブランチのレビュー (結合テスト相当のみ) @@ -276,10 +276,13 @@ gh pr edit --title "..." --body "..." - [ ] 個別 PR への参照が本文に残っていない (`
` 内の開発用情報は残してよい) - [ ] 内部用語 (round、rotated 等) が漏れていない -> **cross-review を省略した個別 PR が残っている場合のフォールバック**: release PR に対して -> `/ndf:cross-review ` を必須実行する。ただし個別 PR 範囲の指摘が -> release PR 側でまとめて出るため、該当の個別コミット (既に merge 済みなら release 配下の -> 修正 PR) へ差し戻す手戻りが増える。原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に +> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を +> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を +> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは +> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の +> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 +> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge @@ -331,7 +334,7 @@ git checkout release/ | release ブランチを作らず巨大な 1 PR で出す | レビュー困難・revert 困難・並行開発不可 | | 個別 PR の base を default にする | release で統合する意味が失われ、partial merge が default を汚染する | | 個別 PR Draft 作成を実装後に回す | PR 番号が未確定でクロス参照や CI 待機の段取りが組めない | -| 個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | +| 個別 PR を cross-review せず、Claude Code の code-reviewer 等の単発レビューだけで release へ merge する | 片側 AI の一発判定で収束ループを回さないため重大バグを取りこぼし、release PR 側でまとめて検出され手戻りが増える (Step 6) | | release PR で個別 PR 範囲の指摘を解決しようとする | 該当 PR が既に閉じている場合、コミット意図がずれる | | release PR の body を個別 PR リンクの列挙だけにする | レビュアーは release PR 単体で変更を把握できず、個別 PR や plan を辿ることになる。body は self-contained 必須 (Step 3 / Step 8) | | body 最終化せずに Ready for review にする | Draft 作成時の plan ベースの暫定 body のままだと実装の最終形と乖離する | From d48b211015b6f482ef6e8ae239c3f5e22c4561db Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:12:22 +0000 Subject: [PATCH 04/10] =?UTF-8?q?Fix:=20cross-review=20round=202=20?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=20(L128=20=E7=94=A8?= =?UTF-8?q?=E8=AA=9E=E7=B5=B1=E4=B8=80=20/=20plan=20Task3=20=E6=95=B4?= =?UTF-8?q?=E5=90=88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [minor] Step 3 L128「個別 PR はセルフレビュー (/ndf:cross-review 等)」を 「AI による収束レビュー」に修正。Step 6 の再定義 (セルフレビュー=/ndf:review-branch) との用語矛盾を解消 - [minor] plan file (issue-35) Task 3 を実装済みフォールバックに整合。release PR で 直接回す旧記述を、未 cross-review の個別 PR / release 配下修正 PR で回す手順へ更新 - runtime 配布物を同期 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- ...sue-33-cross-review-resume-open-threads.md | 88 +++++++++++++++++ ...sue-35-issue-plan-cross-review-required.md | 2 +- ...sue-37-cross-review-reply-resolve-guard.md | 99 +++++++++++++++++++ .../skills/issue-plan-strategy/SKILL.md | 2 +- .../skills/issue-plan-strategy/SKILL.md | 2 +- .../skills/issue-plan-strategy/SKILL.md | 2 +- .../skills/issue-plan-strategy/SKILL.md | 2 +- 7 files changed, 192 insertions(+), 5 deletions(-) create mode 100644 issues/issue-33-cross-review-resume-open-threads.md create mode 100644 issues/issue-37-cross-review-reply-resolve-guard.md diff --git a/issues/issue-33-cross-review-resume-open-threads.md b/issues/issue-33-cross-review-resume-open-threads.md new file mode 100644 index 0000000..c5386bf --- /dev/null +++ b/issues/issue-33-cross-review-resume-open-threads.md @@ -0,0 +1,88 @@ +# Issue 33: cross-review 再開時の未解決 thread 考慮 + +## 関連リンク + +- GitHub Issue: https://github.com/devbasex/ai-plugins/issues/33 +- 関連 Skill: `plugins/ndf-shared/skills/cross-review/SKILL.md` + +## 概要 + +`ndf:cross-review` の再開時に、前回中断ラウンドで残った未解決 review thread が `judge` の収束判定に考慮されない問題を修正する。 + +最低限の対応として、再開時の既存 open thread と `comments_count` の意味をドキュメントに明記する。可能であれば `state.py` に open thread 検査を追加し、未解決 thread が残っている状態で即 approved に進まないガードを入れる。 + +## 問題・背景 + +再開ラウンドで codex / gemini が approve 相当を返すと、`state.py judge` は当該ラウンドの `result.json.intent` だけで `final=approved` にできる。前回中断前に投稿された未解決 thread はこの判定に含まれないため、Step 7.5 の最終スイープだけが取りこぼし防止になっている。 + +また `result.json.comments_count` は「そのラウンドで新規投稿されたコメント数」であり、PR 上の実 open thread 総数ではない。fix / sweep の実行者がこの件数を実 open thread 数と誤解すると、再開・複数ラウンド累積時に取りこぼしが起きる。 + +## 修正対象 + +- `plugins/ndf-shared/skills/cross-review/SKILL.md` +- `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md` +- `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` +- `plugins/ndf-shared/skills/cross-review/scripts/state.py` +- `plugins/ndf-shared/skills/cross-review/tests/` +- `plugins/ndf-claude/skills/cross-review/` +- `plugins/ndf-codex/skills/cross-review/` +- `plugins/ndf-kiro/skills/cross-review/` + +runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runtime-plugins.sh` で同期する。 + +## タスク分解 + +### Task 1: 再開時 open thread の仕様を文書化 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md` +- **変更内容:** `state.py judge` は当該ラウンドの intent を見ること、再開前から存在する open thread は Step 7.5 sweep が回収責任を持つことを明記する。 + +### Task 2: `comments_count` の意味を明記 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md`, `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` +- **変更内容:** `comments_count` は投稿数であり、実 open thread 数ではないことを fix / sweep のプロンプト周辺に明記する。open thread は GraphQL の `reviewThreads` で洗い直す方針に統一する。 + +### Task 3: 再開時 open thread ガードを検討・実装 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/scripts/state.py` +- **変更内容:** `init` 再開時または `judge` 前後で、PR 上の unresolved review thread 数を取得する helper を追加する。未解決 thread がある状態で即 approved になる場合は、次のどちらかを実装方針として選ぶ。 + - `judge` は `open_thread_count > 0` の場合に continue を返し、fix / sweep 経由へ進める。 + - `state.json` に `resumed_open_threads` を記録し、report / sweep に必須入力として渡す。 + +実装範囲が過大になる場合は、Task 1 / Task 2 の docs 強化を先行し、script ガードは別 PR に分ける。 + +### Task 4: テスト追加 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/tests/` +- **変更内容:** 再開 state と open thread count の扱いを unit test で固定する。GitHub API 呼び出し部分は subprocess / helper を mock し、ネットワーク不要で検証する。 + +### Task 5: runtime 配布物同期 + +- **対象ファイル:** `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` +- **変更内容:** `bash scripts/build-runtime-plugins.sh` を実行し、shared の変更を runtime 別配布物へ反映する。 + +## PR 分割計画 + +単一 PR で進める。主対象は cross-review skill 内の docs / state helper / tests であり、依存関係のある複数機能に分割するほどの変更ではない。 + +| PR # | branch 名 | 概要 | 依存 | 並行可否 | +|---|---|---|---|---| +| 1 | `fix/issue-33-cross-review-resume-open-threads` | 再開時 open thread の仕様明記と必要な script guard / tests 追加 | なし | - | + +release branch: なし +base branch: `main` + +## 影響範囲 + +- `ndf:cross-review` の再開フロー +- `state.py judge` の収束判定 +- Step 7.5 最終スイープの必須性に関する利用者理解 +- runtime 別 NDF plugin 配布物 + +## テスト計画 + +- [ ] `python3 plugins/ndf-shared/skills/cross-review/tests/...` または該当 pytest を実行する +- [ ] `bash scripts/build-runtime-plugins.sh --check` +- [ ] `bash scripts/validate-runtime-plugins.sh` +- [ ] 再開 state の unit test で、open thread がある場合の期待挙動を確認する +- [ ] Markdown link check が通ることを確認する diff --git a/issues/issue-35-issue-plan-cross-review-required.md b/issues/issue-35-issue-plan-cross-review-required.md index 62ebaac..09b4a53 100644 --- a/issues/issue-35-issue-plan-cross-review-required.md +++ b/issues/issue-35-issue-plan-cross-review-required.md @@ -44,7 +44,7 @@ runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runti ### Task 3: release PR Ready 前チェックを追加 - **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` -- **変更内容:** Step 8 の body 最終化 / Ready for review 前チェックに「全個別 PR が cross-review approved 済み」を追加する。省略した場合のフォールバックとして、release PR で `/ndf:cross-review` を必須実行するが、手戻りが増えることを明記する。 +- **変更内容:** Step 8 の body 最終化 / Ready for review 前チェックに「全個別 PR が cross-review approved 済み」を追加する。省略した場合のフォールバックとして、未 cross-review の個別 PR(既に閉じていれば release 配下の修正 PR)で `/ndf:cross-review` を回す手順を明記する。release PR に直接 `/ndf:cross-review` を回すのは避ける(ループ内 `/ndf:fix` が release PR を修正し、個別 PR 範囲の指摘を個別 PR 側で解決する原則が崩れるため)。いずれも後追い対応で手戻りが増える点も記載する。 ### Task 4: アンチパターン追記 diff --git a/issues/issue-37-cross-review-reply-resolve-guard.md b/issues/issue-37-cross-review-reply-resolve-guard.md new file mode 100644 index 0000000..27bc894 --- /dev/null +++ b/issues/issue-37-cross-review-reply-resolve-guard.md @@ -0,0 +1,99 @@ +# Issue 37: cross-review reply / resolve 漏れガード + +## 関連リンク + +- GitHub Issue: https://github.com/devbasex/ai-plugins/issues/37 +- 関連 Skill: `plugins/ndf-shared/skills/cross-review/SKILL.md` +- 関連 Skill: `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md` +- 関連 Skill: `plugins/ndf-shared/skills/fix/SKILL.md` + +## 概要 + +`ndf:cross-review` の修正フェーズで、修正済み thread への reply 投稿、`resolveReviewThread`、PR レベル Summary コメント投稿が抜けたまま次 round や approve に進むことを防ぐ。 + +あわせて `resolve-pr-comments` の返信 API 例を実行可能な形に修正し、reply 失敗が resolve 成功で隠れないようにする。 + +## 問題・背景 + +cross-review の Step 5 は `/ndf:fix` サブエージェントが reply + resolve + Summary コメントまで実行する契約になっている。しかしメインセッションが手動で修正・push して次 round に進めると、reply / resolve がスキップされても `state.py start-round` / `judge` / `merge-fix` 側で検知できず、未解決 inline thread が残る可能性がある。 + +また `resolve-pr-comments/SKILL.md` の REST 返信例が `-f in_reply_to=` になっており、GitHub API では typed field の `-F in_reply_to=` を使う必要がある。reply 失敗後に GraphQL resolve だけ成功すると、thread は resolved でも「どの修正で対応したか」の inline reply が残らない。 + +## 修正対象 + +- `plugins/ndf-shared/skills/cross-review/SKILL.md` +- `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md` +- `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` +- `plugins/ndf-shared/skills/cross-review/scripts/state.py` +- `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md` +- `plugins/ndf-shared/skills/fix/SKILL.md` +- `plugins/ndf-shared/skills/cross-review/tests/` +- `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` + +runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runtime-plugins.sh` で同期する。 + +## タスク分解 + +### Task 1: resolve-pr-comments の reply API 例を修正 + +- **対象ファイル:** `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md` +- **変更内容:** `gh api repos/:owner/:repo/pulls/$PR_NUMBER/comments -f body=... -f in_reply_to=...` を、`in_reply_to` が数値として送られる `-F in_reply_to=` へ修正する。必要なら GraphQL reply mutation の代替も併記する。 + +### Task 2: reply + resolve + verify の小 script 方針を追加 + +- **対象ファイル:** `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md`, 必要に応じて `plugins/ndf-shared/skills/resolve-pr-comments/scripts/` +- **変更内容:** 対応済み thread に reply を投稿し、GraphQL `resolveReviewThread` を実行し、最後に unresolved count を確認する流れを標準化する。script を追加する場合は、reply 失敗時に resolve へ進まない `set -e` 相当の挙動にする。 + +### Task 3: cross-review の次 round ガードを設計 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/scripts/state.py` +- **変更内容:** 前 round に `REQUEST_CHANGES` があり、対応する fix 結果または sweep 結果が無い状態で `start-round` / `judge` / `merge-fix` が進まないようにする。最低限、`merge-fix` で `resolved_threads`、`summary_comment_url`、fix result file の存在を検証する。 + +### Task 4: final report 前の unresolved sweep 検証を必須化 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/SKILL.md`, `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` +- **変更内容:** Step 7.5 の `sweep-pr-result.json` に `remaining_open=0` が必要であることを、report 前の必須検証として明記する。`remaining_open > 0` の場合は approved として完了報告しない。 + +### Task 5: fix の戻り値契約を強化 + +- **対象ファイル:** `plugins/ndf-shared/skills/fix/SKILL.md`, `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` +- **変更内容:** 修正済み thread は reply URL または comment id と resolve 結果を戻り値に含める契約にする。reply なし resolve を禁止し、deferred / rejected の扱いと区別する。 + +### Task 6: テスト追加 + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/tests/` +- **変更内容:** fix result が無い、`resolved_threads` が空、`summary_comment_url` が無い、unresolved count が残っている、などのケースで state guard が fail する unit test を追加する。 + +### Task 7: runtime 配布物同期 + +- **対象ファイル:** `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` +- **変更内容:** `bash scripts/build-runtime-plugins.sh` を実行し、shared の変更を runtime 別配布物へ反映する。 + +## PR 分割計画 + +原則は単一 PR で進める。ただし reply / resolve helper script を新設して state guard まで実装すると差分が大きくなるため、実装時に 2 PR へ分割してもよい。 + +| PR # | branch 名 | 概要 | 依存 | 並行可否 | +|---|---|---|---|---| +| 1 | `fix/issue-37-resolve-pr-comments-reply-api` | reply API 例修正、resolve-pr-comments / fix 契約整理 | なし | ○ | +| 2 | `fix/issue-37-cross-review-resolve-guard` | cross-review state guard、sweep 検証、tests 追加 | PR1 | × | + +release branch: 分割する場合のみ `release/issue-37-cross-review-reply-resolve-guard` +base branch: `main` + +## 影響範囲 + +- `ndf:cross-review` の round 進行条件 +- `/ndf:fix` の戻り値契約 +- `/ndf:resolve-pr-comments` の API 手順 +- PR 上の review thread 解決履歴 +- runtime 別 NDF plugin 配布物 + +## テスト計画 + +- [ ] `plugins/ndf-shared/skills/cross-review/tests/` の pytest を実行する +- [ ] reply API 例が `-F in_reply_to=` になっていることを確認する +- [ ] state guard の unit test で、reply / resolve / summary / unresolved count の不足を検出できることを確認する +- [ ] `bash scripts/build-runtime-plugins.sh --check` +- [ ] `bash scripts/validate-runtime-plugins.sh` +- [ ] Markdown link check が通ることを確認する diff --git a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md index 5124962..a360576 100644 --- a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md @@ -125,7 +125,7 @@ git push -u origin release/ ### レビュアー視点の原則 (release PR body の大前提) -個別 PR はセルフレビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: +個別 PR は AI による収束レビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: - release PR の body は **self-contained 必須**: 「何のために」(背景・解決したい課題) と「何を」(release ブランチ全体としての変更内容) を、**個別 PR を一切参照せずに**理解できる粒度で書く - 個別 PR リンクの列挙を body の本文にしない。開発中の進捗管理に使う場合は `
` 折りたたみ内の補足情報に格下げする diff --git a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md index 5124962..a360576 100644 --- a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md @@ -125,7 +125,7 @@ git push -u origin release/ ### レビュアー視点の原則 (release PR body の大前提) -個別 PR はセルフレビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: +個別 PR は AI による収束レビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: - release PR の body は **self-contained 必須**: 「何のために」(背景・解決したい課題) と「何を」(release ブランチ全体としての変更内容) を、**個別 PR を一切参照せずに**理解できる粒度で書く - 個別 PR リンクの列挙を body の本文にしない。開発中の進捗管理に使う場合は `
` 折りたたみ内の補足情報に格下げする diff --git a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md index 5124962..a360576 100644 --- a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md @@ -125,7 +125,7 @@ git push -u origin release/ ### レビュアー視点の原則 (release PR body の大前提) -個別 PR はセルフレビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: +個別 PR は AI による収束レビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: - release PR の body は **self-contained 必須**: 「何のために」(背景・解決したい課題) と「何を」(release ブランチ全体としての変更内容) を、**個別 PR を一切参照せずに**理解できる粒度で書く - 個別 PR リンクの列挙を body の本文にしない。開発中の進捗管理に使う場合は `
` 折りたたみ内の補足情報に格下げする diff --git a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md index 5124962..a360576 100644 --- a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md @@ -125,7 +125,7 @@ git push -u origin release/ ### レビュアー視点の原則 (release PR body の大前提) -個別 PR はセルフレビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: +個別 PR は AI による収束レビュー (`/ndf:cross-review` 等) で merge される。**人間のレビュアーが見るのは release PR だけ**であり、個別 PR の存在をレビュアーに意識させてはならない。したがって: - release PR の body は **self-contained 必須**: 「何のために」(背景・解決したい課題) と「何を」(release ブランチ全体としての変更内容) を、**個別 PR を一切参照せずに**理解できる粒度で書く - 個別 PR リンクの列挙を body の本文にしない。開発中の進捗管理に使う場合は `
` 折りたたみ内の補足情報に格下げする From c252a0d908378bfed0f4e85b263aac2f0e1261fb Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:16:07 +0000 Subject: [PATCH 05/10] =?UTF-8?q?Fix:=20=E3=82=B9=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=97=E5=A4=96=E3=81=AE=20issue-33/issue-37=20plan=20?= =?UTF-8?q?=E3=82=92=20PR=20=E3=81=8B=E3=82=89=E9=99=A4=E5=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit round 2 の `git add issues/` で誤って混入した issue #33 / #37 の新規 plan を git 追跡から外す (ファイルは作業ツリーに残す)。本 PR は issue #35 のみを扱う。 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- ...sue-33-cross-review-resume-open-threads.md | 88 ----------------- ...sue-37-cross-review-reply-resolve-guard.md | 99 ------------------- 2 files changed, 187 deletions(-) delete mode 100644 issues/issue-33-cross-review-resume-open-threads.md delete mode 100644 issues/issue-37-cross-review-reply-resolve-guard.md diff --git a/issues/issue-33-cross-review-resume-open-threads.md b/issues/issue-33-cross-review-resume-open-threads.md deleted file mode 100644 index c5386bf..0000000 --- a/issues/issue-33-cross-review-resume-open-threads.md +++ /dev/null @@ -1,88 +0,0 @@ -# Issue 33: cross-review 再開時の未解決 thread 考慮 - -## 関連リンク - -- GitHub Issue: https://github.com/devbasex/ai-plugins/issues/33 -- 関連 Skill: `plugins/ndf-shared/skills/cross-review/SKILL.md` - -## 概要 - -`ndf:cross-review` の再開時に、前回中断ラウンドで残った未解決 review thread が `judge` の収束判定に考慮されない問題を修正する。 - -最低限の対応として、再開時の既存 open thread と `comments_count` の意味をドキュメントに明記する。可能であれば `state.py` に open thread 検査を追加し、未解決 thread が残っている状態で即 approved に進まないガードを入れる。 - -## 問題・背景 - -再開ラウンドで codex / gemini が approve 相当を返すと、`state.py judge` は当該ラウンドの `result.json.intent` だけで `final=approved` にできる。前回中断前に投稿された未解決 thread はこの判定に含まれないため、Step 7.5 の最終スイープだけが取りこぼし防止になっている。 - -また `result.json.comments_count` は「そのラウンドで新規投稿されたコメント数」であり、PR 上の実 open thread 総数ではない。fix / sweep の実行者がこの件数を実 open thread 数と誤解すると、再開・複数ラウンド累積時に取りこぼしが起きる。 - -## 修正対象 - -- `plugins/ndf-shared/skills/cross-review/SKILL.md` -- `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md` -- `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` -- `plugins/ndf-shared/skills/cross-review/scripts/state.py` -- `plugins/ndf-shared/skills/cross-review/tests/` -- `plugins/ndf-claude/skills/cross-review/` -- `plugins/ndf-codex/skills/cross-review/` -- `plugins/ndf-kiro/skills/cross-review/` - -runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runtime-plugins.sh` で同期する。 - -## タスク分解 - -### Task 1: 再開時 open thread の仕様を文書化 - -- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md` -- **変更内容:** `state.py judge` は当該ラウンドの intent を見ること、再開前から存在する open thread は Step 7.5 sweep が回収責任を持つことを明記する。 - -### Task 2: `comments_count` の意味を明記 - -- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md`, `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` -- **変更内容:** `comments_count` は投稿数であり、実 open thread 数ではないことを fix / sweep のプロンプト周辺に明記する。open thread は GraphQL の `reviewThreads` で洗い直す方針に統一する。 - -### Task 3: 再開時 open thread ガードを検討・実装 - -- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/scripts/state.py` -- **変更内容:** `init` 再開時または `judge` 前後で、PR 上の unresolved review thread 数を取得する helper を追加する。未解決 thread がある状態で即 approved になる場合は、次のどちらかを実装方針として選ぶ。 - - `judge` は `open_thread_count > 0` の場合に continue を返し、fix / sweep 経由へ進める。 - - `state.json` に `resumed_open_threads` を記録し、report / sweep に必須入力として渡す。 - -実装範囲が過大になる場合は、Task 1 / Task 2 の docs 強化を先行し、script ガードは別 PR に分ける。 - -### Task 4: テスト追加 - -- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/tests/` -- **変更内容:** 再開 state と open thread count の扱いを unit test で固定する。GitHub API 呼び出し部分は subprocess / helper を mock し、ネットワーク不要で検証する。 - -### Task 5: runtime 配布物同期 - -- **対象ファイル:** `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` -- **変更内容:** `bash scripts/build-runtime-plugins.sh` を実行し、shared の変更を runtime 別配布物へ反映する。 - -## PR 分割計画 - -単一 PR で進める。主対象は cross-review skill 内の docs / state helper / tests であり、依存関係のある複数機能に分割するほどの変更ではない。 - -| PR # | branch 名 | 概要 | 依存 | 並行可否 | -|---|---|---|---|---| -| 1 | `fix/issue-33-cross-review-resume-open-threads` | 再開時 open thread の仕様明記と必要な script guard / tests 追加 | なし | - | - -release branch: なし -base branch: `main` - -## 影響範囲 - -- `ndf:cross-review` の再開フロー -- `state.py judge` の収束判定 -- Step 7.5 最終スイープの必須性に関する利用者理解 -- runtime 別 NDF plugin 配布物 - -## テスト計画 - -- [ ] `python3 plugins/ndf-shared/skills/cross-review/tests/...` または該当 pytest を実行する -- [ ] `bash scripts/build-runtime-plugins.sh --check` -- [ ] `bash scripts/validate-runtime-plugins.sh` -- [ ] 再開 state の unit test で、open thread がある場合の期待挙動を確認する -- [ ] Markdown link check が通ることを確認する diff --git a/issues/issue-37-cross-review-reply-resolve-guard.md b/issues/issue-37-cross-review-reply-resolve-guard.md deleted file mode 100644 index 27bc894..0000000 --- a/issues/issue-37-cross-review-reply-resolve-guard.md +++ /dev/null @@ -1,99 +0,0 @@ -# Issue 37: cross-review reply / resolve 漏れガード - -## 関連リンク - -- GitHub Issue: https://github.com/devbasex/ai-plugins/issues/37 -- 関連 Skill: `plugins/ndf-shared/skills/cross-review/SKILL.md` -- 関連 Skill: `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md` -- 関連 Skill: `plugins/ndf-shared/skills/fix/SKILL.md` - -## 概要 - -`ndf:cross-review` の修正フェーズで、修正済み thread への reply 投稿、`resolveReviewThread`、PR レベル Summary コメント投稿が抜けたまま次 round や approve に進むことを防ぐ。 - -あわせて `resolve-pr-comments` の返信 API 例を実行可能な形に修正し、reply 失敗が resolve 成功で隠れないようにする。 - -## 問題・背景 - -cross-review の Step 5 は `/ndf:fix` サブエージェントが reply + resolve + Summary コメントまで実行する契約になっている。しかしメインセッションが手動で修正・push して次 round に進めると、reply / resolve がスキップされても `state.py start-round` / `judge` / `merge-fix` 側で検知できず、未解決 inline thread が残る可能性がある。 - -また `resolve-pr-comments/SKILL.md` の REST 返信例が `-f in_reply_to=` になっており、GitHub API では typed field の `-F in_reply_to=` を使う必要がある。reply 失敗後に GraphQL resolve だけ成功すると、thread は resolved でも「どの修正で対応したか」の inline reply が残らない。 - -## 修正対象 - -- `plugins/ndf-shared/skills/cross-review/SKILL.md` -- `plugins/ndf-shared/skills/cross-review/docs/01-state-and-review.md` -- `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` -- `plugins/ndf-shared/skills/cross-review/scripts/state.py` -- `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md` -- `plugins/ndf-shared/skills/fix/SKILL.md` -- `plugins/ndf-shared/skills/cross-review/tests/` -- `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` - -runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runtime-plugins.sh` で同期する。 - -## タスク分解 - -### Task 1: resolve-pr-comments の reply API 例を修正 - -- **対象ファイル:** `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md` -- **変更内容:** `gh api repos/:owner/:repo/pulls/$PR_NUMBER/comments -f body=... -f in_reply_to=...` を、`in_reply_to` が数値として送られる `-F in_reply_to=` へ修正する。必要なら GraphQL reply mutation の代替も併記する。 - -### Task 2: reply + resolve + verify の小 script 方針を追加 - -- **対象ファイル:** `plugins/ndf-shared/skills/resolve-pr-comments/SKILL.md`, 必要に応じて `plugins/ndf-shared/skills/resolve-pr-comments/scripts/` -- **変更内容:** 対応済み thread に reply を投稿し、GraphQL `resolveReviewThread` を実行し、最後に unresolved count を確認する流れを標準化する。script を追加する場合は、reply 失敗時に resolve へ進まない `set -e` 相当の挙動にする。 - -### Task 3: cross-review の次 round ガードを設計 - -- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/scripts/state.py` -- **変更内容:** 前 round に `REQUEST_CHANGES` があり、対応する fix 結果または sweep 結果が無い状態で `start-round` / `judge` / `merge-fix` が進まないようにする。最低限、`merge-fix` で `resolved_threads`、`summary_comment_url`、fix result file の存在を検証する。 - -### Task 4: final report 前の unresolved sweep 検証を必須化 - -- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/SKILL.md`, `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` -- **変更内容:** Step 7.5 の `sweep-pr-result.json` に `remaining_open=0` が必要であることを、report 前の必須検証として明記する。`remaining_open > 0` の場合は approved として完了報告しない。 - -### Task 5: fix の戻り値契約を強化 - -- **対象ファイル:** `plugins/ndf-shared/skills/fix/SKILL.md`, `plugins/ndf-shared/skills/cross-review/docs/02-fix-and-rotation.md` -- **変更内容:** 修正済み thread は reply URL または comment id と resolve 結果を戻り値に含める契約にする。reply なし resolve を禁止し、deferred / rejected の扱いと区別する。 - -### Task 6: テスト追加 - -- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/tests/` -- **変更内容:** fix result が無い、`resolved_threads` が空、`summary_comment_url` が無い、unresolved count が残っている、などのケースで state guard が fail する unit test を追加する。 - -### Task 7: runtime 配布物同期 - -- **対象ファイル:** `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` -- **変更内容:** `bash scripts/build-runtime-plugins.sh` を実行し、shared の変更を runtime 別配布物へ反映する。 - -## PR 分割計画 - -原則は単一 PR で進める。ただし reply / resolve helper script を新設して state guard まで実装すると差分が大きくなるため、実装時に 2 PR へ分割してもよい。 - -| PR # | branch 名 | 概要 | 依存 | 並行可否 | -|---|---|---|---|---| -| 1 | `fix/issue-37-resolve-pr-comments-reply-api` | reply API 例修正、resolve-pr-comments / fix 契約整理 | なし | ○ | -| 2 | `fix/issue-37-cross-review-resolve-guard` | cross-review state guard、sweep 検証、tests 追加 | PR1 | × | - -release branch: 分割する場合のみ `release/issue-37-cross-review-reply-resolve-guard` -base branch: `main` - -## 影響範囲 - -- `ndf:cross-review` の round 進行条件 -- `/ndf:fix` の戻り値契約 -- `/ndf:resolve-pr-comments` の API 手順 -- PR 上の review thread 解決履歴 -- runtime 別 NDF plugin 配布物 - -## テスト計画 - -- [ ] `plugins/ndf-shared/skills/cross-review/tests/` の pytest を実行する -- [ ] reply API 例が `-F in_reply_to=` になっていることを確認する -- [ ] state guard の unit test で、reply / resolve / summary / unresolved count の不足を検出できることを確認する -- [ ] `bash scripts/build-runtime-plugins.sh --check` -- [ ] `bash scripts/validate-runtime-plugins.sh` -- [ ] Markdown link check が通ることを確認する From c3d0c7fdd4e65d8d4cd74c5282af2e047af80dc1 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:19:08 +0000 Subject: [PATCH 06/10] =?UTF-8?q?Docs:=20plan=20(issue-35)=20=E3=81=AB=20c?= =?UTF-8?q?ross-review=20=E8=B5=B7=E5=8B=95=E5=8F=AF=E8=83=BD=E5=8C=96=20(?= =?UTF-8?q?Task=207)=20=E3=82=92=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gemini 指摘対応 (round 4)。disable-model-invocation 削除 + when_to_use 追加は 当初 Task に無い追加変更のため、実装中に追加した経緯・方針を plan の Task 7 と 影響範囲に明記し、diff 内で意図を追えるようにする。 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- issues/issue-35-issue-plan-cross-review-required.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/issues/issue-35-issue-plan-cross-review-required.md b/issues/issue-35-issue-plan-cross-review-required.md index 09b4a53..65c6ace 100644 --- a/issues/issue-35-issue-plan-cross-review-required.md +++ b/issues/issue-35-issue-plan-cross-review-required.md @@ -61,6 +61,12 @@ runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runti - **対象ファイル:** `plugins/ndf-claude/`, `plugins/ndf-codex/`, `plugins/ndf-kiro/` - **変更内容:** `bash scripts/build-runtime-plugins.sh` を実行し、shared の変更を runtime 別配布物へ反映する。 +### Task 7: cross-review skill を model 起動可能化(実装中に追加) + +- **対象ファイル:** `plugins/ndf-shared/skills/cross-review/SKILL.md` +- **背景:** 本 issue の実装中、cross-review を毎回スラッシュコマンドで手入力する必要があった(`disable-model-invocation: true` によりモデルから起動不可のため)ことから、追加要望として対応した。 +- **変更内容:** `disable-model-invocation: true` を削除し、メインセッションから Skill tool 経由で起動可能にする。あわせて `when_to_use` を追加し、通常の単発レビュー依頼は `/ndf:review`、本 skill は収束ループを明示したときのみという責務分担を明文化する(重い codex + gemini 収束ループが単発レビュー依頼で自動選択されるのを防ぐ)。 + ## PR 分割計画 単一 PR で進める。変更は主に skill 文書の運用ルール強化で、コード変更や複数機能の段階的 merge は不要。 @@ -78,6 +84,7 @@ base branch: `main` - 個別 PR と release PR のレビュー責務分担 - release PR Ready 前のチェックリスト - runtime 別 NDF plugin 配布物 +- `ndf:cross-review` skill の起動方式(model 起動可能化 + `when_to_use` 追加。Task 7) ## テスト計画 From 3042c21b1091152ae139991bc130b28db008e152 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:23:22 +0000 Subject: [PATCH 07/10] =?UTF-8?q?Fix:=20cross-review=20round=205=20?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=20(=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=83=90=E3=83=83=E3=82=AF=E3=82=92=E5=80=8B?= =?UTF-8?q?=E5=88=A5PR=E7=8A=B6=E6=85=8B=E5=88=A5=E3=81=AB=E6=95=B4?= =?UTF-8?q?=E7=90=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gemini [major/論理矛盾] 対応。「閉じた個別 PR に新規修正 PR を作って cross-review」 では元の差分がレビュー対象に乗らない論理矛盾を解消。フォールバックを状態別に整理: - open: 当該個別 PR で cross-review (release PR には回さない) - release へ merge 済み: 差分は release ブランチにあるため release PR で cross-review して追認 (個別 PR 単位は取り返せないため) codex round 1 指摘 (release PR に回すな) と gemini round 5 指摘の両方を満たす形に統合。 runtime 配布物と issue-35 plan Task 3 も同期。 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- ...ssue-35-issue-plan-cross-review-required.md | 2 +- .../skills/issue-plan-strategy/SKILL.md | 18 ++++++++++++------ .../skills/issue-plan-strategy/SKILL.md | 18 ++++++++++++------ .../skills/issue-plan-strategy/SKILL.md | 18 ++++++++++++------ .../skills/issue-plan-strategy/SKILL.md | 18 ++++++++++++------ 5 files changed, 49 insertions(+), 25 deletions(-) diff --git a/issues/issue-35-issue-plan-cross-review-required.md b/issues/issue-35-issue-plan-cross-review-required.md index 65c6ace..5175b36 100644 --- a/issues/issue-35-issue-plan-cross-review-required.md +++ b/issues/issue-35-issue-plan-cross-review-required.md @@ -44,7 +44,7 @@ runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runti ### Task 3: release PR Ready 前チェックを追加 - **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` -- **変更内容:** Step 8 の body 最終化 / Ready for review 前チェックに「全個別 PR が cross-review approved 済み」を追加する。省略した場合のフォールバックとして、未 cross-review の個別 PR(既に閉じていれば release 配下の修正 PR)で `/ndf:cross-review` を回す手順を明記する。release PR に直接 `/ndf:cross-review` を回すのは避ける(ループ内 `/ndf:fix` が release PR を修正し、個別 PR 範囲の指摘を個別 PR 側で解決する原則が崩れるため)。いずれも後追い対応で手戻りが増える点も記載する。 +- **変更内容:** Step 8 の body 最終化 / Ready for review 前チェックに「全個別 PR が cross-review approved 済み」を追加する。省略した場合のフォールバックは個別 PR の状態別に明記する: **open なら** 当該個別 PR で `/ndf:cross-review` を回す(release PR には回さない。ループ内 `/ndf:fix` が release PR を修正し原則が崩れるため)、**既に release へ merge 済みなら** 元の差分は release ブランチにあり新規 PR には乗らないため release PR で `/ndf:cross-review` を回して追認する。いずれも後追い対応で手戻りが増える点も記載する。 ### Task 4: アンチパターン追記 diff --git a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md index a360576..a202ce5 100644 --- a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md @@ -277,12 +277,18 @@ gh pr edit --title "..." --body "..." - [ ] 内部用語 (round、rotated 等) が漏れていない > **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に -> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を -> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を -> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは -> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の -> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 -> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> 未 cross-review の個別 PR を特定し、その **状態に応じて** 対応する: +> +> - **個別 PR がまだ open**: その個別 PR に対して `/ndf:cross-review <個別PR番号>` を回して APPROVE +> 収束させてから release へ merge する。**release PR に対して直接は回さない** — ループ内の +> `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 +> 原則 (Step 7) が崩れるため。 +> - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて +> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に +> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> +> いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge diff --git a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md index a360576..a202ce5 100644 --- a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md @@ -277,12 +277,18 @@ gh pr edit --title "..." --body "..." - [ ] 内部用語 (round、rotated 等) が漏れていない > **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に -> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を -> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を -> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは -> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の -> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 -> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> 未 cross-review の個別 PR を特定し、その **状態に応じて** 対応する: +> +> - **個別 PR がまだ open**: その個別 PR に対して `/ndf:cross-review <個別PR番号>` を回して APPROVE +> 収束させてから release へ merge する。**release PR に対して直接は回さない** — ループ内の +> `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 +> 原則 (Step 7) が崩れるため。 +> - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて +> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に +> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> +> いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge diff --git a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md index a360576..a202ce5 100644 --- a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md @@ -277,12 +277,18 @@ gh pr edit --title "..." --body "..." - [ ] 内部用語 (round、rotated 等) が漏れていない > **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に -> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を -> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を -> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは -> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の -> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 -> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> 未 cross-review の個別 PR を特定し、その **状態に応じて** 対応する: +> +> - **個別 PR がまだ open**: その個別 PR に対して `/ndf:cross-review <個別PR番号>` を回して APPROVE +> 収束させてから release へ merge する。**release PR に対して直接は回さない** — ループ内の +> `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 +> 原則 (Step 7) が崩れるため。 +> - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて +> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に +> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> +> いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge diff --git a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md index a360576..a202ce5 100644 --- a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md @@ -277,12 +277,18 @@ gh pr edit --title "..." --body "..." - [ ] 内部用語 (round、rotated 等) が漏れていない > **cross-review を省略した個別 PR が残っている場合のフォールバック**: Ready for review の前に -> 未 cross-review の個別 PR を特定し、**その個別 PR に対して** `/ndf:cross-review <個別PR番号>` を -> 回して APPROVE 収束させる。該当個別 PR が既に閉じている場合は release ブランチ配下に修正 PR を -> 作成し、その修正 PR で cross-review を回す。**release PR に対して直接 cross-review を回すのは -> 避ける** — ループ内の `/ndf:fix` が release PR を対象に修正・Resolve してしまい、「個別 PR 範囲の -> 指摘は個別 PR 側で解決する」原則 (Step 7) が崩れるため。いずれにせよ後追い対応で手戻りが増えるので、 -> 原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 +> 未 cross-review の個別 PR を特定し、その **状態に応じて** 対応する: +> +> - **個別 PR がまだ open**: その個別 PR に対して `/ndf:cross-review <個別PR番号>` を回して APPROVE +> 収束させてから release へ merge する。**release PR に対して直接は回さない** — ループ内の +> `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 +> 原則 (Step 7) が崩れるため。 +> - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて +> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に +> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> +> いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 ### Draft 解除と merge From 4a34b8dba1c2e62411be8febebec98a113073d16 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:28:08 +0000 Subject: [PATCH 08/10] =?UTF-8?q?Fix:=20cross-review=20round=206=20?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C=20(Step7/8=20=E6=95=B4?= =?UTF-8?q?=E5=90=88=20+=20=E5=86=8D=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E7=AF=84=E5=9B=B2=E3=81=AE=E6=AD=A3=E7=A2=BA=E5=8C=96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [major] Step 7 (統合レビューで発見したバグ→修正差分を新規 PR でレビュー) と Step 8 フォールバック (未 cross-review の元差分→release PR で追認) が別シナリオで あることを明記し、相互参照を追加。表面的な手順の割れを解消 - [minor] フォールバックの「当該差分をまとめてレビュー」を「release PR 全体を改めて レビューする (個別差分だけの抽出にはならず全体が対象)」に正確化し、手戻りが大きい 理由を明示 - runtime 配布物を同期 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md | 9 +++++---- plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md | 9 +++++---- plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md | 9 +++++---- plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md | 9 +++++---- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md index a202ce5..010565d 100644 --- a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge @@ -284,9 +284,10 @@ gh pr edit --title "..." --body "..." > `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 > 原則 (Step 7) が崩れるため。 > - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には -> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて -> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に -> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、**release PR 全体を +> 改めてレビューする**(当該差分もその中に含まれる。個別差分だけを抽出しての再レビューにはならず、 +> release PR 全体が対象になるぶん手戻りが大きい)。この場合ループ内の `/ndf:fix` は release ブランチを +> 直接修正する **追認的な対応** になる(個別 PR 単位のレビューは既に取り返せないため)。 > > いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 diff --git a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md index a202ce5..010565d 100644 --- a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge @@ -284,9 +284,10 @@ gh pr edit --title "..." --body "..." > `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 > 原則 (Step 7) が崩れるため。 > - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には -> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて -> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に -> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、**release PR 全体を +> 改めてレビューする**(当該差分もその中に含まれる。個別差分だけを抽出しての再レビューにはならず、 +> release PR 全体が対象になるぶん手戻りが大きい)。この場合ループ内の `/ndf:fix` は release ブランチを +> 直接修正する **追認的な対応** になる(個別 PR 単位のレビューは既に取り返せないため)。 > > いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 diff --git a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md index a202ce5..010565d 100644 --- a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge @@ -284,9 +284,10 @@ gh pr edit --title "..." --body "..." > `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 > 原則 (Step 7) が崩れるため。 > - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には -> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて -> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に -> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、**release PR 全体を +> 改めてレビューする**(当該差分もその中に含まれる。個別差分だけを抽出しての再レビューにはならず、 +> release PR 全体が対象になるぶん手戻りが大きい)。この場合ループ内の `/ndf:fix` は release ブランチを +> 直接修正する **追認的な対応** になる(個別 PR 単位のレビューは既に取り返せないため)。 > > いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 diff --git a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md index a202ce5..010565d 100644 --- a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge @@ -284,9 +284,10 @@ gh pr edit --title "..." --body "..." > `/ndf:fix` が release PR を修正・Resolve してしまい、「個別 PR 範囲の指摘は個別 PR 側で解決する」 > 原則 (Step 7) が崩れるため。 > - **個別 PR が既に release へ merge 済み** (元の差分が release ブランチに取り込まれ、新規 PR には -> 乗らない): release PR に対して `/ndf:cross-review ` を回し、当該差分をまとめて -> レビューする。この場合ループ内の `/ndf:fix` は release ブランチを直接修正する **追認的な対応** に -> なる(個別 PR 単位のレビューは既に取り返せないため)。 +> 乗らない): release PR に対して `/ndf:cross-review ` を回し、**release PR 全体を +> 改めてレビューする**(当該差分もその中に含まれる。個別差分だけを抽出しての再レビューにはならず、 +> release PR 全体が対象になるぶん手戻りが大きい)。この場合ループ内の `/ndf:fix` は release ブランチを +> 直接修正する **追認的な対応** になる(個別 PR 単位のレビューは既に取り返せないため)。 > > いずれも後追い対応で手戻りが増えるので、原則は Step 6 で各個別 PR を cross-review 済みにしておくこと。 From 96d532897cfc90ce420c8133260bd2565698fbd7 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:30:54 +0000 Subject: [PATCH 09/10] =?UTF-8?q?Docs:=20plan=20(issue-35)=20=E3=81=AE=20c?= =?UTF-8?q?ode-reviewer=20=E8=A1=A8=E8=A8=98=E3=82=92=20runtime=20?= =?UTF-8?q?=E6=96=87=E6=9B=B8=E3=81=A8=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit codex 指摘対応 (round 7)。背景 / Task 2 / Task 4 の `code-reviewer` 表記を、 runtime 配布文書で統一済みの「Claude Code の code-reviewer」に揃え、計画文書と 実装文書の名称ズレを解消。 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- issues/issue-35-issue-plan-cross-review-required.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/issues/issue-35-issue-plan-cross-review-required.md b/issues/issue-35-issue-plan-cross-review-required.md index 5175b36..92a1582 100644 --- a/issues/issue-35-issue-plan-cross-review-required.md +++ b/issues/issue-35-issue-plan-cross-review-required.md @@ -14,7 +14,7 @@ Step 6 を「個別 PR は原則 `/ndf:cross-review` 必須」と読める内容 ## 問題・背景 -現行の Step 6 は `/ndf:review-branch`、`/ndf:review`、`/ndf:cross-review` を選択肢として並べているため、個別 PR を `code-reviewer` や単発レビューだけで release ブランチへ merge できるように読める。 +現行の Step 6 は `/ndf:review-branch`、`/ndf:review`、`/ndf:cross-review` を選択肢として並べているため、個別 PR を Claude Code の code-reviewer や単発レビューだけで release ブランチへ merge できるように読める。 その運用では、release PR 側の cross-review が個別 PR 範囲の重大バグをまとめて検出する形になり、ワークフロー自身が禁止している「release PR で個別 PR 範囲の指摘を解決する」状態に近づく。 @@ -39,7 +39,7 @@ runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runti ### Task 2: 軽量レビューの位置づけを限定 - **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` -- **変更内容:** `/ndf:review-branch` は PR 作成前のセルフレビュー、`/ndf:review` は例外的な単発確認に限定する。`ndf:code-reviewer` 単発レビューを cross-review の代替にしない方針を明記する。 +- **変更内容:** `/ndf:review-branch` は PR 作成前のセルフレビュー、`/ndf:review` は例外的な単発確認に限定する。Claude Code の code-reviewer 単発レビューを cross-review の代替にしない方針を明記する。 ### Task 3: release PR Ready 前チェックを追加 @@ -49,7 +49,7 @@ runtime 別配布物は `plugins/ndf-shared` を正とし、`scripts/build-runti ### Task 4: アンチパターン追記 - **対象ファイル:** `plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md` -- **変更内容:** 「個別 PR を cross-review せず、code-reviewer / 単発レビューだけで release へ merge する」をアンチパターン表に追加する。 +- **変更内容:** 「個別 PR を cross-review せず、Claude Code の code-reviewer / 単発レビューだけで release へ merge する」をアンチパターン表に追加する。 ### Task 5: cross-review 側との整合確認 From e32c4d499310bd7bea0ada5eb5276dd3a72459a5 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 17 Jul 2026 01:33:57 +0000 Subject: [PATCH 10/10] =?UTF-8?q?Docs:=20Step=207=20=E3=81=AE=20Step=208?= =?UTF-8?q?=20=E5=8F=82=E7=85=A7=E6=8B=AC=E5=BC=A7=E3=82=92=E7=B0=A1?= =?UTF-8?q?=E6=BD=94=E5=8C=96=20(=E9=87=8D=E8=A4=87=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gemini round 8 指摘対応。Step 7 の括弧内が Step 8 フォールバックの説明を重複 再説明しており冗長だったため、相互参照のみ残して簡潔化。なお指摘が前提とする 「フォールバックを release 配下修正 PR に置換」は round 5/6 で状態別フォールバックへ 既に改訂済みのため、現行記述に矛盾はない。runtime 配布物も同期。 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01UTuHjDpC8amddmyGKfTKtx --- plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md | 2 +- plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md | 2 +- plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md | 2 +- plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md index 010565d..fdae1ec 100644 --- a/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-claude/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースは扱いが異なるため Step 8 のフォールバック参照) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge diff --git a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md index 010565d..fdae1ec 100644 --- a/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-codex/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースは扱いが異なるため Step 8 のフォールバック参照) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge diff --git a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md index 010565d..fdae1ec 100644 --- a/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-kiro/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースは扱いが異なるため Step 8 のフォールバック参照) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge diff --git a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md index 010565d..fdae1ec 100644 --- a/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md +++ b/plugins/ndf-shared/skills/issue-plan-strategy/SKILL.md @@ -252,7 +252,7 @@ release ブランチへの merge が一通り進んだ段階で: - 設定値の重複・矛盾 - migration の順序依存 - E2E シナリオ (`/ndf:playwright-scenario-test` の活用) -- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースの扱いは Step 8 のフォールバック参照。そちらは元差分が既に release に取り込まれ新規 PR に乗らないため扱いが異なる) +- ここで **新たに** 個別 PR 範囲のバグが見つかった場合は、**release PR にコメントせず**、該当の個別 PR (既に merge 済みなら修正差分を載せた新しい修正 PR を release 配下に作成) 側に指摘を書き込み、修正ループを回す。この場合レビュー対象は **修正差分** であり新規 PR でレビューできる(元の差分がそもそも cross-review 未実施だったケースは扱いが異なるため Step 8 のフォールバック参照) - release PR には integration 観点の指摘のみ残す ## Step 8: release PR body の最終化と release → default の merge