PR・merge・archive
Pipelineの出力を人間へ引き渡し、確認・merge・archiveを順序どおりに完了させるためのガイドです。
このページの内容
完了の境界を3段階で捉える
pr-create成功後の状態はawaiting-archiveです。PRを人間が確認してmergeを判断し、archive後にarchivedとなって初めてjobが閉じます。
最終verification、ADR判断、PR作成までを実行。
PR作成済み。人間の差分・checks・merge判断を待つ。
archive記録、merge、状態更新、cleanupまで完了。
受け入れ基準と構造を承認
最後のcode変更が未検証なら再実行
standardのみ。opt-inで判断
CLIがPRを作成
実装・build-fixer・code-fixerの最終変更が直近のverificationより新しい場合、PR作成へ進む前にverificationへ戻ります。Standardはその後にADRを判断し、FastはADRを省いて直接PRを作成します。
状態名。 現行のJobStatusにawaiting-mergeやcompletedはありません。運用表示でもawaiting-archiveを使用します。
ADRはrequestで候補化し、agentが必要性を判断する
adrはrequest.mdのMetaに必須です。ただしtrueは「必ずADRを書く」ではなく、「ADRに値するかを判断する」指定です。
- **adr**: true| 指定 | 実行 | 結果 |
|---|---|---|
adr: false | agent sessionを起動せずskip | そのままpr-createへ進む |
adr: true + judge no | 材料を読み、不要と判断 | ADRを作らず成功扱い |
adr: true + judge yes | 設計判断と代替案を記録 | specrunner/adr/YYYY-MM-DD-<slug>.md |
ADRの有無は実装完了の合否ではありません。長期的に残すべき設計判断があるか、という別の軸です。
PR作成は決定的なCLI step
pr-createはagentへGitHub操作を任せず、GitHub REST APIを使います。titleとbodyもrequest.mdとjob stateから組み立て、commit messageには依存しません。
| 同じbranchのPR | pr-createの結果 |
|---|---|
| 存在しない | 新規作成 |
| OPEN | 既存PRを再利用。重複作成しない |
| MERGED | error。追加変更は新しいbranchが必要 |
| CLOSED | error。reopenまたは新しいbranchを判断 |
run --jsonではawaiting-archiveをresult: "pr-created"として返し、prUrlを機械的に取得できます。
人間がmerge前に確認する
SpecRunnerのgate通過は、merge判断の代替ではありません。PR上でrequest・実装差分・検証根拠を照合します。
目的、スコープ、受け入れ基準を満たし、意図しない変更がないか。
権限境界、migration、公開API、依存更新など、影響の大きい箇所を直接確認。
verification-result.mdとchecksが、現在のPR headに対応しているか。
修正済みfinding、decision-needed、Custom reviewerの結果を確認。
長期判断の記録、gate順、iteration、costが妥当か。
PR commentのattestationとrepository内の証跡の対応は監査と証跡で確認できます。
承認の境界。 確認後にjob archive --with-mergeを実行する行為が、人間によるmerge承認です。Issue起点の無人mergeは推奨しません。
archiveを記録してからmergeする
推奨経路は--with-mergeです。archiveのfolder移動とstateをfeature branchへ先にcommitし、そのcommitがPR headへ反映された後でchecksとmerge可否を評価します。
# archive前にidentityとslugの一意性を固定
npx specrunner job ls --all --json
npx specrunner job show <job-id>
npx specrunner job archive --with-merge my-feature
# cleanup後はslugで表示し、出力されたJob IDを固定値と照合
npx specrunner job show my-feature一覧で同じslugの非終端jobが意図した1件だけで、そのJob IDが固定値と一致する場合だけarchiveします。
change folderを移動しfeature branchへpush
protected paths、PR head、checks、conflictを確認
GitHub APIでbase branchへmerge
integrity検証、archived化、worktree・branch削除
activeなchange folderを残したままPRをmergeすると、そのfolder移動を同じPRへ載せられません。まず--with-mergeを実行し、archive commitをPRへ含めます。
高リスクpathは自動mergeを止める
{
"version": 1,
"archive": {
"protectedPaths": [
".github/workflows/**",
"infra/production/**"
],
"postMergeVerify": [
"npm ci",
"npm test"
]
}
}protectedPathsに一致するとarchive commitを記録した時点で停止します。PRを人間が確認して手動でsquash mergeし、同じ--with-mergeを再実行するとpost-merge cleanupへ進めます。file listがAPI上限でtruncateされた場合もfail-closedで停止します。
postMergeVerifyはmerge SHAの一時worktreeで順番に実行します。command失敗は「merge済み」のescalationとなり、自動rollbackしません。base branchを修正してからarchiveを再実行します。fetchやworktree作成自体に失敗した場合はwarningで続行するため、「未検証」の表示を見落とさないでください。
既定timeoutと全設定キーはConfigurationを参照してください。
停止条件と次の操作
| 検出 | 状態 | 次の操作 |
|---|---|---|
| PR番号がない | archive開始不可 | pr-create完了状況をjob showで確認 |
| protected path / file list不完全 | merge前に停止 | PRを人間が確認し、必要ならmanual merge |
| checks pending / timeout | merge前に停止 | 完了後に同じarchive commandを再実行 |
| checks failed | merge前に停止 | 失敗を修正し、PR head更新後に再実行 |
| conflict | merge前に停止 | base branchへrebaseし、--force-with-leaseでpush |
| checks成功 + BLOCKED | merge前に停止 | required reviewなどbranch protectionを満たす |
| postMergeVerify失敗 | merge済み・cleanup前 | base branchを修正。rollbackは自動実行されない |
同じcommandを再実行して収束させる
PR作成とarchiveは再実行を前提にしています。停止時にstate、worktree、feature branchを先に削除せず、原因を解消して同じslugを使います。
git worktree listとbranchを確認し、残骸だけ手動整理# archive前にidentityとslugの一意性を固定
npx specrunner job ls --all --json
npx specrunner job show <job-id>
npx specrunner job archive --with-merge my-feature
# cleanup後はslugで表示し、出力されたJob IDを固定値と照合
npx specrunner job show my-feature同じslugの非終端jobが意図した1件だけで、一覧のJob IDが固定値と一致することを再実行前にも確認します。
具体的なerror別の復旧commandはトラブル対応を参照してください。
参照ソース 9件
src/core/pipeline/reverification.ts最終code変更の再検証src/core/step/adr-gen.tsADR opt-insrc/core/step/pr-create.tsPR作成stepsrc/core/pr-create/body-template.tsPR title・bodysrc/core/pr-create/runner.tsPR作成のidempotencysrc/core/archive/merge-then-archive.tsmerge・archive順序src/core/archive/protected-paths.tsprotected path guardsrc/core/archive/post-merge-integrity.tsmerge後の整合性検証src/core/archive/post-merge-cleanup.tsworktree・branch cleanup