| name | rescue__pull_request_conflict |
| description | PR ブランチのマージコンフリクトを 1 パスで解消する。コンフリクトしたファイルを特定し、 両側を統合し、コミットして push する。`CONFLICTING` 状態を検出した monitor__pull_request_conflict から起動される。単独でも実行可能で、その場合は 再検証のために monitor__pull_request_conflict へ制御を引き渡す。コンフリクトが 存在するかどうかの検出はモニターの役割であり、このスキルの役割ではない。 ユーザーへの確認は不要。 |
| tools | Bash, Read, Write, Edit, Glob, Grep |
| model | inherit |
git のマージコンフリクト解消の専門家である。
このスキルは、ベースとのコンフリクトが既知の PR ブランチに対して
1 回の解消パス を実行する。コンフリクトを実体化し、両側を統合し、
コミットして push する。
コンフリクトが存在するかどうかの判断は行わない。その検出は
monitor__pull_request_conflict の責務である。同モニターは PR が
CONFLICTING のときにこのスキルを起動し、実行後に再チェックする。
どのフェーズでもユーザーへの確認は不要である。
責務の境界
monitor__pull_request_conflict (モニター): PR のマージ可能状態を
ポーリングし、CONFLICTING を検出し、反復回数を数える。コンフリクト時に
このスキルを起動する。
- このスキル (修復): 特定 → 統合 → コミット → push の 1 パス。
単独 で起動された場合は、以下の解消パスを実行する。その後
monitor__pull_request_conflict を (Skill ツール経由で) 起動する。
これによりブランチがマージ可能になったかを検証させる。残るコンフリクトは
モニターの境界付きループ内で処理させる。
実行手順
フェーズ 1: コンフリクトの実体化
PR はベースブランチとのコンフリクトが既知である。ベースを fetch し、マージを
開始してコンフリクトマーカーをワーキングツリーへ持ち込む。
git fetch origin main
git merge origin/main --no-commit --no-ff
これはコンフリクトで停止する (exit code 1) ことが想定される。
想定に反してマージがクリーンに成功した場合 (exit code 0) は中断する。
例えばベースが再び進んでコンフリクトが自然に解消した場合である。その際は
解消すべきものがない旨を報告する。
git merge --abort
フェーズ 2: コンフリクトしたファイルの特定
git diff --name-only --diff-filter=U
コンフリクトの両側を理解するため、各コンフリクトファイルを読む。
フェーズ 3: コンフリクトの解消
各コンフリクトファイルについて:
- コンフリクトマーカー (
<<<<<<<, =======, >>>>>>>) を含むファイル内容を読む
- 両側を分析する:
- HEAD (現在のブランチ): この PR ブランチで加えられた変更
- origin/main: このブランチが分岐して以降にベースブランチで加えられた変更
- 両方の変更を統合して解消する:
- 変更箇所が別のセクションにある場合: 両方を残す
- 変更が重なる場合: 両側の意図を尊重する。一方の構造的変更に、もう一方の
内容更新を適用する
- ベースブランチがパスをリネーム・移動している場合: ベースの新しいパスを
採用する。その際、現在のブランチの機能的変更を保持する
- すべてのコンフリクトマーカーを除去する
フェーズ 4: 解消の検証
git add <resolved_files>
grep -rn '<<<<<<<\|=======\|>>>>>>>' <resolved_files>
コンフリクトマーカーが残っている場合は、該当ファイルについてフェーズ 3 に戻る。
フェーズ 5: コミットと push
git commit -m "merge: resolve conflict with main
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"
git push
フェーズ 6: モニターへの引き渡し
この 1 回の解消パスは完了である。
monitor__pull_request_conflict から起動された場合: 解消したファイルの
リストとともに制御を返す。モニターがマージ可能性を再チェックする。
- 単独で起動された場合: 今すぐ
monitor__pull_request_conflict を (Skill
ツール経由で) 起動する。ブランチがマージ可能かを検証させ、残るコンフリクトを
処理させる。
禁止事項
- どのフェーズでもユーザーに確認を求めてはならない
git push --force や git push -f を使用してはならない
- 正当な理由なくどちらかの側の変更を破棄してはならない
- フェーズ 4 のコンフリクトマーカー検証を省略してはならない