Skip to content

Update: cross-refactoring のコミット粒度を項目単位にし、改修計画を差分へ残す(v8.6.0) - #138

Merged
takemi-ohama merged 3 commits into
mainfrom
feature/cross-refactoring-commit-granularity-and-plan
Aug 22, 2026
Merged

Update: cross-refactoring のコミット粒度を項目単位にし、改修計画を差分へ残す(v8.6.0)#138
takemi-ohama merged 3 commits into
mainfrom
feature/cross-refactoring-commit-granularity-and-plan

Conversation

@takemi-ohama

@takemi-ohamatakemi-ohama commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

何のために

6 回目の実機試行(#136)で 3 つの過剰が出た。

事象実測
コミットが細かい1 改善項目が 2〜5 コミットに分かれた。採用 12 件に対し適用 34 コミット、取り消しと積み直しで 26 コミット
テストの実行が多い実装担当が手ごとに 44 回、進行側がコミットごとに 44 回。1 回 26 秒として約 38 分
改修計画が読めないなぜ直すのか・どう直すのかは提案の時点でしか残らない。状態ファイルは差分から除外されるため、Pull Request からは見えない

レビューの回数(ラウンドごとに 2 者 + 収束後の /ndf:cross-review)は変えていない。

何を変えたか

1 改善項目 = 1 コミット

手順を 1 手ずつ進めることと、その途中経過を履歴に残すことは別である。 残すのは
項目単位の 1 コミットだけにした。

  • 現状固定テストが要る項目(test_gap)だけは「テスト → 実装」の 2 コミットを許す。
    1 つに混ぜると、テストが先行したことを履歴から確かめられない
  • 適用と修正の両方で検証する。適用側だけ揃えても、指摘への対応という名目で刻んだ
    履歴が戻ってくる
  • 粒度は最後に見る。トレーラー・テスト・差分予算の問題を粒度の失敗で覆い隠さない
  • 途中で刻みたいときの戻し方も渡す(その項目に着手する前の HEAD を控え、最後に
    git reset --soft でまとめる)

テストの回数を項目の単位に合わせる

進行側は申告されたコミットごとにテストを実行する。実装担当にも手ごとの実行を
義務づけると、同じテストが手数の 2 倍だけ走る。

誰がいつ6 回目の実測変更後
実装担当コミットの前に 1 回4414
進行側申告されたコミットごと4414

求めるのはコミットの前に通っていることだけにした。途中で確かめるかどうかは
実装担当の判断に任せる。

改修計画を差分へ残す

--plan-file(既定 issues/refactoring-plan-rf<PR>.md)へ書き出す。空文字を渡すと
記録しない。

  • 内容は状態から決まる。状態が動いていなければ差分は出ないので、公開のたびに
    書き出しても余計なコミットは積まれない
  • 取り消した項目も残す。同じ提案が次のラウンドで来たときの判断材料になる
  • 公開は生成物の同期と同じコミットに乗せる。分けると進行側のコミットが公開の
    たびに 2 つずつ積まれる
### R1-002 — `refactor.py#cmd_merge_apply`| スメル | 手法 | 重要度 | 提案元 | 状態 | コミット || --- | --- | --- | --- | --- | ---: || long_method | split_into_pipeline | major | codex / gemini / kiro | 採用 | 1 |**なぜ**: 1 関数が取り込み済みの判定から公開まで 6 段を通しで行っている…
**手順**: 1. 範囲の確定を切り出す 2. 申告の整合性の検証を切り出す …

変えていないこと

判定の材料(git と実際のテスト実行)、取り消しの単位、差分予算の倍率、収束の条件、
レビューの回数は変わらない。既定で計画を残すようにしたため、--plan-file を指定
しない実行でも進行側のコミットが 1 つ増える。

Test plan

  • uv run --with pytest python -m pytest plugins/ndf-shared/skills/cross-refactoring/tests plugins/ndf-shared/skills/cross-review/tests -q が 532 passed(従来 500 + 追加 32)
  • 追加したテストは、コミット粒度(適用 8 件 / 修正 6 件)と改修計画(本文 8 件 / 置き場所 2 件 / 公開 4 件 / 初期化 3 件)
  • claude plugin validate . が通ること
  • python3 scripts/check-skill-frontmatter.py が通ること

🤖 Generated with Claude Code

https://claude.ai/code/session_01XpZXeYvfEGymigQeCLp1Eh

takemi-ohamaand others added 2 commits August 22, 2026 17:43
手順を 1 手ずつ進めることと、その途中経過を履歴に残すことは別である。手ごとに
テストを回して安全に進めるのは変えず、履歴に残すのは項目単位の 1 コミットだけに
する。実測では採用 12 件に対して適用が 34 コミット、取り消しと積み直しで 25
コミットあり、改善項目と履歴が 1 対 1 で辿れなかった。
現状固定テストが要る項目だけは 2 コミットを許す。1 つに混ぜると、テストが先行した
ことを履歴から確かめられない。適用と修正の両方で検証するのは、適用側だけ揃えても
指摘への対応という名目で刻んだ履歴が戻ってくるためである。
改修計画(なぜ直すのか・どう直すのか)は提案の時点でしか残らず、状態ファイルは
差分から除外されるため Pull Request からは読めなかった。--plan-file(既定
issues/refactoring-plan-rf<PR>.md)へ書き出し、公開は生成物の同期と同じコミットに
乗せる。分けると進行側のコミットが公開のたびに 2 つずつ積まれる。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XpZXeYvfEGymigQeCLp1Eh
進行側は申告されたコミットごとにテストを実行するため、実装担当にも手ごとの実行を
義務づけると、同じテストが手数の 2 倍だけ走る。6 回目の実測では 44 手に対して
88 回で、1 回 26 秒として約 38 分をテストに費やしていた。
求めるのはコミットの前に通っていることだけにする。そこは進行側が実際に実行して
確かめるので、途中で確かめるかどうかは実装担当の判断に任せる。1 改善項目 =
1 コミットになったことで、進行側の実行も項目ごとの 1 回に収まる。
レビューの回数(ラウンドごとに 2 者 + 収束後の cross-review)は変えていない。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XpZXeYvfEGymigQeCLp1Eh

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | codex | REQUEST_CHANGES

--plan-file のパス検証を追加してください。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 1 | gemini | APPROVE

1改善項目=1コミットへの方針変更と改修計画のファイル出力について、実装とテストが網羅されており安全に動作することを確認しました。

差分外のファイルですが、plugins/ndf-shared/skills/cross-refactoring/tests/test_merge_apply.py の 80行目付近にある # ---------- 1 手 1 コミット ---------- という見出しコメントが古い用語のままになっています。本 PR の変更に合わせて # ---------- 1 改善項目 = 1 コミット ---------- へ更新することをご検討ください。

--plan-file は利用者が渡す値で、進行側はそれを利用者のリポジトリへ書き出す。
絶対パスや親へ抜ける経路をそのまま受け取ると、作業ディレクトリの外へ計画書を
書けてしまう。受け取った時点で拒み(終了コード 4)、状態ファイルから読むときも
同じ基準を通す。
あわせて `./issues/plan.md` のような表記を正規化する。git が返すパスと形が違うと
`plan_rel in produced` が一致せず、公開のコミットメッセージが取り違えられる。
現状固定テストの見出しも新しい規約の語へ揃えた。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XpZXeYvfEGymigQeCLp1Eh

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | codex | APPROVE

修正必須の指摘はありません。

@takemi-ohamatakemi-ohama left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 cross-review | round 2 | gemini | APPROVE

ディレクトリトラバーサル対策とパス正規化の実装、および「1 改善項目 = 1 コミット」の規約統一について、コードとテストの両面から仕様への適合を確認しました。指摘事項はありません。

@takemi-ohama
takemi-ohama merged commit 67ff36b into mainAug 22, 2026
7 checks passed
@takemi-ohama
takemi-ohama deleted the feature/cross-refactoring-commit-granularity-and-plan branch August 22, 2026 19:29
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@takemi-ohama