用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/s977043/PlanGate --skill pr-watch命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | pr-watch |
| description | PR 作成後の監視と自動対応(CI エラー・レビューコメント・コンフリクトの 3 点セット)。Use when: 「PR を監視して」「レビュー対応を進めて」「PR 作成後」 |
PR 作成後、マージまたは close されるまで監視し、CI エラー・レビューコメント・ コンフリクトの 3 点セットに対応する再利用単位の定型。
| 観点 | 検知方法 | 対応 |
|---|---|---|
| CI エラー | gh pr checks <PR番号> に fail | §3 CI FAIL 対応 |
| レビューコメント | gh api repos/<owner>/<repo>/pulls/<PR番号>/comments の ID 差分(inline review comments。gh pr view --json comments は issue コメントのみでボット指摘を取りこぼす) | §3 レビューコメント対応 |
| コンフリクト | gh pr view <PR番号> --json mergeable が CONFLICTING | §3 CONFLICTING 対応 |
3 点いずれも未検知かつ state が MERGED / CLOSED になった時点で監視終了。
<PR番号> は実行時に対象 PR 番号へ置換する。60 秒間隔でポーリングし、
コメントは seen_file に既知 ID を保存して差分検知する。
#!/usr/bin/env bash
set -euo pipefail
PR_NUMBER="<PR番号>"
SEEN_FILE="/tmp/pr-watch-${PR_NUMBER}-seen-comments.txt"
touch "${SEEN_FILE}"
CURRENT_FILE="/tmp/pr-watch-${PR_NUMBER}-current.txt"
while true; do
# 一時的な gh 失敗(ネットワーク・レート制限)でクラッシュさせない
state=$(gh pr view "${PR_NUMBER}" --json state --jq .state 2>/dev/null || echo "")
if [ "${state}" = "MERGED" ] || [ "${state}" = "CLOSED" ]; then
echo "PR #${PR_NUMBER} is ${state}. Stop watching."
exit 0
fi
if [ -z "${state}" ]; then
sleep 60
continue
fi
# (1) コンフリクト検知
mergeable=$(gh pr view "${PR_NUMBER}" --json mergeable --jq .mergeable 2>/dev/null || echo "")
if [ "${mergeable}" = "CONFLICTING" ]; then
echo "CONFLICTING detected on PR #${PR_NUMBER}"
fi
# (2) CI FAIL検知
if gh pr checks "${PR_NUMBER}" 2>/dev/null | grep -qi "fail"; then
echo "CI FAIL detected on PR #${PR_NUMBER}"
fi
# (3) 新規レビューコメント検知(inline review comments = ボット指摘を含む)
# 取得成功時のみ SEEN_FILE を更新する(失敗時に空で上書きすると
# 次回成功時に既読コメントを全件「新規」と誤検知するため)
if gh api --paginate "repos/<owner>/<repo>/pulls/${PR_NUMBER}/comments" \
--jq '.[].id' > "${CURRENT_FILE}" 2>/dev/null; then
new_ids=$(comm -13 <(sort "${SEEN_FILE}") <(sort "${CURRENT_FILE}"))
if [ -n "${new_ids}" ]; then
echo "New review comments: ${new_ids}"
fi
cp "${CURRENT_FILE}" "${SEEN_FILE}"
fi
sleep 60
done
検知後は Monitor を止めずに §3 の対応定型へ分岐する(対応完了後にループへ戻る)。
gh run view <run-id> --log-failed でログを確認するgh pr checks <PR番号> --watch で再確認するreview-feedback-loop.md
§5 の登録済み suppression 表と突合する。パターンが一致すれば、
同表の機械反証を引用して理由付きで不採用とするgh api repos/<owner>/<repo>/pulls/<PR番号>/comments/<comment-id>/replies -f body="<対応内容>" でスレッド返信するreview-feedback-loop.md §2 の L4 学習閉ループへ還元する原因を特定する(git log --oneline origin/main..<branch> と
git log --oneline <branch>..origin/main で分岐点を確認)
スタック PR の前段 squash マージが原因の場合は、固有コミットのみを 載せ替える:
git rebase --onto origin/main <旧base> <branch>
push 前に三点照合(responsibility-classes.md
「Bash 連結コマンド時の error guard」節が正本): git branch -vv で
ローカル名・upstream・HEAD の SHA を確認してから対象を同定する
git push --force-with-lease で push する
push 直後の mergeable は再計算中で stale な場合がある。数十秒後に
再確認する(gh pr view <PR番号> --json mergeable)
コメント返信・push 等の mutation を伴う gh 操作は、gh auth switch +
viewer 検証 + mutation を同一 Bash 呼び出しで実行する。gh auth switch
自体は設定ファイルを書き換える永続操作だが、他プロセスも switch を行う
環境では切替が競合(レースコンディション)し、mutation 実行の瞬間に別
アカウントへ戻っている実測が繰り返しあるため、switch と mutation の間に
別呼び出しを挟まず、直前検証つきで atomic に行う。
gh auth switch --user <expected-user> \
&& [ "$(gh api user --jq .login)" = "<expected-user>" ] \
&& gh api repos/<owner>/<repo>/pulls/<PR番号>/comments/<comment-id>/replies -f body="<本文>"
execution-runbook.md
§2(7) の収束ルールと同一基準)docs/workflows/ai-loop/review-feedback-loop.md — suppression 表・L4 学習閉ループの正本docs/workflows/ai-loop/execution-runbook.md §2(7) — コンフリクト対応手順の正本.claude/rules/responsibility-classes.md — Bash 連結コマンド error guard・三点照合