# Copilot Review Fix Push Loop

> 現在ブランチのPRでCopilotレビューを起動し、到着待ち・指摘取得・修正・コミット・push・必要なら再実行までを行うワークフロー。

- Skill: `satoru314/copilot-review-fix-push-loop` (Agent Skill)
- Install (CLI): `npx skillmds@latest add satoru314/copilot-review-fix-push-loop`
- Raw SKILL.md: https://api.skillmd.com/api/skills/satoru314/copilot-review-fix-push-loop/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Satoru314 (https://skillmd.com/u/satoru314)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/satoru314/copilot-review-fix-push-loop

---


現在ブランチのPRに対して Copilot レビューを起動し、レビュー到着を待ち、指摘を反映し、コミットして push する。必要なら同じ流れを繰り返す。

## 前提条件

- Codex CLI から実行できること。
- Codex 起動時に `codex --sandbox danger-full-access` を指定して、サンドボックスを解除しておくこと。
- または、このスキル実行に必要なフルアクセス権限が付与されていること。
- `gh` コマンドがインストールされていること。
- `gh auth login` などで GitHub にログイン済みであること。

## 実行ポリシー（Codex環境）

- `gh` は `pr` サブコマンドを基本とする。Copilotのインライン指摘取得時のみ `gh api graphql`（読み取り専用）を使ってよい。
- このスキルは **サンドボックス解除時のみ** 実行する。`sandbox_permissions=require_escalated` や `prefix_rule` を使った昇格実行は行わない。
- サンドボックス有効のセッションでは `このスキルはサンドボックス解除時のみ実行可能です` と報告して停止する。
- 既存のステージ状態は尊重する。`git restore --staged` や `git reset` でインデックスを巻き戻さない。
- コミットと `git push` はこのスキル内で行う。
- 対象外ファイルは編集しない。既存変更が混在している場合も、不要な巻き戻しは行わない。

## 手順

1. 現在ブランチに紐づくPRを特定する。
```bash
gh pr list -R <owner/repo> --head "$(git branch --show-current)" --state open --json number,url --jq '.[0]'
```
- PRが取れない場合は `このブランチに紐づくPRがありません` と報告して停止する。

2. Copilotレビューのベース時刻を取得する。
```bash
gh pr view -R <owner/repo> <PR番号> --json reviews --jq '
  [.reviews[]
   | select(.author.login=="copilot-pull-request-reviewer")
   | .submittedAt]
  | max // ""'
```

3. Copilotレビューを起動する。
```bash
gh pr edit -R <owner/repo> <PR番号> --add-reviewer "copilot-pull-request-reviewer"
```
- 既に過去レビューがあっても再実行してよい。

4. 新着Copilotレビューを待機する。
```bash
gh pr view -R <owner/repo> <PR番号> --json reviews --jq '
  [.reviews[]
   | select(.author.login=="copilot-pull-request-reviewer")
   | .submittedAt]
  | max // ""'
```
- `submittedAt > BASE_SUBMITTED_AT` の新着レビューが出るまで30秒間隔で待機する。
- 最大20分待っても来なければ `copilotレビューがタイムアウトしました: <PR URL>` と報告して停止する。

5. Copilotレビュー本文とインライン指摘を取得する。
```bash
gh pr view -R <owner/repo> <PR番号> --json reviews --jq '
  [.reviews[]
   | select(.author.login=="copilot-pull-request-reviewer")
   | {submittedAt, body}]
  | sort_by(.submittedAt)
  | last'
```
```bash
gh api graphql -f query='
query($owner:String!, $name:String!, $number:Int!){
  repository(owner:$owner,name:$name){
    pullRequest(number:$number){
      reviewThreads(first:50){
        nodes{
          isResolved
          comments(first:20){
            nodes{
              author{login}
              body
              path
              outdated
              createdAt
            }
          }
        }
      }
    }
  }
}' -f owner="<owner>" -f name="<repo>" -F number=<PR番号>
```
- `author.login=="copilot-pull-request-reviewer"` のコメントだけを対象にする。
- `createdAt >= BASE_SUBMITTED_AT` のコメントを今回実行ぶんとして優先する。
- `[must]` / `[ask]` / `[nits]` を優先度として扱い、まず `must` を潰す。

6. 指摘を修正し、必要な検証を行う。
- 影響範囲に応じて `npm run typecheck`、`npm run test` などを実行する。
- コマンド失敗時は代替手段を試し、代替不能なら失敗理由を報告して停止する。

7. 修正内容をコミットして `git push` する。

8. 追加レビューが必要なら 2 に戻る。

## 結果報告

- 取得したCopilotレビュー要点
- 実施した修正概要
- 変更したファイル一覧
- 実行した検証
- 未対応項目（あれば）

## 注意

- レビュー本文の適用は盲従しない。破壊的変更や仕様変更は除外する。
- 同一ブランチで複数回実行する場合、既存レビューと新着レビューを `submittedAt` と `createdAt` で区別する。
- 既にステージ済みの変更があっても、その状態は保持する。

