---
name: check-pr-ready
description: PR 作成前の最終チェックリスト (lint/test/docs/CHANGELOG/未コミット確認)。/precheck の拡張版で、ドキュメント整合性も検証します。
argument-hint: "[skip-tests]"
disable-model-invocation: true
allowed-tools: Bash(uv run *) Bash(cargo *) Bash(dotnet *) Bash(go *) Bash(node *) Bash(npm *) Bash(cmake *) Bash(ctest *) Bash(git *) Bash(gh *) Read Grep Glob
---

# PR 作成前 最終チェック

PR を出す前にすべての品質チェックを実行し、問題があればレポートします。
**マージ可能な状態か判定する** ことが目的です。

## 現在の状態

- ブランチ: !`git rev-parse --abbrev-ref HEAD`
- リモート差分 (dev との): !`git log --oneline dev..HEAD 2>/dev/null | head -10`
- 未コミット: !`git status --porcelain 2>/dev/null | head -20`
- 変更ファイル数: !`git diff --name-only dev..HEAD 2>/dev/null | wc -l | tr -d ' '`

## 実行手順 (順番通り、失敗したら停止して報告)

### Phase 1: ブランチと未コミット確認

1. ブランチが `dev` 以外であることを確認
2. 未コミット変更があれば、ユーザーに確認して `/commit` を促す
3. dev との差分が 1 コミット以上あることを確認 (空の PR を防ぐ)

### Phase 2: コードチェック

`$ARGUMENTS` に `skip-tests` が **含まれていない** 場合のみ、以下を実行:

1. **`/precheck` skill を実行** (lint + format + test)
   - 実装: precheck と同じロジックを直接実行 (lint + format + scope-detected tests)
2. 失敗があれば即停止し、修正案を提示

### Phase 3: ドキュメント整合性チェック

1. **CLAUDE.md 更新確認**:
   - `git diff dev..HEAD --name-only` で大きな機能追加 (50 行以上の新規ファイル) を検出
   - 検出された場合、`CLAUDE.md` が同じ PR で更新されているか確認
   - 未更新なら警告 (機能の追加箇所と CLAUDE.md のセクション提案)

2. **README 更新確認**:
   - 同様に、README.md / src/python_run/README.md / src/wasm/openjtalk-web/README.npm.md を確認
   - 機能名や API が変わっている場合は更新を促す

3. **CHANGELOG 更新確認**:
   - `CHANGELOG.md` の Unreleased セクションが更新されているか確認
   - 大きな機能追加なら未更新を警告

4. **docstring カバレッジ確認** (Python の場合):
   - `git diff dev..HEAD --name-only -- 'src/python_run/piper_plus/*.py' 'src/python/g2p/*.py'`
   - 新規 public 関数/クラスに docstring があるかチェック (簡易)

### Phase 4: PR 本文ドラフト

1. 上記すべてが OK なら、PR 本文のドラフトを生成:
    - タイトル: dev..HEAD の最初のコミット件名 (70 文字以内)
    - Summary: 各コミットの要約から 3-5 個の bullet
    - Test plan: 実行したチェックの結果 checklist
    - 形式は `gh pr create --body "$(cat <<'EOF' ... EOF\n)"` で渡せる Markdown

### Phase 5: 最終判定

1. すべて緑 → 「PR 作成準備完了」と報告し、`gh pr create` コマンドの提案を出力
2. 1 つでも警告/失敗 → 修正項目をリスト化、緑にしてから再実行を促す

## 報告フォーマット

```text
## PR Ready Check 結果

### Phase 1: ブランチ
- [x] ブランチ: feat/xxx (dev ではない)
- [x] 未コミット: 0 件
- [x] dev との差分: 5 コミット

### Phase 2: コードチェック
- [x] Python ruff check
- [x] Python ruff format
- [x] Python pytest (212 passed)
- [x] WASM npm test (481 passed)

### Phase 3: ドキュメント
- [x] CLAUDE.md 更新済み
- [x] README 更新済み
- [ ] ⚠️ CHANGELOG.md Unreleased 未更新

### Phase 4: PR 本文ドラフト
(生成された PR 本文)

### 判定: ⚠️ 1 件の警告あり (CHANGELOG)
修正してから再実行してください。
```

## 注意

- ユーザーが `skip-tests` 引数を渡した場合は Phase 2 のみスキップ (緊急修正用)
- pytest.ini の `--cov` に注意: `-o addopts=""` で上書き
- 大規模機能 (>100 行) では CLAUDE.md / CHANGELOG / docs/features の更新を必須とする
- PR 作成自体は Phase 5 の **提案だけ** で、実行はユーザーに任せる
