複数の GitHub Issue を入力順に、Issue ごとの隔離 worktree・独立 branch / PR で連続処理し、実装、ローカルレビュー、検証、必要なブラウザ回帰、Kaizen、PR 収束、merge(GitHub の auto-merge/エージェントが PR の状況を実測してから merge、のいずれかを選択)、Issue close、deployment、branch cleanup まで追跡するスキル。初回は `issue-batch setup` で無人実行ポリシーとマージ方式を確定する。「複数 Issue をまとめて処理」「Issue を順番に最後まで」「issue-batch」や `run` / `setup` を伴う依頼で必ず使う。
Resources
1Install
npx skillscat add shoji9x9/skills/issue-batch Install via the SkillsCat registry.
Issue Batch
複数の Issue を 1 件ずつ順に処理する。各 Issue は、独立した branch と PR、隔離した worktree を持つ。そのため、1 件が失敗しても、他の作業ツリーに影響しない。
使い方
issue-batch setup
issue-batch run <Issue URL | 番号>... \
[--browser-test-env <環境名>] \
[--max-local-review-iterations <N>] \
[--max-pr-iterations <N>] \
[--wait-ci-before-review | --no-wait-ci-before-review] \
[--merge-mode <auto|agent>] \
[--merge-method <squash|merge|rebase>] \
[--max-deployment-fix-iterations <N>] \
[--stop-on-blocked]- 公開するサブコマンドは
setupとrunだけである。引数なしの呼び出し、サブコマンドを省いた Issue の指定、知らないサブコマンドでは、usage を示して、何も変更する前に停止する。 setupは、引数とrun用の option を受け付けない。runには 1 件以上の Issue が必要で、option はrunの後ろでだけ解釈する。- URL と番号を混ぜて渡せるが、すべての Issue が現在のリポジトリと同じ owner/repo でなければならない。
- 1 つの Issue に 1 つの branch と 1 つの PR を対応させる。stacked PR と、複数の Issue を 1 つの PR にまとめることは対象外である。
前提
- ツール:
gh、gitと、現在のコーディングエージェントの非対話のレビュー機能 - 前提スキル:
git-worktree、issue-start、kaizen、pr-finalize-loop。画面に影響がある場合はbrowser-test - 設定:
.config/skills/shoji9x9/skills.ymlのskills.issue-batch。レビューツールの決定は pr-finalize-loop に任せる。skills.browser-testは参照するが、書き写さない - シェル: bash。Windows では WSL や Git Bash などを使う
前提スキルを読めない場合や、設定が足りない場合は、取り決めを推測せずに停止する。run の途中で設定の質問を始めず、issue-batch setup を案内する。
モード
setup
references/project-config.md を読み、リポジトリごとの無人実行のポリシーを、対話で確定する。Issue・branch・PR・merge・deployment は操作しない。
run
実行する前に、references/project-config.md と references/orchestration.md の両方を最後まで読む。次の順で進める。
- 全体 preflight を、何かを変更する前に済ませる。確かめるのは次のものである。
- 入力の正規化と重複
- repo、Issue、PR の状態
- Issue の担当者と、再開する PR の持ち主(自分以外なら BLOCKED)
- 依存関係と、既存の branch・PR・worktree
- 設定、認証と権限、レビュー機能
- Kaizen が transcript を特定できるか、browser-test が安全か
/tmpに run manifest を作る。記録するのは、入力の順・Issue の URL・状態・branch・worktree・PR の URL・試験の結果・停止の理由だけである。秘密の値と、変わる環境の URL は書かない。- 呼び出し元の worktree を checkout せず、Issue ごとに一意な隔離した worktree を
git-worktreeの取り決めで用意して、セッションを移す。
branch を作る前に、その Issue の担当者を確かめ、自分を割り当てて読み直す(references/orchestration.md「issue-start への handoff」の 1。割り当てができなければ、branch も worktree も作らない)。
置き場所はgit-worktree setupの決定に従う。Issue ごとに worktree を移るので、リポジトリの中に置く必要がある。 - 各 Issue を入力の順に
issue-startの取り決めで実装し、次に進める。
現在のエージェントのローカルレビュー、必要な検証、browser-test、kaizen extract --current --record-pending、commit・push・PR の作成である。 - PR は
pr-finalize-loopに渡して収束させる。AI のレビューの依頼は、pr-finalize-loopにまとめる。 - head の SHA を固定し、決めた merge mode で merge する。
autoは GitHub の auto-merge に任せ、agentは PR の状況を実際に確かめてから merge する。
実際に PR がMERGED、Issue がCLOSEDで、対象の deployment がその SHA で成功し、名前が完全一致した branch を片付けたことを確かめてから、DONEにする。
状態を変える前に、毎回 GitHub と git の実際の状態を取得し直す。manifest の記憶だけで判断しない。
反復と既定動作
値は、CLI で明示した option、setup で決めた設定の順に決める。CLI で上書きしても、設定ファイルは書き換えない。
- ローカルレビューの上限: setup の値。最初の候補は 1
- PR の収束の上限: setup の値。最初の候補は 5
- CI の待機: setup の値。最初の候補は false(CI とレビューを並行して進める)
- BLOCKED の後に続けるか: setup の値。最初の候補は true。
--stop-on-blockedで、その run だけ止める側に上書きする - merge mode: setup の値。最初の候補は
auto。--merge-modeで、その run だけ上書きする - merge の準備ができるまで待つ上限: setup の値(
merge_ready_timeout_minutes)。agentmode でだけ使い、CLI での上書きは無い。agentに決まったのに設定に無ければ、推測せずに停止する - deployment の修正の上限:
--max-deployment-fix-iterationsがあれば、その run だけ上書きする
BLOCKED や FAILED の影響が Issue の隔離した worktree の中だけで済む場合は、デフォルトの方針に従って次の Issue に進む。
認証、権限、repo の不一致、共有の設定の誤りなど、全体に影響する失敗では、option に関わらず全体を停止する。
安全制約
- 課金・通知・データの作成や変更や削除・ログインの待ち・禁止した操作の解除は、無人では実行しない。必要なら、preflight で BLOCKED にする。
--admin、commit の--amend、ローカルのgit rebase、force push を使わない。deployment を直すときは、同じ feature branch に最新の base を merge する。
ここで禁じているのは git の履歴の書き換えで、--merge-method rebase(GitHub の rebase merge)とは別のものである。- merge mode に関わらず、merge の要求を送ったこと(auto-merge の有効化や、merge queue への投入を含む)を完了の根拠にしない。
成功した古い workflow run や、同じ名前の workflow の別の SHA も、根拠にしない。 agentmode でも、required check が完了して成功したことと、mergeable であることを確かめてから merge する。
完了していない check を待たずに merge しない。--adminや、branch protection を一時的に外すことで、無理に merge しない。- merge・close・deployment の条件がすべて成り立つ前に、branch を削除しない。glob ではなく、確かめた完全一致の ref だけを扱う。
- dirty か BLOCKED の worktree は削除しない。絶対パスと残りの作業を、最終報告に残す。
- 利用者の確認が要るレビューや仕様の判断を、「無人実行」を理由に飛ばさない。結果を作り上げず、BLOCKED にする。
kaizen extract --current --record-pendingが現在の transcript を特定できないエージェントでは、候補が 0 件であることを確かめられない。
transcript を提供しないエージェント(例: Copilot)はこれに当たるので、run が何かを変更する前に BLOCKED にする。検出できるふりをして続けない。
最終報告
入力の順に並べた表で、Issue・最終状態・branch・worktree・PR・local review・tests・browser・Kaizen・merge・Issue close・deployment・cleanup・停止の理由を示す。DONE は、次のすべてを確かめた場合だけ使う。PR が MERGED、Issue が CLOSED、deployment が成功したか根拠があって対象外である、local と remote の branch を削除した。