resolve-pr-conflict
指定されたGitHub PRがターゲットブランチとコンフリクトしていないかを確認し、コンフリクトしている場合はrebaseで解消してforce-pushします。PRをマージ可能な状態に整えたいときに使用してください。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
指定されたGitHub PRがターゲットブランチとコンフリクトしていないかを確認し、コンフリクトしている場合はrebaseで解消してforce-pushします。PRをマージ可能な状態に整えたいときに使用してください。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Re-analyze an existing GitHub Issue using its current title and body as input, refresh the implementation plan against the latest code state, and update the Issue in place. Use this when the user provides an Issue number (numeric, `#`-prefixed, or Issue URL) and wants to regenerate the code analysis via the explore-agent subagent. For reflecting comment-driven updates instead, use update-issue. For creating a brand-new Issue from a natural-language task description, use create-issue.
Create an implementation plan and a GitHub Issue based on the task description provided as an argument. Use this when the user supplies a natural-language task description (not an issue number) and wants a new implementation-ready Issue. If the input is an existing issue number, use create-issue-from-issue-number (re-analyze) or update-issue (reflect comments) instead.
GitHub Issueの確認事項に対して、コードベースやドキュメントを徹底的に調査し、根拠に基づいた回答を提供するスキル。Issueの最後のコメントに含まれる確認事項を調査・回答し、コメントに追記する。
ライブラリの情報を確認するためのスキル。Next.js、shadcn、その他のライブラリについて、適切なMCPサーバーを使用して最新のドキュメントと使用方法を取得します。
Create or update the Pencil (`.pen`) design for a UI implementation Issue before any code is written, then open a design-only PR. Takes the Issue number as argument, extracts the design requirements from the Issue description and comments, delegates `.pen` edits to the pencil-design-updater agent, exports snapshot PNGs, pushes them on the fixed `cc-ui-design-<Issue number>` branch, and opens a PR that references the Issue with `Refs #<N>` (never a closing keyword).
Execute tasks based on GitHub Issue content
| name | resolve-pr-conflict |
| description | 指定されたGitHub PRがターゲットブランチとコンフリクトしていないかを確認し、コンフリクトしている場合はrebaseで解消してforce-pushします。PRをマージ可能な状態に整えたいときに使用してください。 |
| argument-hint | [pr-number] |
| hooks | {"Stop":[{"matcher":"","hooks":[{"type":"command","command":"node \"${CLAUDE_PLUGIN_ROOT}/scripts/stop-servers.mjs\""}]}]} |
指定されたPR番号のPRがターゲットブランチ(baseRefName)とコンフリクトしていないかを確認し、コンフリクトがあればrebaseで解消したうえで--force-with-leaseでpushするスキルです。レビュー指摘の対応・修正プランの評価・ラベル付与・マージ判定といった他の責務には立ち入らない。
やること:
gh pr checkoutによるPRブランチへの切り替え--force-with-leaseでのpush絶対にやらないこと:
git commit単体での新規commitは作らない)git push --force(--force-with-lease以外のforce-push)本スキル固有のリスク: 本スキルは claude-task-worker の resolve-conflict ワーカー(cc-resolve-conflict ラベル)から自動起動され、ワーカーはスキルプロセスの同期完了を根拠に cc-resolve-conflict の除去を進める。処理が未完のままターンを終えると、rebase未完了のまま triage-pr ワーカーが再度PRを拾ってコンフリクトを再検知する無限ループや、リモート未反映のまま次工程に進む状態壊れが起きる。
$ARGUMENTSがPR番号を表す。空・非数値・複数値の場合は、その旨を出力して即中断する。
このスキルは単独でも triage-pr 等からの委譲でも起動される。いずれのケースでも、呼び出し元が用意した作業コンテキストを尊重するため、現在地を変更しない・新規worktreeを作らないことを徹底する。
pwd
判定:
.claude/worktrees/ 配下にいる場合: そのworktree内で全ての作業(gh pr checkout / git rebase / git push)を完結させる。cdでworktreeの外やリポジトリのルートに移動しない。新規worktreeも作らない.claude/worktrees/ 配下にいない場合(リポジトリのルート・通常のクローン等): その場で作業する。.claude/worktrees/ 配下への移動や新規worktree作成はしない加えて、デフォルトブランチで直接rebase / force-pushを行う事故を避けるため、gh pr checkout の 直後(ステップ1)で現在ブランチがデフォルトブランチと一致しないことを確認する(一致した場合は中断する)。
まずPRが存在し、コンフリクト解消の対象として妥当な状態かを確認する。
gh pr view $ARGUMENTS --json number,state,baseRefName,headRefName
stateがOPEN以外(MERGED / CLOSED)の場合や、PR自体が存在しない場合は、その旨を出力して中断する(CLOSED/MERGED済みPRへのforce-pushは無意味で誤操作リスクの方が大きいため)。
存在を確認できたら、現在地でそのままPRブランチをチェックアウトする(新規worktreeは作らない)。
git fetch -p
gh pr checkout $ARGUMENTS
gh pr checkoutが失敗した場合(作業ツリーが汚れている、ローカルに同名のブランチがある等)は、原因をそのまま出力して中断する。git stashやgit reset --hardを独断で行ってユーザーの未コミット変更を失わせないこと。
チェックアウト成功後、fail-safeとしてブランチがデフォルトブランチでないことを確認する。
DEFAULT_BRANCH=$(gh repo view --json defaultBranchRef -q .defaultBranchRef.name)
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
CURRENT_BRANCHがDEFAULT_BRANCHと一致する場合は中断する(想定外の状態でrebase/force-pushがデフォルトブランチに走るのを防ぐため)。gh repo viewが失敗してデフォルトブランチ名が取得できない場合も、判定不能として中断する。
PRのターゲットブランチをbaseRefNameから動的に取得する。デフォルトブランチではなく、PRが実際にマージされる先のブランチを基準にすること(Epic PRなど、デフォルトブランチ以外をターゲットにするケースに対応するため)。
コンフリクト有無の一次判定には、呼び出し元のtriage-prと同じGitHubのmergeableフィールドを使う。判定基準を呼び出し元と揃えないと、「triage-prはコンフリクトありと判定したのに本スキルはなしと判定して何もせず終了する」という食い違いが起き、cc-resolve-conflictラベルの付与と除去が繰り返される無限ループになる。
TARGET_BRANCH=$(gh pr view $ARGUMENTS --json baseRefName -q .baseRefName)
MERGEABLE=$(gh pr view $ARGUMENTS --json mergeable -q .mergeable)
判定基準:
CONFLICTING: コンフリクトありと判定し、ステップ3に進む
MERGEABLE: コンフリクトなしと判定する
UNKNOWN: GitHub側で判定中のため、数秒スリープして1回だけ再取得する。それでもUNKNOWNの場合は、ローカルで実マージ相当の判定にフォールバックする
git merge-tree --write-tree "origin/$TARGET_BRANCH" HEAD
終了コードが1なら「コンフリクトあり」、0なら「コンフリクトなし」。--write-treeモードは実際のマージと同じmerge-ortエンジンで判定するため、コンテンツ競合だけでなくrename・modify/delete・バイナリ・ファイルモード変更のコンフリクトも検知できる(Git 2.38以上が必要。コマンド自体が失敗して判定できない場合は「コンフリクトあり」側に倒してステップ3に進む)
禁止: 旧形式のgit merge-tree <base-tree> <branch1> <branch2>(trivial mergeモード)の出力にコンフリクトマーカー(<<<<<<<等)が含まれるかで判定してはならない。旧形式はrename検知を行わず、modify/delete・バイナリ・モード変更などのコンフリクトではマーカーを出力しないため、GitHubがCONFLICTINGと判定しているPRを「コンフリクトなし」と誤判定し、triage-prとの間で無限ループを引き起こす。
「コンフリクトなし」を呼び出し元に返却して終了する。git rebaseもpushも行わない(不要なrebase/force-pushはCIを無駄に再走させ、他者がそのブランチを見ているときの混乱の元になるため)。
ステップ3に進む。
ターゲットブランチに対してrebaseを実行する。
git rebase "origin/$TARGET_BRANCH"
rebaseがコンフリクトなしで完走した場合も、そのままステップ4のpushに進む(GitHubのCONFLICTING判定はマージ試行に基づくため、rebase自体はクリーンに完走することがある。ここでpushせず終了するとリモートが変わらず、triage-prが再度コンフリクトを検知してループする)。
rebase中にコンフリクトが発生した場合は、git statusでコンフリクト中のファイルを特定する。
.penファイル(Pencilデザインファイル)のコンフリクトは例外: .penは暗号化バイナリのため、コンフリクトマーカーの手編集によるテキストマージは絶対に行わない(ファイルが破損する)。resolve-pencil-conflictスキルをSkillツールで起動し、「片側採用 → もう一方をPencilで再適用」のフローで解消する(rebase中は ours = ターゲットブランチ側 / theirs = PR側と意味が反転する点に注意)。Pencil CLIが利用できない等でこのフローを実行できない場合は、無理に解消せずgit rebase --abortで中断する。
.pen以外のファイルは、それぞれを 両者の変更意図を尊重する形 で解消する。片方の変更を機械的に捨てると、PR側のレビュー意図かターゲットブランチ側の最新仕様のどちらかを取りこぼすため、必要に応じて以下を行ってから解消する。
Readで該当ファイル全体を読み、コンフリクトしている関数/ブロックの責務を理解するgit log -pでターゲットブランチ側・PR側それぞれの該当変更commitを確認し、変更意図を読み取るRead / Grepで参照し、整合性のとれた解消にする判断できない場合(情報が足りない、両方が同じ箇所を大きく書き換えている、人間の仕様判断が必要、など)は無理に解消せず、git rebase --abortで取り消したうえで中断理由を呼び出し元に返却する(生半可な解消はレビュー差し戻しや本番バグ混入につながるため)。
解消後:
git add <解消したファイル>
git rebase --continue
複数commitにまたがって連続してコンフリクトする場合は、各commitで同じ手順を最後まで繰り返す。
rebase完了後、リモートに反映する。
git push origin HEAD --force-with-lease
--force-with-leaseを使うのは、自分の認識していないリモートの新規commitを上書きしない(他人のpushを巻き戻さない)ため。pushが失敗した場合は、エラー内容をそのまま呼び出し元に返却して中断する。自動再試行はしない(再試行が必要なケースはリモートに新規pushが来ているなど人間判断が必要な状況のため)。
呼び出し元には以下を構造化して返却する。
no-conflict / resolved-and-pushed / aborted のいずれかno-conflict: ターゲットブランチ名と判定根拠(mergeableの値、またはフォールバック時はgit merge-tree --write-treeの結果)resolved-and-pushed: 解消したファイル一覧と各ファイルの解消方針の要点aborted: 中断理由(PRがOPENでない / checkout失敗 / コンフリクト解消困難 / push失敗 など)と、その時点のgitの状態(git statusの要約)Edit / Write以外でコードを変更しない。コンフリクトと無関係な「ついで修正」を入れると、後続のレビューと履歴が複雑になるgh pr checkout 後にHEADがデフォルトブランチと一致する場合は中断するcc-triage-scope等を含む)は一切操作しない。ラベル管理は上位スキルの責務git push --forceは使わず、必ず--force-with-leaseを使う