Skip to content

cross-refactoring: 変更範囲が狭くても 1 項目ごとに --baseline-test の全体テストを回し、1 項目あたりの待ちが全体テストの時間になる #880

Description

@takemi-ohama

何を見つけたか

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 ラウンド)まで行くと、全体テストを数十回回すことになる。

直し方の候補

  1. 反復中と最後で検証を分ける。 項目ごとの検証は範囲に絞ったテスト(例 --item-test、または --scope の中のテストから導く)で行い、--baseline-test の全体テストはラウンドの終わりか最後の 1 回だけにする
  2. 起動する側の基準を書く。 検査の持ち場が --baseline-test を決めるときは、範囲の中のテストに絞る。全体テストは quality-gates が 1 回回す
  3. 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

  • 要求と受け入れ条件 — 2026-09-23 09:45
  • 作業場所の用意 — 2026-09-23 09:48
  • 設計 — 2026-09-23 09:53
  • 素材の収集と出典の確定
  • ドキュメント再構成 — 2026-09-23 09:58
  • ドキュメントレビュー — 2026-09-23 09:59
  • 計画 — 2026-09-23 12:55
  • 実装 — 2026-09-23 12:57
  • 構造改善 — 2026-09-23 14:26
  • 実装レビュー — 2026-09-23 15:41
  • 完了判定 — 2026-09-23 16:16
  • Pull Request — 2026-09-23 13:13
  • 確定仕様化 — 2026-09-23 21:22
  • 後片付け — 2026-09-23 21:32
  • 配布 — 2026-09-23 21:32
  • 体裁レビュー
  • リリース後テスト — 2026-09-23 23:28
  • 振り返り

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions