mcpField
C
cleanup-merged-branches

cleanup-merged-branches

github.com/timschoch開発1730 回インストール1 日前に更新
リポジトリ

cleanup-merged-branches について

マージ済み PR に属するリモートブランチの整理と、放置された進行中 Issue のラベル回収を行うリポジトリ用スキルです。変更前にドライランを実行し、明示的な確認を必須とします。

主な機能

  1. 01削除候補ブランチの事前確認
  2. 02マージ状態と保護対象の判定
  3. 03期限切れ進行中ラベルの回収
  4. 04関連するオープン PR の確認
  5. 05マージ後も開いた Issue の検出

活用シーン

  1. 01削除前に候補ブランチを確認
  2. 02放置された Issue を待機キューに戻す
  3. 03マージ済みなのに開いた Issue を特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/timschoch/skilly --skill cleanup-merged-branches

インストール後、Claude Code で/cleanup-merged-branchesを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
plan.sh
stale-claims.sh
stale-claims.test.sh

詳細

マージ済み PR に属するリモートブランチを削除します。破壊的な操作なので、まず ドライラン を実行し、明示的な確認なしに削除することはありません。

削除ルール

次のすべてを満たす場合にのみブランチを削除できます。条件は唯一の信頼できる情報源である scripts/plan.sh に記述されています。

  • リモート上にまだ存在する
  • マージ済み PR がある
  • オープン中の PR がない
  • 保護対象ではない

保護対象 = デフォルトブランチ + staging。マージ済み PR がこれらを指していても、絶対に削除しないでください。PR がないブランチや、クローズ済みで未マージの PR しかないブランチは削除できません(「マージ済み PR に属する」ブランチではありません)。保護対象を追加する場合は、scripts/plan.sh 内の is_protected() のみを変更してください。他の場所は変更しないでください。

手順

  1. ドライラン。 bash scripts/plan.sh を実行します(origin 以外の場合は、リモート名を $1 として渡します)。削除可能なブランチが <branch> #<pr> <title> の形式で出力されます。何も削除されません。一覧が得られたら完了です。出力が空の場合は、「クリーンアップするものはありません」と報告して終了します。
  2. 表示して確認。 一覧全体をユーザーに見せ、明示的な許可を求めます。曖昧な返答では削除しないでください。明確な肯定があった場合にのみ削除します。この確認手順は、実行のたびに必須です。
  3. 削除。 確認済みのブランチごとに、git push origin --delete <branch> を実行します。プランの一覧にないものは削除できません。
  4. 報告。 削除したものを一覧表示し、失敗した 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 で変更できます。

手順(ブランチ削除と同じ実行に含め、同じ確認手順を適用します)。

  1. ドライラン。 bash scripts/stale-claims.sh [hours] を実行します。古い claim が #<n> <title> の形式で出力され、変更は行われません。空の場合は、回収するものはありません。(ロジックの検証:bash scripts/stale-claims.test.sh。)
  2. 表示して確認。 一覧を表示し、明示的な許可があった場合にのみ回収します。同じく必須の確認手順です。
  3. 回収。 確認済みの 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 がオープン中として表示されるので、ここで確認してください。

コメント