何を見つけたか
cross-refactoring を飛ばしてよい条件が、どの Skill にも書かれていない。
development-workflow は「構造改善と実装レビューは、通す工程であって任意ではない」と定め、
standard と legacy-refactor の構造改善を cross-refactoring にしている。一方
references/parallel-work.md の下限 3 は「判定したモードの必須の工程を飛ばさない。飛ばすなら、
飛ばした工程と理由を Pull Request の本文へ残す」と書く。
飛ばしてよい場合があることは読み取れるが、どういうときに飛ばしてよいかは書かれていない。
判断が毎回その場の裁量になる。
どこで見つけたか
v10.8.0 の実装 Pull Request #489 。standard だが、本番コードの差分は
plugins/ndf/skills/development-workflow/scripts/lib/workflow-common.sh の 1 行
(WF_STAGE_MATRIX の「設計」の行)だけで、残りは Skill 本文と参照の Markdown だった。
飛ばした理由は 2 つで、Pull Request の本文へ残した。
改善する構造が 1 行しかない
--scope を広げると、この変更が触っていないファイルへの改善提案が入り、範囲外の変更になる
なぜこの変更の範囲外なのか
#375 / #376 / #463 の受け入れ条件は design と requirements-design の成果物の定義であり、
cross-refactoring の要否の判断を含まない。
同じ状態に当たった回数
4 回当たっている。 いずれも変更が Markdown と定数だけで、構造改善の対象になるコードが無かった。
Pull Request
扱い
#489 (v10.8.0)
飛ばし、理由を Pull Request の本文へ残した(上記)
#520 / #521 (v10.10.0)
--baseline-test に指定できるテストが範囲に無く(pytest が no tests ran、終了コード 5)、refactor.py init が「着手前のテストが失敗しています」で止まった。workflow-modes.md の「構造改善の退避先」に従い refactoring 単独へ退避し、Pull Request のコメントへ残した
#612 (v10.11.0、#500 の文書の改名と手入れ)
standard のため起動したが、テスト整備ラウンド 1 の途中で中止した。中止までに、pytest が収集しない補助ファイルへテストを足す事象も起きた(#620 )
退避の判断は規定どおりに通った。 ただし plugins/ndf/skills/development-workflow/references/workflow-modes.md
の「構造改善の退避先」の条件は、テストが無い・CLI が使えない・範囲を絞れないの 3 つで、Markdown
だけを変える standard の変更は条件に無い。 Skill を足す変更がこれに当たり、退避が例外ではなく
通常の経路になっている。
直さないと何が起きるか
同じ判断を毎回その場で行うことになる。 standard の変更のうち、Markdown だけを変える
ものはこのリポジトリでは珍しくない(v10.5.0 は 22 件中 19 件が light、残る 3 件も配布物の
記述だった)。
飛ばした記録が gate に残らない。 進行の記録に「構造改善」を書かないため、配布の時点で
「記録なし: 構造改善」と案内が出る。これは意図した挙動だが、飛ばしてよいと判断した場合と、
通し忘れた場合が同じ見え方になる。
所要時間への影響(2026-09-01〜09-15 の実測)
集計の方法と全体の値は #662 にある。
同じ Pull Request で両方を回した 19 件で、所要の中央値は cross-refactoring 75.9 分、cross-review 14.9 分だった。1 本の Pull Request では構造改善が工程の時間の大半を占める
同じ期間の合計は、cross-refactoring 33 件で 56.3 時間(上限なしに繰り返した 2 件を除くと 34.4 時間)、cross-review 143 件で 101.4 時間
飛ばしてよい変更で起動した実行が何件あったかは出していない(変更の種類で分けていないため未確認)
考えられる直し方
案
中身
飛ばしてよい条件を書く
「本番コードの差分が無い、または改善の対象になる構造を持たない」ときに飛ばしてよい。判断は --scope に入れる対象があるかで見る
記録に「飛ばした」を持たせる
通っていない状態と、飛ばすと判断した状態を分ける。工程の値は増やさない (盤面の単一選択に影響する)
どちらも「飛ばす」を既定にしない。 通す費用より、通さない判断が見えないことのほうが高い。
条件の判定は差分から決まるので、スクリプトに持たせる。 差分がコード以外だけか、--scope に入る対象があるかを development-workflow の scripts/(stage-check.sh と同じ置き場所)が返し、LLM はその結果を読んで判断する(Skill の主体をスクリプトへ移し、LLM は呼び出し・結果の解釈・判断だけを持つ(全 Skill の改善の親) #845 の判断の 3 段の段 1)
「飛ばした」の記録は progress-record.sh --note で残せる。 工程の値を増やさずに、飛ばした工程と理由を記録へ添える(plugins/ndf/scripts/progress-record.sh の usage に --note TEXT がある)
由来
issue #375
関連
リリース後テスト(10.17.5、本番)
対象の版: 10.17.5(2026-09-23 23:27(UTC)に main へマージ、c33fde11、タグ ndf--v10.17.5、GitHub Release https://github.com/devbasex/ai-plugins/releases/tag/ndf--v10.17.5 )
導入経路: ref を指定しない登録(正式版のチャネル = main)から、$HOME 直下の隔離した設定ディレクトリで取得・導入した。Claude Code 2.1.281 は CLAUDE_CONFIG_DIR、Codex 0.156.0 は CODEX_HOME、Kiro は git archive c33fde11 の展開物の install.sh --project <一時> --yes(一時 HOME)。claude のセッションは起動していない。利用者の ~/.bashrc ~/.zshrc の sha256 は前後で一致、~/.local/share/ndf/ は前後とも無い。隔離先は確認後に削除した。
課題
受け入れ条件
実行したこと
実行時刻(UTC)
結果
#880 #883 #494 #723
取得元が出した版を指す
git ls-remote origin refs/heads/main 'refs/tags/ndf--v10.17.5^{}'
2026-09-23 23:28
合格 / exit=0、どちらも c33fde11
#880 #883 #494 #723
3 経路で 10.17.5 が入る
claude plugin marketplace add devbasex/ai-plugins → install ndf@ai-plugins → list / codex plugin marketplace add devbasex/ai-plugins → plugin add → list / Kiro の install.sh
2026-09-23 23:28
合格 / すべて exit=0。Claude・Codex とも Version 10.17.5、Kiro の ndf.json の説明が v10.17.5、.kiro/skills 43 個 + steering の ndf-policies.md(manifest の 44 と一致)
#880 #883 #494 #723
導入先の中身が出した版と同じ
Claude の導入先全体を c33fde11 の plugins/ndf と diff -rq。Codex と Kiro の導入先の skills/cross-refactoring と skills/development-workflow を同様に diff -rq
2026-09-23 23:29
合格 / 差は Claude Code が作る .in_use だけ。Codex・Kiro は 4 つとも exit=0
#880 #883 #494 #723
更新案内の「手元で確かめる」
4 コマンド(Claude Code の導入先の scripts を $SCRIPTS に)
2026-09-23 23:29
合格 / 4 つとも exit=0
#880 #883 #494 #723
AC1〜AC7・AC9〜AC14・AC17・AC18(検証手段は pytest)
導入先の skills/cross-refactoring/tests を uv run ... pytest -n 4
2026-09-23 23:29
合格 / exit=0、846 passed(10.6 秒)
#494
AC12〜AC14: assess の判定
一時リポジトリで導入先の refactor.py assess --base base を差分ごとに実行
2026-09-23 23:29
合格 / .md とテストだけ → exit=3(0 ファイル・0 行)、本番コード 5 行 → exit=3、11 行 → exit=0(通す)、存在しない ref → exit=2。理由と数えた値を 1 行ずつ出す
#494
AC15: 退避先の文書が飛ばす条件と退避の条件を分ける
導入先の workflow-modes.md の「構造改善の退避先」を読む
2026-09-23 23:30
合格 / assess の終了コード 3 の行と実行例がある
合否: 合格(実施した条件すべて)
記録: https://github.com/devbasex/ai-plugins/pull/935#issuecomment-5804675590(配布 : PR #935 / #937 、Release ndf--v10.17.5)
進行
モード: standard / 作業ツリー: /work/ai-plugins/.worktrees/feat/issue-880-883-494-723-cross-refactoring-fixes / 計画: issues/issue-880-883-494-723-plan.md
何を見つけたか
cross-refactoringを飛ばしてよい条件が、どの Skill にも書かれていない。development-workflowは「構造改善と実装レビューは、通す工程であって任意ではない」と定め、standardとlegacy-refactorの構造改善をcross-refactoringにしている。一方references/parallel-work.mdの下限 3 は「判定したモードの必須の工程を飛ばさない。飛ばすなら、飛ばした工程と理由を Pull Request の本文へ残す」と書く。
飛ばしてよい場合があることは読み取れるが、どういうときに飛ばしてよいかは書かれていない。
判断が毎回その場の裁量になる。
どこで見つけたか
v10.8.0 の実装 Pull Request #489。
standardだが、本番コードの差分はplugins/ndf/skills/development-workflow/scripts/lib/workflow-common.shの 1 行(
WF_STAGE_MATRIXの「設計」の行)だけで、残りは Skill 本文と参照の Markdown だった。飛ばした理由は 2 つで、Pull Request の本文へ残した。
--scopeを広げると、この変更が触っていないファイルへの改善提案が入り、範囲外の変更になるなぜこの変更の範囲外なのか
#375 / #376 / #463 の受け入れ条件は
designとrequirements-designの成果物の定義であり、cross-refactoringの要否の判断を含まない。同じ状態に当たった回数
4 回当たっている。 いずれも変更が Markdown と定数だけで、構造改善の対象になるコードが無かった。
--baseline-testに指定できるテストが範囲に無く(pytestがno tests ran、終了コード 5)、refactor.py initが「着手前のテストが失敗しています」で止まった。workflow-modes.mdの「構造改善の退避先」に従いrefactoring単独へ退避し、Pull Request のコメントへ残したstandardのため起動したが、テスト整備ラウンド 1 の途中で中止した。中止までに、pytestが収集しない補助ファイルへテストを足す事象も起きた(#620)退避の判断は規定どおりに通った。 ただし
plugins/ndf/skills/development-workflow/references/workflow-modes.mdの「構造改善の退避先」の条件は、テストが無い・CLI が使えない・範囲を絞れないの 3 つで、Markdown
だけを変える
standardの変更は条件に無い。 Skill を足す変更がこれに当たり、退避が例外ではなく通常の経路になっている。
直さないと何が起きるか
同じ判断を毎回その場で行うことになる。
standardの変更のうち、Markdown だけを変えるものはこのリポジトリでは珍しくない(v10.5.0 は 22 件中 19 件が
light、残る 3 件も配布物の記述だった)。
飛ばした記録が gate に残らない。 進行の記録に「構造改善」を書かないため、配布の時点で
「記録なし: 構造改善」と案内が出る。これは意図した挙動だが、飛ばしてよいと判断した場合と、
通し忘れた場合が同じ見え方になる。
所要時間への影響(2026-09-01〜09-15 の実測)
集計の方法と全体の値は #662 にある。
考えられる直し方
--scopeに入れる対象があるかで見るどちらも「飛ばす」を既定にしない。 通す費用より、通さない判断が見えないことのほうが高い。
--scopeに入る対象があるかを development-workflow のscripts/(stage-check.shと同じ置き場所)が返し、LLM はその結果を読んで判断する(Skill の主体をスクリプトへ移し、LLM は呼び出し・結果の解釈・判断だけを持つ(全 Skill の改善の親) #845 の判断の 3 段の段 1)progress-record.sh --noteで残せる。 工程の値を増やさずに、飛ばした工程と理由を記録へ添える(plugins/ndf/scripts/progress-record.shの usage に--note TEXTがある)由来
issue #375
関連
--scopeがファイル単位のため、issue と関係の無い既存の関数まで整理するリリース後テスト(10.17.5、本番)
対象の版: 10.17.5(2026-09-23 23:27(UTC)に
mainへマージ、c33fde11、タグndf--v10.17.5、GitHub Release https://github.com/devbasex/ai-plugins/releases/tag/ndf--v10.17.5 )導入経路: ref を指定しない登録(正式版のチャネル =
main)から、$HOME直下の隔離した設定ディレクトリで取得・導入した。Claude Code 2.1.281 はCLAUDE_CONFIG_DIR、Codex 0.156.0 はCODEX_HOME、Kiro はgit archive c33fde11の展開物のinstall.sh --project <一時> --yes(一時 HOME)。claude のセッションは起動していない。利用者の~/.bashrc~/.zshrcの sha256 は前後で一致、~/.local/share/ndf/は前後とも無い。隔離先は確認後に削除した。git ls-remote origin refs/heads/main 'refs/tags/ndf--v10.17.5^{}'c33fde11claude plugin marketplace add devbasex/ai-plugins→install ndf@ai-plugins→list/codex plugin marketplace add devbasex/ai-plugins→plugin add→list/ Kiro のinstall.sh10.17.5、Kiro のndf.jsonの説明がv10.17.5、.kiro/skills43 個 + steering のndf-policies.md(manifest の 44 と一致)c33fde11のplugins/ndfとdiff -rq。Codex と Kiro の導入先のskills/cross-refactoringとskills/development-workflowを同様にdiff -rq.in_useだけ。Codex・Kiro は 4 つとも exit=0scriptsを$SCRIPTSに)skills/cross-refactoring/testsをuv run ... pytest -n 4assessの判定refactor.py assess --base baseを差分ごとに実行.mdとテストだけ → exit=3(0 ファイル・0 行)、本番コード 5 行 → exit=3、11 行 → exit=0(通す)、存在しない ref → exit=2。理由と数えた値を 1 行ずつ出すworkflow-modes.mdの「構造改善の退避先」を読むassessの終了コード 3 の行と実行例がある合否: 合格(実施した条件すべて)
記録: https://github.com/devbasex/ai-plugins/pull/935#issuecomment-5804675590(配布: PR #935 / #937、Release
ndf--v10.17.5)進行
モード: standard / 作業ツリー:
/work/ai-plugins/.worktrees/feat/issue-880-883-494-723-cross-refactoring-fixes/ 計画:issues/issue-880-883-494-723-plan.md