pr-workflow
Issueファイルに基づく実装からローカルコミットまでの標準フロー。push・PR作成はしない(issue-finish が行う)
SKILL.md.claude/skills/pr-workflow/SKILL.md
GitHub以下の手順でissueを実行する。$ARGUMENTSにissueファイルのパスを渡す。
前提: AI は実装してコミットし、確認者(issue-verifier)の判定を受け、user に見てもらうものがあるときだけ止まり、指摘をこのセッションで直す。挙動の正しさは確認者が確かめ、user が見るのは使い心地・起票時の合意から外れたこと・エージェントが実行できない確認(rebuild・deploy・実機)である。見るものが無いか user が OK を出したら、Issue を閉じて PR を出すまでが担当。マージは user が i か GitHub で押す。リモートへは自分のブランチを push するだけで、main には push しない。
issueファイルを読む。frontmatter の
depends:に挙がった id が worktree のissues/done/に無ければ、前提の Issue がまだマージされていないので、報告して止まる(iが先に弾くので通常は起きない)git statusで、ブランチがclaude/{id}-{branch-slug}かつワーキングツリーがクリーンなことを確認する(ブランチとworktreeはiが作成済み)。違えば報告して止まる対象ファイルを読んで実装
- Issue の「対象」と「内容」から外れる作業に気づいたら、手を付ける前に AskUserQuestion で「新しい Issue にする / この Issue の中で直す / 見送る」を聞く。黙って直さず、黙って捨てない
- 「新しい Issue にする」なら、local-issue skill の書式(テンプレート・
idの振り方)でstatus: draftの Issue を書き、本筋に戻る。置き場は worktree ではなく元リポ(main のチェックアウト)のissues/で、ステージもコミットもしない。main 側の Issue ファイルは untracked のままiに拾われる前提で、worktree に置くと手順6の対象一致を崩し、worktree の削除で消える。idは書く直前に元リポのissues/(done/を含む)を見て決める。並行で走る別の Builder と番号がぶつからないようにするため - 他の Issue ファイルの
status:は変えない。この Issue は手順11で閉じる - 画面に出る変更は、画面を先に見せる。 画面を持たない Issue はこの箇条を飛ばす。使い心地で形が変わると、先に書いたテストと台帳が無駄になるため
- 画面を動く形まで作る。テスト・台帳はまだ書かない。コミットもしない
- 開発サーバーを立て、
screen-operatorにトップの URL と、Issue の確認に書かれた画面の道順を渡して操作させる。返ってきた「見えたもの」を Issue と突き合わせ、違えば直して流し直す。画面写真を自分で見て、崩れも直す crit-live <url>で画面を開いて渡し、使い心地を見てほしいと頼んで止まる。示すのは、変わった画面と何が変わったかだけで、挙動や値の照合は頼まない。2 で確かめてある- 直しが返ったら直して 3 に戻る。見た目の直し(並べ方・文言・幅・色・余白)なら 2 を流し直さない。出す値・行・ボタンの有無に効くところまで変えたら、2 を流し直す。OK が出たら、テスト・台帳を書いて手順4へ進む
issueの「確認」項目と、リポ CLAUDE.md の「静的チェック / 検証手段」に従い提出前確認を行う。コードを読んでcaller・importの整合性も確認する。実行系・デプロイ系コマンド(rebuild / deploy / 本番起動)は実行しない
issueの保証節がリポの保証台帳
docs/guarantees.mdの記載に影響する場合(新保証・変更・廃止)、テストと同じPR内で台帳(保証の文言と対応テストの表)を更新する。台帳の更新漏れは実装未完了として扱う日本語の
.mdを書き換えたなら、共通ガイドの「日本語の文書はコミットの前に校正させる」に従ってjp-proofreaderに校正させる。そのあとgit add {変更したファイル}し、bash .claude/skills/pr-workflow/scripts/check-scope.sh {issueファイルのパス}を流して終了コード0を確かめる(ステージ済みの変更が issue の「対象」と一致するかを比べるスクリプトで、保証台帳を更新した場合はそれも対象に含まれていること)。非0なら足りないパスと余計なパスが出るので、実装に戻るコミットする(保証台帳を更新した場合は同じコミットに含める)。メッセージ本文に報告を入れる(手順11で PR 本文の下敷きにする)。一時ファイルは作らず、heredoc で標準入力から渡して1コマンドに収めること:
git commit -F - <<'EOF' {type}: {タイトル} ## 変更内容 {issueの内容フィールドを展開} ## 保証 {issueの保証節の各項目 → それを固定したテスト(ファイル・テスト名)の対応。テストを伴わない場合は Issue と同じく `なし(理由)` } ## 静的確認結果 {確認項目に対する結果。check-scope.sh の結果(終了コード0)を含める} ## 検証手順 {Agent側で完結しない確認(実行・デプロイ・目視)を、リポ CLAUDE.md の検証手順の雛形に従って記載。なければ省略} EOF確認者(
issue-verifier)に確かめさせる。渡すのは Issue ファイルのパスと worktree のパスだけで、何をどう作ったか・どこを見ればよいかは書かない。画面に出る Issue は、立てた画面のトップの URL も渡す。「否」があれば手順3に戻って直し、手順4〜7をやり直して確認者の判定を受け直す。「否」が無くなったら手順9へ進む裁可を求める項目を並べ、あれば push・PR 作成はせずに止まる。項目は次の3つで、該当が無ければ「なし」と書く
- 確認者の判定。 手順8の判定の表をそのまま示す。「判定できない」があれば、何が足りないかを添える
- 起票時の合意から外れたこと。 保証節に無い保証の追加・変更、確認の項目の読み替え、
対象に無いファイルへの波及、確認者が挙げた範囲の外。根拠を添えて採るかを聞く - 人が見るもの。 Issue の
人が見るもののうち、エージェントが実行できない確認(rebuild・deploy・実機)。手順3で使い心地の OK を受けたあとに画面を変えたなら、変えた画面と変えたこと。rebuild・deploy・本番起動は user が行う
3つとも「なし」で、確認者の判定がすべて「合」なら、止まらずに手順11へ進む。 挙動の照合は user に頼まない。確認者が確かめてある。止まるときは以下を出力する: ✅ Committed on {branch}: {type}: {タイトル} Files: {
git diff --name-only main...HEAD。差分は貼らない} Verifier: {項目1} Scope: {項目2} Verify: {項目3}差分を見たいと言われたときだけ、crit で見せる。worktree で
crit stop(--allは付けない)を実行して、前に開いたこのブランチのレビューを止めてから、crit --base-branch mainをrun_in_background: trueで起動し、URL(http://localhost:<port>)を載せて「ブラウザでレビューし、終わったら Finish Review を押してください」と添える。user が Finish Review を押すまでブロックし、先にレビューファイルを読んだり、user に何かを入力させたりしない。完了したら stdout の指示に従い、指摘は手順10で直す。指摘の無い Finish Review は差分を見終えた合図であって、PR を出す明示ではない直しを頼まれたら、Issue の範囲内なら追加コミットで直す(手順3のスコープ外の扱いは同じ)。画面の直しは手順3の「画面を先に見せる」の 4 と同じく扱う。直した範囲について手順4の確認をやり直し、手順8の確認者の判定を受け直して、手順9に戻る。直しで新しい Issue は起こさない 確認者の判定のあとに直したとき(「否」の直し、user の指摘の直し)は、新しい確認者を立てず、同じ確認者を
SendMessageで再開する。渡すのは前回の判定のあとに足したコミットの範囲(<前回の判定の HEAD>..HEAD)だけで、何を直したかは書かない。セッションが変わって再開できないとき、または直しが Issue の対象の半分以上に触れたときは、新しい確認者で最初から確かめる手順9で止まらなかったとき、または止まったあとに user が PR を出すよう明示したら、次の順で進める。止まったまま明示が無ければ進めない
- Issue ファイルを同じ階層の
done/へgit mvし、frontmatter のstatus: openをstatus: closeに変える。chore(issues): close {id}でコミットする git push -u origin {branch}- PR を出す(base は main、題は手順7の実装のコミットの題)。本文はそのコミットの本文を下敷きにし、手順10の直しを反映した最終の状態に書き直す。最後に受けた確認者の判定の表を
## 確認者の判定として載せる done/のファイルの先頭に次の記録を足し、chore(issues): record PR for {id}でコミットして push する## PR記録: {PR の題} issue: {id} ({ファイル名}) PR: {PR の URL} {PR 本文} ---- 以下を出力して終える。マージは user が
iか GitHub で押す。user に頼まれたときだけ squash でマージする ✅ PR: {PR の URL} Next: このセッションを閉じる →iでマージ(worktree は閉じたときに、ブランチはマージで畳まれる)
- Issue ファイルを同じ階層の