---
name: pr-green
description: >
  Pull Request をグリーンにするスキル。CI チェックの失敗解消と、PR に紐づく Issue の
  修正・クローズを一括で実行する。GitHub Actions の CI ログ分析、ローカル CI
  （`./scripts/ci-check.sh`）の実行、エラーの根本原因特定と修正、PR コメントや
  リンクされた Issue の解消を含む。解消した Issue は確認後にクローズする。
  ループモード（`/loop 5 /pr-green`）にも対応し、自律的に CI 監視・修正・プッシュを繰り返す。
  トリガー：「PR をグリーンにして」「CI を通して」「CI エラーを直して」
  「PR の issue を解消して」「PR を修正して」「CI が落ちている」「テストが失敗している」
  「PR のレビュー指摘を直して」「PR を mergeable にして」
  といった PR 修正・CI 解消関連リクエストで起動。PR 番号が指定されなくても、
  現在のブランチから自動検出して対応する。
---

# PR Green スキル

PR の CI チェック失敗と紐づく Issue を解消し、PR をマージ可能な状態にする。

## 動作モード

| モード | 起動方法 | 振る舞い |
|--------|---------|---------|
| **対話モード** | `/pr-green` or 「CI を直して」 | 状況報告→ユーザー確認→修正→確認→プッシュ |
| **ループモード** | `/loop 5 /pr-green` | 自律的に監視・修正・コミット・プッシュ。問題なければ即終了 |

`/loop` 経由で呼ばれた場合はループモードとして動作する。判断がつかない場合は対話モードとする。

### モード別の振る舞いの違い

| 判断ポイント | 対話モード | ループモード |
|-------------|----------|------------|
| 状況サマリー | 詳細に表示し確認を取る | 問題がある場合のみ簡潔に表示 |
| 修正前の確認 | ユーザーに方針確認 | 確認なしで修正を開始 |
| コミット・プッシュ | ユーザー確認後 | 自動 |
| Issue クローズ | 一覧提示→承認後クローズ | 自動クローズ（コメント付き） |
| 問題なしの場合 | 「すべてグリーンです」と報告 | 何も出力せず即終了 |
| 結果報告 | 詳細な修正レポート | 修正した場合のみ簡潔に報告 |
| 判断困難な問題 | ユーザーに相談 | スキップして報告 |

## ワークフロー

### ステップ 0: PR の特定

引数で PR 番号が指定されていればそれを使う。指定がなければ現在のブランチから自動検出する。

```bash
gh pr view --json number,title,state,statusCheckRollup,url,headRefName
```

PR が見つからない場合は報告して終了する。

### ステップ 1: 状況の把握

#### 1a. CI チェックの状態確認

```bash
gh pr checks <number>

# 失敗した CI の詳細ログ（run-id は checks 結果から特定）
gh run view <run-id> --log-failed
```

#### 1b. PR に紐づく Issue の確認

**PR レビューコメント（CodeRabbit 等のボットレビュー含む）：**
```bash
gh api repos/{owner}/{repo}/pulls/<number>/reviews --jq '.[] | select(.state != "APPROVED") | {user: .user.login, state: .state, body: .body}'
gh api repos/{owner}/{repo}/pulls/<number>/comments --jq '.[] | {user: .user.login, body: .body, path: .path, line: .line, created_at: .created_at}'
```

**PR にリンクされた Issue：**
```bash
gh pr view <number> --json closingIssuesReferences --jq '.closingIssuesReferences[] | {number, title}'
```

#### 1c. 早期終了判定（ループモード）

以下の条件をすべて満たす場合は何もせず即終了する：

- CI チェックがすべて成功（PASS）または実行中（PENDING）
- 未対応のレビューコメントがない
- リンクされた Issue がすべてクローズ済み

CI が実行中（PENDING）の場合も即終了 — 次のループ周回で結果を確認する。

#### 1d. 状況サマリー（対話モードのみ）

対話モードでは状況サマリーを表示し、対応方針の確認を取る。

### ステップ 2: CI エラーの解消

CI エラーを分類し、優先度順に対応する。

| 優先度 | エラー種別 | 再現コマンド |
|--------|----------|------------|
| 1 | コンパイルエラー | エラーメッセージから直接特定 |
| 2 | lint / fmt | `./scripts/ci-check.sh ai lint`, `./scripts/ci-check.sh ai dylint` |
| 3 | テスト失敗 | `./scripts/ci-check.sh ai unit-test`, `./scripts/ci-check.sh ai integration-test` |
| 4 | clippy | `./scripts/ci-check.sh ai clippy` |
| 5 | doc テスト | `./scripts/ci-check.sh ai doc` |

各エラーに対して：再現→分析→修正→同じコマンドで検証。

### ステップ 3: PR の Issue 解消

#### 3a. レビューコメントへの対応

指摘箇所のコードを読み、指摘に沿って修正する。

#### 3b. リンクされた Issue への対応

Issue 本文から対象コード・問題・期待動作を抽出し、修正・検証する。

#### 3c. 解消済み Issue のクローズ

```bash
gh issue close <number> --comment "$(cat <<'EOF'
## 解決確認

- PR: #<pr-number>
- 修正内容: <具体的な修正の説明>
- 確認方法: <テスト結果やコード確認の根拠>

本 PR の修正により解消されたためクローズします。
EOF
)"
```

対話モードではクローズ前にユーザー承認を取る。ループモードでは自動クローズする。

### ステップ 4: コミット・ローカル検証・プッシュ

修正した箇所に関連するチェックのみローカルで再実行する。
フルチェックはローカルでは実行しない — CI に任せる。

対話モードではコミット・プッシュ前にユーザー確認を取る。ループモードでは自動で行う。

プッシュ後の CI 結果は、次のループ周回（ループモード）または `gh pr checks --watch`（対話モード）で確認する。

### ステップ 5: 結果報告

**対話モード**: 修正内容・Issue 対応・残存事項の詳細レポート。

**ループモード**: 修正があった場合のみ簡潔に1行報告。修正なし（早期終了）の場合は出力なし。

## 完了条件

- CIエラーがないこと
- PRについたコメント/issueが解決できていること
- ボーイスカウトルールを適用すること