dispatch
open issue から自走できるものを選び、対応するセッションを起こす。定期の発火から呼ばれる。
SKILL.md.claude/skills/dispatch/SKILL.md
GitHubissue の拾い方
選んで起こすところまで。 1 issue の進め方は起こしたセッションが持つ。
迷ったら落とす。 拾い損ねても次の回で拾える。間違って拾うと、要らない PR が1本残る。
1. 数える
未マージの PR がラベルを問わず5本以上あれば、この回は1本も拾わない。 レビューとマージは書き手が持つので、PR が溜まると詰まる。
2. 落とす
open issue を上から順に落とす。
| 落とす | なぜ |
|---|---|
needs-decision ラベル |
書き手の判断待ち。本文は読まない |
sh scripts/issue-shape.sh が落とす |
issue テンプレートの型に合わない。完了条件が外から判定できることが自走の前提 |
claude/issue-<番号>- の remote branch があるか、Closes #<番号> の open PR がある |
既に走っている |
| 完了条件が外から判定できない | 「使いやすくなっている」は条件ではない |
| 完了条件が判断を含む | 「〜が決まっている」は、決めるのが書き手の仕事で、直す作業ではない |
docs/ の要求・デザイン要件・技術選定を覆す |
決めるのは書き手 |
型は手で見ない。 取得した JSON をそのまま .verify/issues.json(無ければディレクトリから作る)に落として通す。判定は .github/ISSUE_TEMPLATE/ の型で、ここに書き写さない。
sh scripts/issue-shape.sh < .verify/issues.json
判断で落としたら needs-decision を付ける。 完了条件が外から判定できない・判断を含む・docs/ を覆す、の3つで落ちたときだけ。他の行で落ちたものには付けない。
assignee は見ない。 このリポジトリでは「着手中」の意味で使われていない。
取り残しは拾い直す。 branch はあるが open PR が無く、最終コミットが6時間より古いなら落とさない。報告に1行書く。接尾辞が変わるので衝突しない。
3. 並べる
bug を先、enhancement を後。同じなら作成が古い順。放置され続ける issue を作らない。
4. 起こす
先頭から最大2本。1 issue につき兄弟セッションを1つ(create_session)。
サブエージェント(Agent ツール)にしない。 呼び出し元のセッションに紐づくため、それが終わると道連れで止まる。
引数はスクリプトが出す。出力の JSON をそのまま create_session に渡す。
sh scripts/session-args.sh issue <番号>
出力を書き換えない。 model は渡さず呼び出し元のモデルを継ぐので足さない。source_url を省くと起きたセッションから GitHub に投稿できず、ブランチ名を変えると次の回の重複判定(claude/issue-<番号>-)が外れる。
実装の方針を渡さない。 issue の読み方は起こしたセッションが持つ。
起こしたら待たない。 完了を待機・ポーリングしない。
5. 報告
最後の応答に書く。書くのは、起こした issue の番号とタイトル/前回から変わった PR(出た・緑になった・赤いまま見る者がいない)/取り残しを拾い直したこと/PR が5本以上で拾わなかったこと。
どれも無ければ書かない。 発火のたびの「なし」を残さない。