| name | github-pr-fix |
| description | PRの全問題(コンフリクト、CI失敗、レビューコメント)を自動検出してgit worktree内で修正するSkill。ユーザーが「PRの問題を全部直して」「PRをまとめて修正して」のように依頼したら使うこと。個別のコンフリクト解消のみはgit-fix-conflict、CI修正のみはgithub-fix-ciを使う。 |
| allowed-tools | Skill, Bash(git:*), Bash(gh:*), Bash(cat:*), Bash(ls:*), Bash(bat:*), Bash(eza:*), Bash(grep:*), Bash(head:*), Bash(tail:*), Bash(jq:*), Bash(bash:*), Bash(mkdir:*), Bash(rm:*), Bash(test:*), Bash(basename:*) |
GitHub PR Fix
GitHub操作は必ずgh CLIで行うこと。GitHub connector/pluginやMCPのGitHubツールは使用しない。
このSkillは、指定されたPRの全問題(コンフリクト、CI失敗、レビューコメント)を自動検出して修正するためのものです。
修正作業はPRごとに専用のGit worktree内で行われ、元の作業ツリーはPR情報の取得とworktreeの作成以外では使用しません。
修正内容はPRの言語に合わせて生成され、ユーザーへの報告も同じ言語で行われます。
このSkillは3つのサブSkillを正しい順序でオーケストレーションし、PRの全問題を修正する。
git-fix-conflict: コンフリクトの解消
github-fix-ci: CI失敗の修正
github-resolve-pr-comment: レビューコメントへの対応
重要: 修正作業は必ず専用 worktree 内で行う。Skillを起動した元の作業ツリーでは、PR情報の取得と worktree 作成以外のファイル編集・commit・push を行わない。
引数
PR number: 修正するPR番号(任意、デフォルトは現在のブランチのPR)
--dry-run: 問題の検出結果一覧(3節の結果)のみを提示し、worktree作成とサブSkill呼び出しを行わず終了する
0. 事前チェック
- 対象PRの特定:
- 引数でPR番号が指定されている場合はそのPRを使用する
- 引数が指定されていなければ、現在のブランチに紐づくPRを使用する
- PRが存在しない場合はエラーメッセージを表示して中止
owner/repo を取得: gh repo view --json owner,name --jq '"\(.owner.login)/\(.name)"'
- PRの
baseRefName / headRefName / headRepositoryOwner / isCrossRepository を取得する
- cross repository PR の場合は、現在の認証ユーザーが head repository へ push できるかを確認する。push できない場合は、修正内容を作れてもPRへ直接反映できないため中止して理由を報告する
- PRの初期ステータスサマリーを表示
1. PR言語の検出
- PRのタイトルと本文を分析して言語を検出する(例: 日本語、英語)
- 重要: すべての報告とサマリーは検出された言語で記述すること
- 各サブSkillも同じ言語を独立して検出する
- 言語が曖昧な場合は英語をデフォルトとする
- 最終サマリー用テンプレートは検出された言語に応じてここで決定する:
2. 修正用 worktree の作成
--dry-run が指定された場合は、本節をスキップし、3節の検出のみを元の作業ツリーで実行して結果を提示した後に終了する。
-
<repo-root>/.tmp/<repo-name>-worktrees/pr-<number>-fix を専用 worktree path とする。
-
同じ path の worktree が存在し、未commit変更がある場合は中止する。clean な場合のみ作り直してよい。
-
PR head と base branch を fetch する:
git fetch origin +pull/<number>/head:refs/pr-fix/<number>/head
git fetch origin +<base-ref-name>:refs/pr-fix/<number>/base
-
専用 worktree は、headRefName ではなく fetch済みの refs/pr-fix/<number>/head から専用local branchを作って checkout する:
git worktree add -B pr-fix/<number> <worktree-path> refs/pr-fix/<number>/head
headRefName はPR head branch名としてpush先の判定に使う。checkout対象にはしない。fork PR や同名branchの衝突で別branchを修正しないよう、worktreeの HEAD が refs/pr-fix/<number>/head の commit SHA と一致することを確認する。
-
Phase 3 以降は、すべての操作を <worktree-path> 配下で実行する。
3. 問題の検出
3種類の問題を並列に検出し、検出結果に応じて Phase 4 で必要なSkillだけ呼び出す。
検出は <worktree-path> を cwd とし、PR番号を明示して実行する(--dry-run の場合は元の作業ツリーを cwd とする)。
- 1. コンフリクト:
mergeable が CONFLICTING の場合のみ対応する。MERGEABLE / UNKNOWN はスキップする。
- 2. CI失敗:
FAILURE / CANCELLED / TIMED_OUT の check がある場合のみ対応する。全て実行中の場合はステータスを報告し、セクション4のStep 2はスキップする。
- 3. 未対応レビューコメント: inline review thread の unresolved 数が 1 件以上の場合のみ対応する。unresolved 数は
scripts/fetch_review_threads.sh の --only-unresolved で取得し、review 全体の state だけでは判定しない。
4. 検出した問題への対応
検出された問題に対して、以下の順序でサブSkillを呼び出す。前のステップが失敗しても後続のステップは試みる。
各サブSkillは必ず <worktree-path> を cwd として実行する。サブSkillへの引き継ぎには次の制約を明示する:
- PR番号:
<number>
- 作業ディレクトリ:
<worktree-path>
- 修正対象 branch:
<head-ref-name>
- base branch:
<base-ref-name>
- worktree 外のファイルを編集しない
- commit / push は
<worktree-path> 内の PR head branch から行う
- push時は必ず
git push origin HEAD:<head-ref-name> の形式でPR head branchへ明示的に反映すること(worktreeのlocal branch名はpr-fix/<number>でありPR head branch名と異なるため)
Step 1: コンフリクトの解消
3.1でCONFLICTING の場合のみ:
git-fix-conflict Skill を <worktree-path> 内で実行
- 完了を待ってから、再度
gh pr view --json mergeable --jq '.mergeable' でコンフリクトが解消されたことを確認する
- 検出された言語でステータスを報告する
Step 2: CI失敗の修正
3.2で失敗チェックがある場合のみ:
github-fix-ci Skill を <worktree-path> 内で実行
- 完了を待つ。プッシュ後にCIが再実行されることに注意する
- 検出された言語でステータスを報告する
Step 3: レビューコメントへの対応
3.3で未解決スレッドがある場合のみ:
github-resolve-pr-comment Skill を <worktree-path> 内で実行(同Skillはレビューコメントへのリプライを常に投稿する)
- 完了後、再度
scripts/fetch_review_threads.sh の --only-unresolved で unresolved 数の差分を取って報告する
- 検出された言語でステータスを報告する
5. 最終確認
-
<worktree-path> 内で最終状態を確認する:
git status --short
git log --oneline --max-count=5
gh pr view <number> --json url,mergeable,mergeStateStatus
gh pr checks <number>
-
commit 済みだが未pushの変更が残っている場合は、<worktree-path> 内から PR head branch へ push する
-
未commit変更が残っている場合は、対象サブSkillの失敗として扱い、内容を検出された言語で報告する
-
worktree は原則として削除しない。ユーザーが後で状態を確認できるように、最終サマリーへパスを含める
6. 最終サマリー
検出された問題に応じて、1で決定したテンプレートを使用して表示する。
注意事項
- 大きな変更の前にはユーザーに確認を求める
- 修正・commit・push は必ず専用 worktree 内で実行する。元の作業ツリーはPR情報取得と worktree 作成だけに使う
- レビューコメントへの対応時は、
github-resolve-pr-comment に常にリプライを投稿させる(Phase 4 Step 3)
- レビューコメントの未解決判定は
scripts/fetch_review_threads.sh の --only-unresolved を使う。review 全体の state ベースの判定は unresolved thread を取りこぼすので使わない