implement-issue-tree
implement-issue-tree
親イシュー番号を指定し、配下のサブイシュー(孫含む)を依存順を保ちつつ worktree で並列に自動実装・ローカル diff レビュー・push + PR 作成・CI 監視・マージ可能状態化まで自動化する Workflow を起動する。squash merge は autoMerge: true + externalChecks 明示(全 App の信頼済み check context 宣言込み)の opt-in ランでのみクライアント側で実行する(references/automerge-design.md の「クライアント側自動マージの設計」節参照)。既定(autoMerge 未指定 / false)ではマージせず停止し、マージは GitHub 上で人間が行う。
CI リソース節約のため「push 前 review」設計を採用している。Implement フェーズではローカルブランチにコミットのみ積み、Review が全通過した後にはじめて push・PR 作成を行う。Review が収束失敗した場合は push も PR も作らないため、CI が一切起動しない。push(PR 作成時・Merge ループの fix 後の再 push)の直前には必ず base ブランチを取り込む(git fetch → git merge)。並列ラン(parallel >= 2)で兄弟イシューの PR が先にマージされていると、作成時点の base が既に古くコンフリクトしている場合があり、その状態のまま push すると GitHub は test merge commit を作れず pull_request トリガーの CI check-run が 1 件も発行されない(Issue #435)ため、push 前ゲートで解消を試みてから push する(解消不能なら push 自体を止める)。
末端の実装イシューは post-order DFS の順序を優先度として空きスロットへ貪欲投入し、最大 parallel(既定 3)件まで並列実行する。各 implement / fix は独立した git worktree で隔離実行されるため、並列でもブランチ・working copy が衝突しない。機能的依存(dependsOn)と親子関係(親は全子の完了を待つ verify-close)だけが待機条件となる。
前提条件
ghCLI がインストールされ、認証済みであること(gh auth statusで確認)jqCLI がインストールされていること(command -v jqで確認)。「全チェックが pass に見えるのにマージが進まない場合(cancel された run の残存 check)」節の人間の診断専用コマンド (B) はgh api --paginate --slurpの生 JSON を外部のjqへパイプして平坦化・集約するため、gh --jqだけでは代替できない。未導入の場合はそのコマンドを実行せず(rerun もせず)blockedとして扱うawkCLI がインストールされていること(command -v awkで確認)。同節のエージェント実行可能コマンド (A) は--jqがページ単位にしか適用できないため、ページ跨ぎの重複を集約する際にシェル側awkへ依存する。未導入の場合はそのコマンドを実行せずUNDETERMINED(判定不能)として扱う- git working tree が clean であること(
git statusで確認) - マージ先ブランチが CI green の状態であること(
autoMerge運用ではランの完了後にも確認する。後述の strict = false 前提により、古い base に対して成功したチェックのままマージされ得るため)。この確認はマージ先ブランチへの push で CI が起動することに依存する。push トリガの workflow が無い、またはpathsフィルタで該当 head では起動しないリポジトリでは前提確認・完了後確認のいずれも検証不能であり、autoMerge: trueは非推奨とする。成立可否の確認手順(対象(マージ先)ブランチを検査するプローブ。branch未指定時のみ既定ブランチへフォールバック)と不成立時の扱いは references/automerge-design.md の「補償策の成立確認(base CI プローブ)」節を参照 - (
autoMerge: trueで使う場合)ベースブランチの ruleset で required status checks の strict(マージ前の base 最新化必須 =strict_required_status_checks_policy)をfalseにしていること。trueだと 1 件マージするたびに他の open PR の base が陳腐化し、並列ラン(parallel >= 2)が収束しない。G0 は strict を要件にしないためfalseでも自動マージは成立する(references/automerge-design.md の「strict を G0 の要件にしない理由」節) - 対象リポジトリへの書き込み権限があること
- 親イシューと子イシューが GitHub の sub-issues API で紐付いていること(紐付けは
create-issue/create-issue-treeを参照)