何を見つけたか
cross-refactoring が、変更範囲の広さに関係なく、1 項目を適用するたびに --baseline-test のテストを丸ごと回している。 範囲が狭い変更でも、1 項目あたりの待ち時間がリポジトリ全体のテスト時間で決まる。
PR #844(#829 #830)の検査の持ち場で起きた。--scope は 6 ファイル(plugins/ndf/scripts/token-guard.sh ほか)だったが、--baseline-test に全体テスト uv run --with pytest pytest scripts/tests plugins/ndf -q(5090 件)が渡されていた。現状固定テストのラウンド 2 回で 10 項目を採用し、1 項目あたり約 8 分かかった(コミットの時刻: 02:29, 02:38, 02:46, 02:55, 03:03, 03:18, 03:26, 03:35, 03:43)。約 90 分経っても構造改善のラウンドに入れず、利用者の指示で打ち切った。
範囲の中のテスト(plugins/ndf/scripts/tests/test_token_guard.py)だけなら数秒で終わる。
どこで見つけたか
plugins/ndf/skills/cross-refactoring/SKILL.md:94: --baseline-test は「着手前と各コミットで実行するテスト」。反復中の検証と最後の検証を分けていない
plugins/ndf/skills/cross-refactoring/scripts/refactor_lib/commands/converge.py:151: 検証は state の baseline_test.command をそのまま実行する
plugins/ndf/skills/cross-refactoring/scripts/refactor_lib/scope.py:134(scope_problem): --scope の中のテストが --baseline-test の実行集合に入るかは見るが、実行集合が範囲に比べて広すぎるかは見ない
- 起動する側(
development-workflow の検査の持ち場 → supervisor)に、--baseline-test をどこまで絞るかの基準が無い。supervisor はリポジトリの全体テストをそのまま渡した
なぜこの変更の範囲外なのか
#829 #830 の受け入れ条件は、待ちのポーリングと conductor の文脈を hook で止めることである。cross-refactoring の検証の範囲は含まない。
直さないと何が起きるか
範囲が狭い変更ほど、待ち時間の大半が関係のないテストに使われる。その間、supervisor と参加 CLI の待ちの費用がかかり続ける(マイルストーン 26 の主題であるトークン消費に当たる)。項目数が上限(1 ラウンド 5 件、テスト整備 2 ラウンド、構造改善 3 ラウンド)まで行くと、全体テストを数十回回すことになる。
直し方の候補
- 反復中と最後で検証を分ける。 項目ごとの検証は範囲に絞ったテスト(例
--item-test、または --scope の中のテストから導く)で行い、--baseline-test の全体テストはラウンドの終わりか最後の 1 回だけにする
- 起動する側の基準を書く。 検査の持ち場が
--baseline-test を決めるときは、範囲の中のテストに絞る。全体テストは quality-gates が 1 回回す
scope_problem と同じ場所で、実行集合が範囲に比べて極端に広いときに案内を出す
1 と 2 のどちらで直すか(または両方か)は設計で決める。
関連
由来
PR #844 の検査の持ち場(cross-refactoring rf844、2026-09-23)
リリース後テスト(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 秒) |
| #880 |
AC1 / AC4 / AC5: init --round-test と範囲の関門・案内 |
init --help に --round-test CMD。一時リポジトリ(--scope src/pkg tests/pkg)で導入先の require_scope_covers_tests と round_test_hint を呼ぶ |
2026-09-23 23:29 |
合格 / pytest tests/pkg -q は通過、pytest tests/other -q は終了コード 4 で止まり理由を 1 行出す。--round-test 無しで --baseline-test "pytest -q" なら案内 1 行(例 pytest tests/pkg)、渡せば案内なし |
| #880 |
AC8: 構造改善の注記が --round-test と --baseline-test を分けて渡すと定める |
導入先の development-workflow/references/stage-notes.md を読む |
2026-09-23 23:30 |
合格 / 手順表の 1 行目が assess、2 行目が --round-test に範囲のテスト |
| #880 |
実際の Pull Request で init から最終ゲートまで通す |
— |
— |
保留(理由: init は対象の Pull Request を引き、既定で改修計画をその Pull Request のコメントへ書くため、隔離環境では通せない。AC20〜AC23 は実装の Pull Request #917 の検査の持ち場で確かめ済み。配布物で次に cross-refactoring を回す持ち場で確かめる) |
合否: 実施した条件は合格。実際の Pull Request で init から最終ゲートまで通すことは保留(隔離環境では通せない。AC20〜AC23 は PR #917 の検査の持ち場で確認済み)
記録: 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が、変更範囲の広さに関係なく、1 項目を適用するたびに--baseline-testのテストを丸ごと回している。 範囲が狭い変更でも、1 項目あたりの待ち時間がリポジトリ全体のテスト時間で決まる。PR #844(#829 #830)の検査の持ち場で起きた。
--scopeは 6 ファイル(plugins/ndf/scripts/token-guard.shほか)だったが、--baseline-testに全体テストuv run --with pytest pytest scripts/tests plugins/ndf -q(5090 件)が渡されていた。現状固定テストのラウンド 2 回で 10 項目を採用し、1 項目あたり約 8 分かかった(コミットの時刻: 02:29, 02:38, 02:46, 02:55, 03:03, 03:18, 03:26, 03:35, 03:43)。約 90 分経っても構造改善のラウンドに入れず、利用者の指示で打ち切った。範囲の中のテスト(
plugins/ndf/scripts/tests/test_token_guard.py)だけなら数秒で終わる。どこで見つけたか
plugins/ndf/skills/cross-refactoring/SKILL.md:94:--baseline-testは「着手前と各コミットで実行するテスト」。反復中の検証と最後の検証を分けていないplugins/ndf/skills/cross-refactoring/scripts/refactor_lib/commands/converge.py:151: 検証は state のbaseline_test.commandをそのまま実行するplugins/ndf/skills/cross-refactoring/scripts/refactor_lib/scope.py:134(scope_problem):--scopeの中のテストが--baseline-testの実行集合に入るかは見るが、実行集合が範囲に比べて広すぎるかは見ないdevelopment-workflowの検査の持ち場 → supervisor)に、--baseline-testをどこまで絞るかの基準が無い。supervisor はリポジトリの全体テストをそのまま渡したなぜこの変更の範囲外なのか
#829 #830 の受け入れ条件は、待ちのポーリングと conductor の文脈を hook で止めることである。
cross-refactoringの検証の範囲は含まない。直さないと何が起きるか
範囲が狭い変更ほど、待ち時間の大半が関係のないテストに使われる。その間、supervisor と参加 CLI の待ちの費用がかかり続ける(マイルストーン 26 の主題であるトークン消費に当たる)。項目数が上限(1 ラウンド 5 件、テスト整備 2 ラウンド、構造改善 3 ラウンド)まで行くと、全体テストを数十回回すことになる。
直し方の候補
--item-test、または--scopeの中のテストから導く)で行い、--baseline-testの全体テストはラウンドの終わりか最後の 1 回だけにする--baseline-testを決めるときは、範囲の中のテストに絞る。全体テストはquality-gatesが 1 回回すscope_problemと同じ場所で、実行集合が範囲に比べて極端に広いときに案内を出す1 と 2 のどちらで直すか(または両方か)は設計で決める。
関連
由来
PR #844 の検査の持ち場(cross-refactoring rf844、2026-09-23)
リリース後テスト(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 4init --round-testと範囲の関門・案内init --helpに--round-test CMD。一時リポジトリ(--scope src/pkg tests/pkg)で導入先のrequire_scope_covers_testsとround_test_hintを呼ぶpytest tests/pkg -qは通過、pytest tests/other -qは終了コード 4 で止まり理由を 1 行出す。--round-test無しで--baseline-test "pytest -q"なら案内 1 行(例pytest tests/pkg)、渡せば案内なし--round-testと--baseline-testを分けて渡すと定めるdevelopment-workflow/references/stage-notes.mdを読む--round-testに範囲のテストinitから最終ゲートまで通すinitは対象の Pull Request を引き、既定で改修計画をその Pull Request のコメントへ書くため、隔離環境では通せない。AC20〜AC23 は実装の Pull Request #917 の検査の持ち場で確かめ済み。配布物で次に cross-refactoring を回す持ち場で確かめる)合否: 実施した条件は合格。実際の Pull Request で
initから最終ゲートまで通すことは保留(隔離環境では通せない。AC20〜AC23 は PR #917 の検査の持ち場で確認済み)記録: 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