cleanup-merged-branches について
マージ済み PR に属するリモートブランチの整理と、放置された進行中 Issue のラベル回収を行うリポジトリ用スキルです。変更前にドライランを実行し、明示的な確認を必須とします。
主な機能
- 01削除候補ブランチの事前確認
- 02マージ状態と保護対象の判定
- 03期限切れ進行中ラベルの回収
- 04関連するオープン PR の確認
- 05マージ後も開いた Issue の検出
活用シーン
- 01削除前に候補ブランチを確認
- 02放置された Issue を待機キューに戻す
- 03マージ済みなのに開いた Issue を特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ timschoch/ skilly --skill cleanup-merged-branchesインストール後、Claude Code で/cleanup-merged-branchesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/plan.shstale-claims.shstale-claims.test.sh詳細
マージ済み PR に属するリモートブランチを削除します。破壊的な操作なので、まず ドライラン を実行し、明示的な確認なしに削除することはありません。
削除ルール
次のすべてを満たす場合にのみブランチを削除できます。条件は唯一の信頼できる情報源である scripts/plan.sh に記述されています。
- リモート上にまだ存在する
- マージ済み PR がある
- オープン中の PR がない
- 保護対象ではない
保護対象 = デフォルトブランチ + staging。マージ済み PR がこれらを指していても、絶対に削除しないでください。PR がないブランチや、クローズ済みで未マージの PR しかないブランチは削除できません(「マージ済み PR に属する」ブランチではありません)。保護対象を追加する場合は、scripts/plan.sh 内の is_protected() のみを変更してください。他の場所は変更しないでください。
手順
- ドライラン。
bash scripts/plan.shを実行します(origin以外の場合は、リモート名を$1として渡します)。削除可能なブランチが<branch> #<pr> <title>の形式で出力されます。何も削除されません。一覧が得られたら完了です。出力が空の場合は、「クリーンアップするものはありません」と報告して終了します。 - 表示して確認。 一覧全体をユーザーに見せ、明示的な許可を求めます。曖昧な返答では削除しないでください。明確な肯定があった場合にのみ削除します。この確認手順は、実行のたびに必須です。
- 削除。 確認済みのブランチごとに、
git push origin --delete <branch>を実行します。プランの一覧にないものは削除できません。 - 報告。 削除したものを一覧表示し、失敗した push があれば報告します。
こちらも実行:古い claim(リーパー)
放棄された in-progress claim(エージェントのクラッシュ/セッションの終了/PR が一度も作成されなかった場合)を解放し、古い claim が issue をいつまでも「対応中」に固定しないようにします。ラベルについては docs/agents/triage-labels.md を参照してください。/implement がこのラベルを設定し、PR がオープンすると削除されます。この処理では残ったものを回収します。
古い claim のルール。 in-progress の issue は、次のすべてを満たす場合にのみ古い claim とみなします。条件は唯一の信頼できる情報源である scripts/stale-claims.sh に記述されています。
- オープン中で、
in-progressラベルが付いている - オープン中のリンク済み PR がない(リンク済みとは、タイトル/本文で
#Nを参照するオープン中の PR、または claim コメントに記載されたブランチ名と head ブランチが一致する PR です) in-progressラベルがしきい値より古い(最新のlabeledタイムラインイベントを使用)。デフォルトは 24h で、$1/$STALE_CLAIM_HOURSで変更できます。
手順(ブランチ削除と同じ実行に含め、同じ確認手順を適用します)。
- ドライラン。
bash scripts/stale-claims.sh [hours]を実行します。古い claim が#<n> <title>の形式で出力され、変更は行われません。空の場合は、回収するものはありません。(ロジックの検証:bash scripts/stale-claims.test.sh。) - 表示して確認。 一覧を表示し、明示的な許可があった場合にのみ回収します。同じく必須の確認手順です。
- 回収。 確認済みの issue ごとに、
gh issue edit N --remove-label in-progress --add-label ready-for-agentを実行します(放棄された作業は空きキューに戻ります)。出力された一覧にないものには触れません。
こちらも実行:古いオープン中の issue
Closes #N による自動クローズは、デフォルトブランチにマージされた場合にのみ発生します。統合ブランチ(例:rebuild/v1)にマージされた PR では、#N がいつまでもオープンのままになります。ここでクリーンアップするマージ済み PR ごとに、リンクされた issue を確認してください。作業がデフォルトブランチに入っているのに issue がまだオープン中の場合は、手動でクローズします(gh issue close #N --reason completed --comment "merged via #<pr>")。同じ不具合によって「完了」した issue がオープン中として表示されるので、ここで確認してください。