Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,7 +9,7 @@
{
"name": "ndf",
"source": "./plugins/ndf-claude",
"description": "Claude Code plugin (v8.4.0): 8 specialized agents and 27 focused NDF skills for PR/review workflows, cross-review, implementation planning, plan-to-spec, Docker container access, statusline, external AI delegation (Codex/Gemini), transcript retention guard, and optional Slack notifications."
"description": "Claude Code plugin (v8.5.0): 8 specialized agents and 27 focused NDF skills for PR/review workflows, cross-review, implementation planning, plan-to-spec, Docker container access, statusline, external AI delegation (Codex/Gemini), transcript retention guard, and optional Slack notifications."
},
{
"name": "playwright-kit",
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -77,7 +77,7 @@ ai-plugins/

## NDFプラグインについて

**NDFプラグイン**は、このマーケットプレイスの主要プラグインです(v8.4.0)。plugin 名は全ランタイムで `ndf` を維持し、配布物は `plugins/ndf-claude` / `plugins/ndf-codex` / `plugins/ndf-kiro` に分離しています。
**NDFプラグイン**は、このマーケットプレイスの主要プラグインです(v8.5.0)。plugin 名は全ランタイムで `ndf` を維持し、配布物は `plugins/ndf-claude` / `plugins/ndf-codex` / `plugins/ndf-kiro` に分離しています。
- 共通編集元は `plugins/ndf-shared/`
- Claude Code版は 8個の専門サブエージェント、公開Skills、SessionStart/Stopフックを提供
- Codex版は Codex向け公開Skillsと任意Slack通知hookを提供
Expand Down
4 changes: 3 additions & 1 deletion CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,7 +29,7 @@ skills/ → 実行可能なワークフロー

詳細は `docs/specifications/ndf-knowledge-and-kiro.md` を参照。

## NDF v8.4.0 の Skill 構成
## NDF v8.5.0 の Skill 構成

Skill は 31 個で、配布は `plugins/ndf-shared/manifests/` が唯一の基準(Claude Code 27 / Codex 25 / Kiro 26)。ブラウザ自動テストの 4 個は `playwright-kit` プラグインへ分離した(`plugins/playwright-kit-shared/`)。frontmatter の書き方は `plugins/ndf-shared/skills/README.md` の規約に従い、`python3 scripts/check-skill-frontmatter.py` で検査する。利用実績と維持・統合・削除の判定は `docs/specifications/ndf-skill-inventory.md` に記録する。

Expand All@@ -47,6 +47,8 @@ v8.3.0 で `cross-refactoring` の公開の責務を進行側へ一本化した

v8.4.0 で `markdown-writing` に「敬意と節度のある表現で書く」(ルール 4)を追加し、以降のルール番号を 1 つ繰り下げた。強い否定語・過剰な装飾語・根拠の曖昧な断定の 3 種を扱い、セルフチェックの grep も 3 種に分けた。あわせて `01-diagram-guide.md` を図表ルールの冒頭から手順として読ませ、上限値や記法は SKILL.md へ書かずガイド側に置く構成にした(実測で読み込み挙動を確認した結果)。`pr` は完了報告を `### 6. 完了報告` として手順に組み込み、テンプレートと PR URL の書き方(生の URL を書く)を定めた。

v8.5.0 で `cross-refactoring` の再々検証(PR #125)で見つかった不具合 4 件と、`cross-review` の投稿確認を直した。進行を止めていたのは生成物の同期で、`git status --porcelain` を固定幅で読む箇所が出力全体を `strip()` していたため、変更パスの先頭 1 文字が欠けていた。あわせて実装担当が残した未コミット変更を取り込みの前に捨てるようにし、提案の直前に読み取り用の作業ディレクトリを同期するようにした。`cross-review` は申告されたコメント数を GitHub 側の実数と突き合わせる。詳細は `issues/issue-113-cross-refactoring-re-retrial.md`。

v6.0.0 の対応表(`review` → `pr-review`)は予告どおり削除済み。v6.0.0 以前から移行する場合は v6.1.0 の `ndf-policies` を参照する。

## cross-refactoring
Expand Down
12 changes: 10 additions & 2 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,7 +6,7 @@ Claude Code / Codex / Kiro CLI向けのスキル・MCP設定を共有するた

このマーケットプレイスは、チーム全体でAI開発ツール(Claude Code / Codex / Kiro CLI)の導入を加速するための事前設定されたプラグインを提供します。

**NDFプラグイン v8.4.0** は、同じ `ndf@ai-plugins` という名前で Claude Code / Codex / Kiro CLI へ配布されるランタイム別プラグインです。共通ソースは `plugins/ndf-shared/` に集約し、利用者が install する配布物は `plugins/ndf-claude/` / `plugins/ndf-codex/` / `plugins/ndf-kiro/` に分かれています。
**NDFプラグイン v8.5.0** は、同じ `ndf@ai-plugins` という名前で Claude Code / Codex / Kiro CLI へ配布されるランタイム別プラグインです。共通ソースは `plugins/ndf-shared/` に集約し、利用者が install する配布物は `plugins/ndf-claude/` / `plugins/ndf-codex/` / `plugins/ndf-kiro/` に分かれています。

- **公開Skills**: Claude Code向け core 27個、Kiro向け core 26個、Codex向け core 25個に分離。
- **元Skills(30個)**:
Expand DownExpand Up@@ -102,9 +102,17 @@ kiro-cli chat --agent ndf

| プラグイン名 | バージョン | 説明 | 詳細 |
|------------|----------|------|------|
| **ndf** | 8.4.0 | Claude Code / Codex / Kiro CLI 向けに runtime 別配布物を提供する NDF プラグイン。8個の専門エージェント(Claude版)、公開Skills(Claude Code向け core 27個、Kiro向け core 26個、Codex向け core 25個)、Claude SessionStart/Stopフック、Codex/Kiro向け通知・実行補助を提供。v4.0.0 で Codex MCP サーバを廃止し、`/ndf:external-ai` skill + `corder` エージェント経由の CLI 直接実行に一本化。 | [Claude](./plugins/ndf-claude/README.md) / [Codex](./plugins/ndf-codex/README.md) / [Kiro](./plugins/ndf-kiro/README.md) |
| **ndf** | 8.5.0 | Claude Code / Codex / Kiro CLI 向けに runtime 別配布物を提供する NDF プラグイン。8個の専門エージェント(Claude版)、公開Skills(Claude Code向け core 27個、Kiro向け core 26個、Codex向け core 25個)、Claude SessionStart/Stopフック、Codex/Kiro向け通知・実行補助を提供。v4.0.0 で Codex MCP サーバを廃止し、`/ndf:external-ai` skill + `corder` エージェント経由の CLI 直接実行に一本化。 | [Claude](./plugins/ndf-claude/README.md) / [Codex](./plugins/ndf-codex/README.md) / [Kiro](./plugins/ndf-kiro/README.md) |
| **playwright-kit** | 1.0.0 | Playwright による E2E テストの計画・実装・証跡管理を提供するプラグイン。ページ役割からのテスト計画、動画 / trace 付きスクリプト実装、レポート生成と Drive 保管、playwright_kit ランタイム(init、a11y / CWV スキャン)の 4 Skill。NDF v7.0.0 で分離。 | [Claude](./plugins/playwright-kit-claude/README.md) |

### NDF v8.5.0 の主な変更

- **生成物の同期が止まる不具合を修正**: `git status --porcelain` を固定幅で読む箇所が出力全体を `strip()` していたため、変更パスの先頭 1 文字が欠けて `git add` が失敗していた
- **実装担当の置き土産を捨ててから取り込む**: コミットされなかった変更は検証を受けていないため、`merge-apply` / `merge-fix` が取り込みの前に捨てる
- **実装担当のコミットとフックの関係を明示**: 生成物の同期を検査するリポジトリでも、そのコミットだけフックを外してよいことを手順書に定めた
- **提案の直前に読み取り用を同期**: 取り消しで進んだ HEAD が届かず、消えたコードへの提案が返る問題を解消
- **cross-review が投稿の成否を確認**: 申告されたコメント数を GitHub 側の実数と突き合わせ、届いていなければ中断する

### NDF v8.4.0 の主な変更

**`/ndf:markdown-writing` に敬意ある表現のルールを追加し、図表ガイドを読む位置を明示しました。**
Expand Down
4 changes: 2 additions & 2 deletions plugins/ndf-claude/.claude-plugin/plugin.json
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "ndf",
"version": "8.4.0",
"description": "Claude Code plugin (v8.4.0): 8 specialized agents and 27 focused NDF skills for PR/review workflows, cross-review, implementation planning, plan-to-spec, Docker container access, statusline, external AI delegation (Codex/Gemini), transcript retention guard, and optional Slack notifications.",
"version": "8.5.0",
"description": "Claude Code plugin (v8.5.0): 8 specialized agents and 27 focused NDF skills for PR/review workflows, cross-review, implementation planning, plan-to-spec, Docker container access, statusline, external AI delegation (Codex/Gemini), transcript retention guard, and optional Slack notifications.",
"author": {
"name": "takemi-ohama",
"url": "https://github.com/takemi-ohama"
Expand Down
11 changes: 9 additions & 2 deletions plugins/ndf-claude/skills/cross-refactoring/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -193,11 +193,17 @@ export CROSS_REFACTORING_TMP_DIR="$TMP_DIR"

while :; do # 提案ラウンドの繰り返し
rf_eval start-round "$ID" || break # 終了コード 1 = 繰り返し終了
# **提案の直前に読み取り用を同期する。** 前ラウンドの取り消しで HEAD が進んで
# いるため、同期しないと**消えたコードに対する提案**が返る(実測: 取り消しで
# 消えた関数へ 2 件)。HEAD が変わっていなければ何も起きない。
"$SCRIPTS/prepare-worktrees.sh" "$ID" sync "$(git -C "$WORK" rev-parse HEAD)"
for a in $RUNTIMES; do
"$SCRIPTS/launch-cli.sh" "$a" propose "$ID" "$ROUND"
done
# 提案の所要は参加ランタイムと回線状況で振れる(実測 90〜285 秒)。既定の
# 打ち切りに任せず、明示する。
"$LIB/monitor.py" "$ID" --agents "$RUNTIMES_CSV" --tmp-dir "$TMP_DIR" \
--stem-template "{agent}-propose-rf{id}-r$ROUND"
--stem-template "{agent}-propose-rf{id}-r$ROUND" --timeout 900
rf merge-proposals "$ID" || break # 終了コード 2 = 採用 0 件

"$SCRIPTS/launch-cli.sh" "$IMPL" apply "$ID" "$ROUND"
Expand All@@ -213,7 +219,7 @@ while :; do # 提案ラウンドの繰り返
"$SCRIPTS/launch-cli.sh" "$r" review "$ID" "$ROUND"
done
"$LIB/monitor.py" "$ID" --agents "$REVIEWERS_CSV" --tmp-dir "$TMP_DIR" \
--stem-template "{agent}-review-r$ROUND"
--stem-template "{agent}-review-r$ROUND" --timeout 900
rf judge-review "$ID" "$ROUND"; rc=$?
[ $rc -eq 0 ] && break # 2 者とも承認
[ $rc -eq 3 ] && continue # 形式不正 — 差し戻して再レビュー
Expand DownExpand Up@@ -271,6 +277,7 @@ done
| 結果ファイルの申告を検証の材料にする | 実装担当は報告する側。JSON を書き換えるだけで通る検査は機械検証ではない |
| レビューの指摘に項目 ID を付けない | 同上。差し戻して再レビューになる |
| `git push --force` / `--no-verify` を使う | 他者の作業を消す。検証を飛ばす |
| 実装担当のコミットでフックの通し方を決めない | 生成物の同期を検査するリポジトリでは、同期の禁止と両立せずコミットを作れなくなる。迂回してよい手段を 1 つ定める |
| 提案とレビューにホストを混ぜる | 実装者と評価者が同一モデルになりうる。初期化時に検査して失敗させている |
| kiro を既定モデルのまま計測する | `auto` は実際に選ばれたモデルを取得できない |
| 提案フェーズでコードを直す | 提案は読むだけ。直すのは実装担当 1 者に集約する |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -182,11 +182,12 @@ claude 17 本 / codex 1 メソッド / kiro 0 本と揃わなかった。最後
## Step 2: 提案

```bash
"$SCRIPTS/prepare-worktrees.sh" "$ID" sync "$(git -C "$WORK" rev-parse HEAD)"
for a in $RUNTIMES; do
"$SCRIPTS/launch-cli.sh" "$a" propose "$ID" "$ROUND"
done
"$LIB/monitor.py" "$ID" --agents "$RUNTIMES_CSV" --tmp-dir "$TMP_DIR" \
--stem-template "{agent}-propose-rf{id}-r$ROUND"
--stem-template "{agent}-propose-rf{id}-r$ROUND" --timeout 900
```

3 CLI を並列で起動し、同一のプロンプトで提案させる。**提案フェーズにホストは現れない**
Expand All@@ -195,6 +196,24 @@ done

提出形式は [prompts/propose.md](../prompts/propose.md) にある。

### 提案の直前に読み取り用を同期する

**同期が要るのは HEAD が進んだときであって、特定のフェーズの後ではない。**
適用と修正の直後だけを同期していると、取り消しで進んだ HEAD が読み取り用へ
届かない。実測では、ラウンドを全件取り消した次の提案で、**取り消しによって
消えた関数**に対する提案が 2 件返った。統合は対象の実在を検査しないため、
そのまま採用され、適用で必ず失敗する。

提案の直前に同期しておけば、どのフェーズを経ていても読み取り用は最新になる。
HEAD が変わっていなければ何も起きないので、重ねて呼んでも無駄がない。

### 打ち切りまでの時間を明示する

提案の所要はランタイムと回線状況で振れる(実測 90〜285 秒)。既定の打ち切りに
任せると、分析そのものは進んでいるのに時間切れで結果を捨てることがある。
結果ファイルには `idle_seconds` が残るので、**止まっていたのか間に合わなかったのか**は
後から読める。

### 結果ファイル名にラウンド番号を入れる

CLI の起動時に同名の結果ファイルを消すため、**提案の結果ファイル名にもラウンド番号が
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -199,6 +199,32 @@ Pull Request に残る。**都合の悪い変更を申告しないだけで検
終わると、Pull Request 側には未検証の差分が残るのに、次の実行は処理済みガードで
素通りしてしまう。印があれば、次の実行が判定より先に再送信する。

### 実装担当のコミットはフックの検査を通さなくてよい

**生成物の同期を pre-commit で検査するリポジトリでは、そのままだとコミットを作れない。**
実装担当は範囲内だけを変更するので生成物は必ず古くなり、同期は禁じられている。

公開は進行側が検証を通してから行うため、**実装担当のコミット時点で生成物が古いのは
設計どおり**である。そこで、フックが原因でコミットできないときは
`git -c core.hooksPath=/dev/null commit ...` で**そのコミットだけ**フックを外させる。

- 禁止は `--no-verify` だけを名指しにしない。手段の名前で書き分けると、同じことが
別の名前で起こる。実測では、同じ実装担当が適用フェーズではフックを迂回し、
修正フェーズでは迂回せず 0 コミットで終えた
- **直した内容は必ずコミットさせる。** 作業ツリーに置いたまま終えると、検証を
受けていない変更として `merge-apply` / `merge-fix` が捨てる

### 取り込みの前に置き土産を捨てる

`merge-apply` と `merge-fix` は、実装担当が残した未コミットの変更を捨ててから
結果を読む。コミットされなかった変更はどの検証も受けておらず、公開する道が無い。

残したまま進むと、push の直前の清浄性の検査で中断する。実測では、修正フェーズで
コミットを作れなかった実装担当が直しかけの差分を置いたまま終え、続く `merge-fix` が
「修正 0 件」として先へ進むこともできなくなった。

制御用ディレクトリ(状態・結果・ログ)は無視の設定で守られており、消えない。

### コミットトレーラーの形式

適用と修正のコミットメッセージ本文の末尾に、**git のトレーラー形式**で実行主体を残す。
Expand Down
7 changes: 7 additions & 0 deletions plugins/ndf-claude/skills/cross-refactoring/prompts/apply.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,13 @@ Impl-Model: $RF_MODEL
- **push しない。** 公開するのは進行側だけで、**検証を通した後**に行います。
ここで公開すると、検証を通っていない変更が Pull Request に残ります
- **`git push --force` と `--no-verify` を使わない**
- **コミット時のフックが生成物の同期を求めても、同期はしない。**
同期は進行側が公開の直前に行うため、ここでは生成物が古いのが正しい状態です。
フックが原因でコミットできないときは
`git -c core.hooksPath=/dev/null commit ...` で**そのコミットだけ**フックを外します。
公開するのは進行側だけなので、検証を受けていない変更が Pull Request へ出ることはありません
- **直した内容は必ずコミットする。** 作業ツリーに置いたまま終えると、
検証を受けていない変更として捨てられます
- 作業ディレクトリの外を触らない
- **対象範囲(`$RF_SCOPE`)の外にあるファイルを 1 つも変更しない。** 範囲外を触った
コミットを含む項目は検証で失敗し、取り消されます
Expand Down
7 changes: 7 additions & 0 deletions plugins/ndf-claude/skills/cross-refactoring/prompts/fix.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,13 @@ Impl-Model: $RF_MODEL

- **push しない。** 公開するのは進行側だけで、**検証を通した後**に行います
- **`git push --force` と `--no-verify` を使わない**
- **コミット時のフックが生成物の同期を求めても、同期はしない。**
同期は進行側が公開の直前に行うため、ここでは生成物が古いのが正しい状態です。
フックが原因でコミットできないときは
`git -c core.hooksPath=/dev/null commit ...` で**そのコミットだけ**フックを外します。
公開するのは進行側だけなので、検証を受けていない変更が Pull Request へ出ることはありません
- **直した内容は必ずコミットする。** 作業ツリーに置いたまま終えると、
検証を受けていない変更として捨てられます
- 作業ディレクトリの外を触らない
- **対象範囲(`$RF_SCOPE`)の外にあるファイルを 1 つも変更しない。** 範囲外を触った
修正コミットがあると、その修正ラウンドの範囲ごと取り消されます
Expand Down
Loading
Loading