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
6 changes: 3 additions & 3 deletions docs/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ cross-review / cross-refactoring が参加者の CLI を選び、起動し、監
| モデルを引けない | `model_unavailable` | 担当の CLI が、指定か設定のモデルを使えないと返したこと(参加の確認と起動結果の理由 model_unavailable) | — | — | `docs/specifications/cross-participant-admission-check.md` |
| 認証の失効 | `auth_expired` | 認証の状態確認は通るが、更新トークンの失効などで実行のときに認証を作り直せないこと(参加の確認と起動結果の理由 auth_expired) | — | — | `docs/specifications/cross-participant-admission-check.md` |
| 既定のモデルへの切り替え | `default_models` | 引数で明示していないモデルを引けない CLI を、既定のモデルで担当に入れること(participants.default_models) | — | — | `docs/specifications/cross-participant-admission-check.md` |
| 相手役 | — | cross-review のレビュー担当、cross-refactoring の提案・実装の担当として、ホストから CLI プロセスで起動されるランタイム(#2231) | — | — | — |
| 相手役 | — | cross-review のレビュー担当、cross-refactoring の提案・実装の担当として、ホストから CLI プロセスで起動されるランタイム(#2231) | — | — | `docs/specifications/ndf-distribution-runtimes.md` |

## NDF の cross-review(`ndf-cross-review`)

Expand Down Expand Up @@ -584,8 +584,8 @@ release が走らせるリリースの種別・リリースコマンド・公開
| スプリント経由の PR | — | 範囲の PR のうち、merge commit でベースブランチへ入った PR の 2 つ目の親の側(スプリントブランチ)へ merge commit で入った PR。変化と移行の手順はスプリント PR の本文が集めて持つ | — | — | `docs/specifications/ndf-release-approval-included-prs.md` |
| 承認の材料 | — | 承認資料が集める 5 つの材料。レビュー(cross-review のラウンド数と見送った指摘)・リファクタリング(採用と取り消しの件数)・全体テスト(コマンド・合否・件数)・設計文書の未確認・未実施のリリース後テスト | — | — | `docs/specifications/ndf-release-approval-materials.md` |
| 配布物の変化なし | — | PR の本文の `## 利用者向けの変化` が「無し」(「なし」も同じ)だけを持つこと。承認資料の「含む PR」の行に印を付け、CHANGELOG の版の節と「配る中身」には載せない。節の無い本文(題名で代える)とは別に扱う | — | — | `docs/specifications/ndf-release-approval-included-prs.md` |
| マニフェスト | — | plugins/ndf/manifests/<ランタイム>-skills.txt。ランタイムごとに配る Skill の一覧で、配布の唯一の基準(#2231) | — | — | — |
| 配布先のランタイム | — | マーケットプレイスのプラグインを導入できる形で届けるランタイム。#2231 の後は Claude Code と codex で、相手役のランタイムとは別に決まる(#2231) | — | — | — |
| マニフェスト | — | plugins/ndf/manifests/<ランタイム>-skills.txt。ランタイムごとに配る Skill の一覧で、配布の唯一の基準(#2231) | — | — | `docs/specifications/ndf-distribution-runtimes.md` |
| 配布先のランタイム | — | マーケットプレイスのプラグインを導入できる形で届けるランタイム。#2231 の後は Claude Code と codex で、相手役のランタイムとは別に決まる(#2231) | — | — | `docs/specifications/ndf-distribution-runtimes.md` |

## NDF の指示書チェック(`ndf-instructions`)

Expand Down
6 changes: 3 additions & 3 deletions docs/glossary/glossary.json
Original file line number Diff line number Diff line change
Expand Up @@ -4691,19 +4691,19 @@
"term": "相手役",
"context": "ndf-agent-cli",
"meaning": "cross-review のレビュー担当、cross-refactoring の提案・実装の担当として、ホストから CLI プロセスで起動されるランタイム(#2231)",
"pending_source": "issues/issue-2231-requirements.md"
"source": "docs/specifications/ndf-distribution-runtimes.md"
},
{
"term": "マニフェスト",
"context": "ndf-release",
"meaning": "plugins/ndf/manifests/<ランタイム>-skills.txt。ランタイムごとに配る Skill の一覧で、配布の唯一の基準(#2231)",
"pending_source": "issues/issue-2231-requirements.md"
"source": "docs/specifications/ndf-distribution-runtimes.md"
},
{
"term": "配布先のランタイム",
"context": "ndf-release",
"meaning": "マーケットプレイスのプラグインを導入できる形で届けるランタイム。#2231 の後は Claude Code と codex で、相手役のランタイムとは別に決まる(#2231)",
"pending_source": "issues/issue-2231-design.md"
"source": "docs/specifications/ndf-distribution-runtimes.md"
},
{
"term": "最終工程の記録",
Expand Down
2 changes: 2 additions & 0 deletions docs/specifications/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,5 +112,7 @@
| [ndf-supervise-test-limits-from-whole-runs.md](ndf-supervise-test-limits-from-whole-runs.md) | 予算なしのテストの上限を、所要の記録と直近の全体テストの実測(whole.jsonl)の大きい方の 3 倍で決め、テストのステップの開始で決め直すこと |
| [ndf-step-result-gaps-and-reading.md](ndf-step-result-gaps-and-reading.md) | 手順のスクリプトの結果 JSON の欠け(`gaps`)・過程(`process`)・判断(`decisions`)と、`ok` を欠けの無いときだけにする検査(`validate_result`・欠けの残る結果の `stopped` / 終了コード 6)、シェルから同じ形を出す `step_result.py emit` と `step-result.sh`、読む側の共通の関数(`step_read.py`)、記録のスクリプト(`progress-record.sh`・`projects-sync.sh`)の返し方と呼ぶ側が止まらずに報告へ載せること、子の 7 件がこの形をどう使ったか。形と終了コードの表は `plugins/ndf/scripts/lib/README.md` が正 |
| [ndf-run-state-owner-and-sweep.md](ndf-run-state-owner-and-sweep.md) | 実行をまたいで残る状態(レビュー worktree `pr<n>`・`rf<n>`、セッションの状態ファイル、`ndf-deps.*`、`fix-pr<n>-*`、`ndf-tests-*`、投稿キューの項目)に持ち主と寿命を記録し、終わった実行の残骸を cross-review と cross-refactoring の開始・merged の `cleanup`・テストのセッションの終わりで片付ける理由と境界(`--force` を使わない、未 push のコミットは自分で数える、寿命の窓は 24 時間、生きている持ち主・open の PR・作業の残る worktree・判定できない状態は理由付きで残す、別の実行が使う worktree では開始を止める、今回分でない位置エラーの `review-post` は控えへ外す)、持ち主の記録の形、`sweep_states`・`remove_review_worktree`・`Queue.flush(keep)`/`outcome` の契約。状態の一覧は `lib/run_state_kinds.py` の `KINDS` が正 |
| [ndf-distribution-runtimes.md](ndf-distribution-runtimes.md) | 配布先を Claude Code と Codex に限り、agy・Kiro CLI は cross 系の相手役としてだけ起動すること(#2231)。導入物の不在の検査(`test_distribution_runtimes.py`)、相手役の起動経路が配布物を読まないこと、前の版で入れた手元の扱い。利用者向けの残し方と消し方は `plugins/ndf/README.md` が正 |
| [ndf-sprint-close-final-stage.md](ndf-sprint-close-final-stage.md) | スプリント課題を最終工程の記録(閉じる条件 3・`--final-stage`)を確かめてから閉じること、振り返りの行を記録の PR の最後の配布の記録と比べる基準(`dist_comment_id`)、まとめのプランの並び(retro の後に close)、既定ブランチ宛の Pull Request の closing keywords を閉じる予定の参照へ置き換えること(#2228・#2082・#2119)。手順は `progress-tracking` の「スプリントを閉じる」が正 |

Skill の挙動仕様はここに置かない。Skill に関する詳細は対象 Skill の `SKILL.md` を参照する。
155 changes: 155 additions & 0 deletions docs/specifications/ndf-distribution-runtimes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
# 配布先は Claude Code と Codex で、agy・Kiro CLI は cross 系の相手役としてだけ起動する

マーケットプレイスのすべてのプラグイン(ndf・playwright-kit・mcp-* 10 個)を、Claude Code と Codex へすべての Skill で
配る。agy と Kiro CLI へは何も配らず、cross-review / cross-refactoring の相手役として、ホスト(Claude Code・Codex)から
CLI プロセスで起動するだけにする(#2231)。

**この文書が配布先の正本である。** 次の確定仕様に残る agy・Kiro CLI への配布・導入物(`dev.agy/`・`dev.kiro/`・
`agy-skills.txt`・`kiro-skills.txt`)・その生成と検査・スモークの記述は、配布先を 4 つにしていた時点のもので、
配布先についてはこの文書が優先する。

| 確定仕様 | 配布先を 4 つにしていた時点の記述 |
| --- | --- |
| [runtime-plugin-distribution.md](runtime-plugin-distribution.md) | Kiro CLI・agy の名前空間ディレクトリ、manifest、agy のエージェント定義の生成 |
| [runtime-plugin-container-smoke.md](runtime-plugin-container-smoke.md) | Kiro の像・adapter・確認 |
| [ndf-knowledge-and-kiro.md](ndf-knowledge-and-kiro.md) | Kiro CLI の導入(installer・symlink・steering) |

## 概要

| ランタイム | 役割 | 届けるもの |
| --- | --- | --- |
| Claude Code | 配布先・ホスト | すべてのプラグイン。NDF は `plugins/ndf/manifests/claude-skills.txt` の Skill |
| Codex | 配布先・ホスト | すべてのプラグイン。NDF は `plugins/ndf/manifests/codex-skills.txt` の Skill |
| agy | 相手役 | 何も配らない |
| Kiro CLI | 相手役 | 何も配らない |

agy・Kiro CLI のためだけに保っていた導入物・その生成と検査・スモークテスト・リリース後の導入の確認を外し、
agy・Kiro CLI だけで起きる不具合(Skill の本文の切り詰めなど)の置き場を無くした。相手役の起動経路は配布物を
読まないため、配布を止めても相手役の振る舞いは変わらない。

## 用語

配布先のランタイム・相手役・マニフェスト・ホストの定義は、用語集([docs/glossary.md](../glossary.md))にある。

## 背景

利用者の指示(2026-10-31)は「claude と codex のみ、すべての plugin を配布する。agy、kiro は配布せず、cross 系で
呼ばれるだけ」である。agy・Kiro CLI へ cross 系をホストとして回せる Skill だけを配る案は採らない。ホストとしての
使い方を残さないため、相手役に要る Skill は 0 本になる。マニフェストを空のファイルにして導入物の枠を残す案も
採らない。中身の無い導入物のために生成・検査・スモークを保つことになる。

この変更は配布物の取得元を変える操作(プロジェクト MVV の P1)に当たり、承認ゲート 1 の指示と承認ゲート 2 の承認で行った。

## 仕様

### 常に成り立つ条件

| # | 条件 | 破れたときの扱い |
| --- | --- | --- |
| I1 | どのプラグインにも `manifests/agy-skills.txt`・`manifests/kiro-skills.txt`・`dev.agy/`・`dev.kiro/` が無く、`.ndf/supervise.json` の `release.runtimes` は `claude`・`codex` の部分集合である | `scripts/tests/test_distribution_runtimes.py` が落ちる |
| I2 | Claude Code と Codex の配布物(両マニフェスト・各 `.codex-plugin/plugin.json`・`plugins/ndf/hooks/codex.json`・codex 向けの生成物)は配布先を絞った前と同じである | `build-runtime-plugins.sh --check`・`validate-runtime-plugins.sh`・既存の pytest |
| I3 | agy・Kiro CLI を相手役にする起動(`plugins/ndf/scripts/lib/launch-cli.sh` の `agy` / `kiro` の分岐、`cross-refactoring/scripts/prepare-worktrees.sh` の手順書の写し先)は配布先と関わらずに動く | 起動の既存の pytest |
| I4 | 前の版で Kiro CLI へ入れた手元の hook が呼ぶ共通のスクリプト(`plugins/ndf/scripts/hook.py` の `--runtime kiro`・`worktree-guard.sh`・`worktree-session.sh`・`wait-notify.py`)が残る | `worktree/tests/test_guard.py` の Kiro の入力のテスト |
| I5 | ワークフローのジョブと ruleset の必須のチェックが一致する | `required-checks-check`(`scripts/check-required-checks.py`) |

### 相手役として起動されるとき

```mermaid
sequenceDiagram
participant H as ホスト(Claude Code / Codex)
participant P as 準備(prepare-worktrees.sh)
participant L as 起動の共通スクリプト(launch-cli.sh)
participant R as 相手役(agy・Kiro CLI)
H->>P: cross-refactoring の初期化
P->>P: ホストの導入先から REQUIRED_SKILLS を担当の worktree へ写す
H->>L: 依頼文と worktree を渡す
L->>R: CLI プロセスで起動(--agent もプラグインの導入先も指さない)
R->>R: 依頼文と worktree の中の手順書だけを読む
R-->>H: 結果ファイル
```

- cross-review のレビュー担当の依頼文は Skill を読まずに完結する(`cross-review/scripts/launch-reviewer.sh` の `render_review_prompt`)
- cross-refactoring は `REQUIRED_SKILLS`(`refactoring`・`tdd-cycle`・`quality-gates`)を**ホストの導入先**から担当の worktree
(Kiro CLI は `.kiro/skills`、agy は `.agents/skills`)へ写す
- 起動の形の正本は `plugins/ndf/skills/external-ai/references/cli-kiro.md`・`cli-agy.md` にある。相手役に使えるかは
`.ndf/runtimes.json` と各 CLI の認証で決まる。cross-review の既定の参加者(claude・codex・kiro とホスト、agy は `--include agy`)は変わらない

### 配布物を組み立てて確かめる流れ

```mermaid
graph LR
M[claude・codex のマニフェスト] --> B[build-runtime-plugins.sh]
B --> C[codex の openai.yaml と mcp-* の .codex-plugin]
C --> V[validate-runtime-plugins.sh]
D[test_distribution_runtimes.py] --> V
C --> S[スモーク claude・codex]
R[release.runtimes claude・codex] --> VI[release-verification-steps.py verify-install]
```

## データ・設定

| 置き場 | 値 |
| --- | --- |
| `plugins/ndf/manifests/` | `claude-skills.txt`・`codex-skills.txt` だけ(行数は manifests が持つ) |
| `plugins/playwright-kit/manifests/` | `claude-skills.txt`・`codex-skills.txt` だけ |
| `.ndf/supervise.json` の `release.runtimes` | `["claude", "codex"]` |
| `.ndf/pace.json` の `verify` | `release-verification-steps.py verify-install --ref develop --runtimes claude,codex` |
| `release-verification-steps.py` の `--runtimes` | 既定 `claude,codex` |
| `.ndf/project.json` の `required_checks` | スモークは `runtime-smoke (claude)`・`runtime-smoke (codex)` |
| `.github/workflows/runtime-plugin-smoke.yml` の matrix | `runtime: [claude, codex]`。`runtime-plugin-authenticated-smoke.yml` の選択肢も `all`・`claude`・`codex` |
| `tests/runtime-smoke/` | `Containerfile.{base,claude,codex}`・`adapters/{claude,codex}.sh` |

`.ndf/worktree.json` の `.kiro/`(相手役の設定を置く場所)と、`scripts/token-usage.py` の kiro・agy の使用量の読み取り
(相手役の使用量)は相手役の経路として残る。

## 運用

### 前の版で agy・Kiro CLI へ入れた利用者の手元

こちらから手元を消す操作はしない(共通原則 C6)。最後に配った版は v10.27.4 である。残し方と消し方の正本は
`plugins/ndf/README.md` の「agy・Kiro CLI への配布の終了」にある。

| ランタイム | 配布を止めた後 |
| --- | --- |
| agy | 導入の写し(`~/.gemini/config/plugins/ndf/`)の絶対パスを指すため、そのまま動く。新しい版は届かない |
| Kiro CLI | `.kiro/agents/ndf.json` の hook は clone の共通のスクリプトを呼び、それが残る(I4)ため、clone を進めても動く。installer は無くなる |

共通のスクリプトの Kiro の分岐は消さない。消すと clone を進めた Kiro CLI の利用者で、プロンプトを送るたびに hook が失敗する。
いつ消すかは棚卸しで利用の実態を見て決める。

### 範囲の外に残したもの

Claude Code・Codex へ配る Skill の本文とスクリプトに残る、ホストとしての Kiro CLI・agy の分岐(例: `plugins/mcp/mcp-redash/scripts/redash-mcp-config.js`
の `syncKiroAgent`、cross-review の `docs/01-state-and-review.md` のホストの導入先の候補)は消していない。相手役としての記述
(担当の worktree の `.kiro/skills`・`.agents/skills`)と同じファイルに並び、取り違えると相手役の経路を壊すためである。
棚卸しで扱う。

`KIRO.md` は指示書のチェック(`.ndf/instructions.json`)が読む指示書として残し、相手役としての Kiro CLI の説明だけを持つ。

### 確かめていないこと

| 項目 | 内容 |
| --- | --- |
| プロジェクト MVV との食い違い | Mission は 4 つのランタイムを挙げる。改訂は #2296 で扱う |
| 相手役が配布を止めた後も同じ結果を返すか | 起動の経路をコードで読んで判断した。実物はリリース後テストで確かめる |

## テスト観点

- `scripts/tests/test_distribution_runtimes.py` が、`plugins/` の下の agy・Kiro CLI の導入物とマニフェストの不在と、
`release.runtimes` が `claude`・`codex` に収まることを確かめること。`plugins/mcp/mcp-notion/dev.kiro/` を 1 つ戻すと落ち、
`release.runtimes` に `kiro` を足すと落ちること
- `build-runtime-plugins.sh --check`・`validate-runtime-plugins.sh` が agy・Kiro CLI の生成物を求めずに通ること
- Codex のマニフェスト・`.codex-plugin`・`hooks/codex.json` が配布先を絞った前と同じであること
- 相手役の起動の pytest(`test_lib_launch_cli_runtimes.py`・`cross-review/tests/test_launch_cli_runtimes.py`・`test_launch_agy.py`・
`cross-refactoring/tests/test_launch_agy_phases.py`・`test_prepare_worktrees.py`)が通ること
- `worktree/tests/test_guard.py` の Kiro の入力のテストが通ること
- スモークの matrix が `[claude, codex]` で通り、`required-checks-check` が通ること
- リリース後に、新しい版を入れた環境から `/ndf:cross-review <PR> --include agy` と `/ndf:cross-refactoring <PR>` を回し、
agy・Kiro CLI の結果ファイルが揃うこと

## 関連リンク

- [runtime-plugin-distribution.md](runtime-plugin-distribution.md): Claude Code・Codex の配布の形
- [cross-review-participants-and-seats.md](cross-review-participants-and-seats.md): 参加者プール
- [docs/versioning-and-distribution.md](../versioning-and-distribution.md): 版と配布の正本
- #2231
2 changes: 2 additions & 0 deletions docs/specifications/ndf-knowledge-and-kiro.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# NDF 知識構造・Kiro CLI 仕様

> **配布先は Claude Code と Codex である(#2231)。** この文書に残る agy・Kiro CLI への配布・導入物・生成・検査・スモークの記述は配布先を 4 つにしていた時点のもので、配布先については [ndf-distribution-runtimes.md](ndf-distribution-runtimes.md) が優先する。

## 概要

NDF の知識配置(`AGENTS.md` と版と配布の正本、README の役割を含む)、Serena MCP 分離、Kiro CLI 対応に関する確定仕様。
Expand Down
Loading
Loading