Skip to content

cross-refactoring を飛ばしてよい条件が、どの Skill にも書かれていない #494

Description

@takemi-ohama

何を見つけたか

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 に入れる対象があるかで見る
記録に「飛ばした」を持たせる 通っていない状態と、飛ばすと判断した状態を分ける。工程の値は増やさない(盤面の単一選択に影響する)

どちらも「飛ばす」を既定にしない。 通す費用より、通さない判断が見えないことのほうが高い。

由来

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

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

    area: ndf-skillNDF の Skill 本体enhancementNew feature or requestpriority: medium保守性・設計一貫性など、計画的に対応する

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions