skills/release-epic/SKILL.md
親エピック Issue 配下の子 Issue が全て close されていることを確認した上で、 feature/epic-* → main のリリース PR を作成し、子 Issue タイトルから自動生成したリリースノートを PR 本文に記載する。 full プリセット専用。 「/release-epic」「エピックをリリースして」「feature ブランチを main にマージするPR作って」と言った時に使用。
npx skillsauth add hirokimry/vibecorp release-epicInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
[!IMPORTANT] このスキルは 親エピック配下の子 Issue が全 close 済みである場合のみ
feature/epic-*→mainのリリース PR を作成する。gh pr merge --autoは呼ばない(承認フロー非介入思想)。マージは Branch Protection + CodeRabbit approve に委ねる。 コード変更は一切行わない — PR 作成と親 Issue 更新のみ。タグ打ち・バージョニング・デプロイは扱わない。 結果のみを簡潔に返す(途中経過は不要)。介入ポイントでは CEO の指示を待つ(自動でスキップしない)。
CEO が /vibecorp:release-epic <親エピック Issue 番号> を実行すると、エピック配下の子 Issue が全て完了していることを GitHub API で検証してから、feature/epic-* → main のリリース PR を作成する。子 Issue タイトルを束ねたリリースノートを PR 本文に自動生成し、親エピック Issue にリリース PR の予告リンクを貼る。
PR タイトル・PR 本文・親 Issue へのコメントは CEO が読むため .claude/rules/communication.md に従って動作主語で書く(「〜になった/〜できるようになった」)。関数名・ファイルパスを並べるのではなく、ソフトウェアのふるまいの変化を 30 秒で掴める形にする。
/vibecorp:release-epic <親エピック Issue 番号>
<親エピック Issue 番号> が省略された場合は CEO にヒアリングする(複数エピック並走時の曖昧性を避けるため必須)。
gh) が認証済みであること/vibecorp:plan-epic で起票されている前提)feature/epic-<親番号>_* ブランチが origin に push されていることvibecorp.yml の preset を確認する。full 以外の場合は以下を出力して終了する。
/vibecorp:release-epic は full プリセット専用です。現在のプリセット: <preset>
awk '/^preset:/ { print $2 }' "$CLAUDE_PROJECT_DIR/.claude/vibecorp.yml"
引数が空の場合は CEO にヒアリングする。複数エピックの並走時に親 Issue を曖昧にしないよう、番号は必須引数とする。
gh issue view <親番号> --json number,title,body,state,labels
state == "closed" の場合は中断する(既にリリース済みの可能性、CEO に確認する)タイトルに 🎯 epic: プレフィックス、または epic ラベルが付与されていることを確認する。どちらも無い場合は「指定 Issue はエピックではありません」と中断する。
GitHub 公式の sub-issue API で子 Issue 一覧を取得する。
gh api \
-H "Accept: application/vnd.github+json" \
--paginate \
"/repos/<owner>/<repo>/issues/<親番号>/sub_issues"
<owner>/<repo> は gh repo view --json owner,name --jq '.owner.login + "/" + .name' で取得する--paginate を必ず付けて全件取得する(既定 30 件超のエピック対応)公式仕様: https://docs.github.com/en/rest/issues/sub-issues
子 Issue が 0 件の場合は中断する(リリース対象なし)。
子 Issue 一覧から state == "open" のものを抽出する。1 件でも残っていれば中断する。
⚠️ 未 close の子 Issue が <n> 件あります:
- #<番号> <タイトル>
- #<番号> <タイトル>
完了してから再実行してください。
全て closed の場合のみ次に進む。
feature/epic-<親番号>_* ブランチが origin に push されていることを確認する。Issue #346 で確立した命名規約に準拠する。
git ls-remote --heads origin "feature/epic-<親番号>*"
| 検出件数 | 挙動 |
|---|---|
| 0 件 | 中断(「ブランチが未作成」と CEO に報告) |
| 2 件以上 | 中断(「複数候補があります」と CEO に列挙報告) |
| 1 件 | そのブランチ名を 完全一致の文字列(例: feature/epic-349_release_epic)として保持し、後段の重複確認・PR 作成で同じ値を再利用する |
gh pr list --head および gh pr create --head はワイルドカードをサポートしないため(公式ドキュメント)、ステップ 7 で確定した完全一致のブランチ名を変数として保持しておくことが必須となる。
子 Issue タイトルを束ねた PR 本文を生成する。子 Issue の絵文字プレフィックス(✨ / 🐛 / 🔄 / 📖 / 🔒 / 🚀 等)はそのまま流用する。
## 🚀 エピックリリース
エピック #<親番号> <親タイトル> がリリース可能になった。
## 📦 含まれる変更(子 Issue ベース)
- ✨ #<子1番号> <子1タイトル>
- 🐛 #<子2番号> <子2タイトル>
- 🔄 #<子3番号> <子3タイトル>
## ✅ 完了確認
- 子 Issue が全て close されていることを確認した
- feature ブランチへのマージは GitHub の auto-merge で完結している
## 🔗 関連
- 親エピック Issue: #<親番号>
Closes #<親番号>
PR 本文末尾に Closes #<親番号> を必ず記載する(GitHub auto-close キーワード)。リリース PR が main にマージされると、親エピック Issue が自動 close される。#N 形式必須(URL 形式は close-on-feature-merge.yml の抽出対象外)。詳細は .claude/rules/workflow.md の「PR 本文の Issue リンク(auto-close キーワード)」を参照する。
PR タイトルは 🚀 release: epic #<親番号> <親タイトル> の形式とする。
同一 head(feature ブランチ)→ base(main)の open PR が既に存在しないか確認する。ステップ 7 で確定した完全一致のブランチ名(例: feature/epic-349_release_epic)を --head に渡す(ワイルドカードは利用不可)。
gh pr list --base main --head "<ステップ7で確定した完全一致のブランチ名>" --state open --json number,title,url
ステップ 7 で確定した完全一致のブランチ名を --head にそのまま渡す。
gh pr create \
--base main \
--head "<ステップ7で確定した完全一致のブランチ名>" \
--title "🚀 release: epic #<親番号> <親タイトル>" \
--body "<生成したリリースノート>"
gh pr merge --auto は 呼ばない(承認フロー非介入思想)親エピック Issue 本文の末尾に「リリース PR を作成しました: #<PR番号>」を追記する。
gh issue edit <親番号> --body "<更新後の本文>"
または既存本文末尾に追記する形でコメントを残す。
gh issue comment <親番号> --body "🚀 リリース PR を作成しました: #<PR番号>"
本文編集とコメント追記のどちらかを選択する。本文に「## 🚀 リリース PR」セクションを追加するのが既定動作とする(後から見たときに親 Issue 単体でリリース状況が分かるため)。
## /vibecorp:release-epic 完了
### 🚀 リリース PR
- <PR URL>: <PR タイトル>
### 📦 リリース対象
- 親エピック: #<親番号> <親タイトル>
- 子 Issue: <n> 件(全て close 済み)
- feature ブランチ: feature/epic-<親番号>_<要約>
- base ブランチ: main
### ✅ 次のアクション
- マージは GitHub の auto-merge(Branch Protection + CodeRabbit approve)で完結する
- 本スキルは PR 作成のみで auto-merge は設定していない(承認フロー非介入)
以下の状況では CEO に報告して判断を委ねる。
| 状況 | タイミング | |------|-----------| | full プリセットでない | ステップ 1 | | 引数が空 | ステップ 2 | | 親 Issue が存在しない / closed | ステップ 3 | | 親 Issue がエピックでない(ラベル / プレフィックスなし) | ステップ 4 | | sub-issue が 0 件 | ステップ 5 | | 未 close 子 Issue がある | ステップ 6 | | feature ブランチが未作成 / 複数候補 | ステップ 7 | | 同一 head / base の既存 PR がある | ステップ 9 | | gh CLI が認証されていない | 全ステップ共通 |
gh pr merge --auto は呼ばない(承認フロー非介入思想)--force、--hard、--no-verify は使用しない\(...) を使わない — Bash 上で \ がエスケープ文字、() がサブシェルとして解釈され、意図しない展開やパースエラーを引き起こすため。必ず + で結合する2>/dev/null、|| echo、; echo 等のリダイレクトやフォールバックを付加しないcd ... && cmd | head 2>/dev/null のように cd + パイプ + リダイレクトを含む compound command は Claude Code 本体の built-in security check(path resolution bypass 検出)で止められるため.claude/knowledge/cpo/decisions/2026-Q2.md 2026-04-18 「Issue 親子関係・大規模リリース支援」/plan-epic スキル新設) / #346 (/ship base 判定) / #347 (GHA 自動 close).claude/rules/workflow.md.claude/rules/communication.md.claude/rules/autonomous-restrictions.md.claude/rules/prompt-writing.md.claude/rules/markdown.mddata-ai
skills/**/SKILL.md 内に embed された 5 行以上のエージェント呼出プロンプトテンプレ・長文ブロックを .claude/rules/notification-prompt-extraction.md 基準で skills/<skill>/prompts/<name>.md に切り出す migration skill。「/prompts-extract-all」「プロンプト切り出し」「プロンプト extract」「SKILL.md プロンプト migration」と言った時に使用。検出は awk でフェンスコードブロックを抽出して行数カウント、要否判定は LLM が閾値・用途軸・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
documentation
.github/workflows/**/*.{yml,yaml} の --body 通知文と hooks/**/*.sh の長文 echo/printf/heredoc を .claude/rules/notification-prompt-extraction.md 基準で個別 .md ファイルに切り出す migration skill。「/notifications-extract-all」「通知文切り出し」「通知文 extract」「workflow 通知 migration」と言った時に使用。検出は grep で機械絞り込み、要否判定は LLM が閾値・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
development
`**/*.sh` / `**/*.js` / `**/*.ts` / `**/*.py` / `**/*.rb` / `**/*.go` / 設定ファイル等のコード内コメントを一括棚卸しし、 `.claude/rules/code-comments.md` と機械的に照合する。 diff 提案 → CEO 承認 → 書換の 2 段階で自動マージを禁じる。 生成コード・`node_modules`・`vendor`・`dist`・`build` 等は除外する。 「/vibecorp:comments-rewrite-all」「コメント全書き直し」「コード内コメント棚卸し」 と言った時に使用。
development
skills/**/SKILL.md・agents/*.md・.claude/rules/*.md を .claude/rules/prompt-writing.md 基準で一括書き直し提案するスキル。「/prompts-rewrite-all」「プロンプト書き直し」「スキル一括書き直し」「エージェント書き直し」と言った時に使用。claude-code-guide サブエージェントで Claude Code 公式仕様(docs.claude.com)を確認し、prompt-writing.md の指針 MUST / 禁止パターンと照合する。diff 提案 → CEO 承認 → 書き換えの 2 段階で挙動を壊さず適用する。自動マージ禁止。