بنقرة واحدة
i-pr
workflow 共通の PR 作成スキル。worktree 解決、未コミット確認、push、uv run kaji pr create のみを担当する。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
workflow 共通の PR 作成スキル。worktree 解決、未コミット確認、push、uv run kaji pr create のみを担当する。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
dev workflow 向けの最終チェック。PR 前に品質ゲート、docs 整合、設計書昇格、Issue 更新をまとめて確認する。
docs-only workflow 向けの最終チェック。docs 整合と Issue 状態を確認し、PR に進めるか判定する。
docs review の指摘に対応し、ドキュメントのみを修正する。コードやテストは変更しない。
docs-only の変更をレビューし、事実整合性・実装整合性・運用整合性の観点から判定する。
docs-only の更新を行う。コードやテストは変更せず、現行実装・CLI・運用方針との整合を確認しながら docs を修正する。
docs review の指摘が適切に修正されたかを確認する。新規指摘は行わない。
| description | workflow 共通の PR 作成スキル。worktree 解決、未コミット確認、push、uv run kaji pr create のみを担当する。 |
| name | i-pr |
workflow 共通の PR 作成スキル。 workflow 固有の完了判定は持たず、PR 作成そのものに責務を限定する。
| タイミング | このスキルを使用 |
|---|---|
i-dev-final-check 完了後 | ✅ 必須 |
i-doc-final-check 完了後 | ✅ 必須 |
provider.type='github' 配下 | ✅ 受理(gh CLI 経由) |
provider.type='local' 配下 | ❌ Step 0 で ABORT。代替は /issue-close(local merge) |
make check)の実行 → i-dev-final-check / i-doc-final-check の責務i-dev-final-check の責務i-dev-final-check / i-doc-final-check の責務issue-close の責務常に注入される変数:
| 変数 | 型 | 説明 |
|---|---|---|
issue_id | str | 正規化済み Issue ID(GitHub 数値または local ID) |
issue_ref | str | 人間可読の Issue 参照(GitHub では #<issue_id>、local では bare ID) |
step_id | str | 現在のステップ ID |
provider_type | str | github / local のいずれか。Step 0 のガード判定に使用 |
git_remote | str | git remote 名(provider.<type>.git_remote config から解決。未指定時のフォールバックは kaji 側の既定値)。Step 4 の git push -u 引数に使用 |
$ARGUMENTS = <issue_id>
コンテキスト変数 issue_id が存在すればそちらを使用。
なければ $ARGUMENTS の第1引数を issue_id として使用。
issue_ref はハーネス経由ではプロンプトに自動注入される(provider 別に整形済み)。手動実行時は issue_id から導出する: GitHub 数値 ID なら #<issue_id>、local-* 形式なら bare ID(# を付けない)。
pr_id / pr_ref / pr_url は本 Skill の Step 4 で uv run kaji pr create の出力から確定する。プロンプトへの自動注入は現時点では行わない。
docs/dev/git-workflow.md(Conventional Commits 運用、--no-ff merge 規約)/issue-start が実行済みであることgit absorb がインストール済みであること(任意)本 Skill は forge provider 専用。最初に provider_type を解決し、
github 以外なら 以降のステップに進まず ABORT verdict を出力して終了 する。
手順:
provider_type の解決(ハーネス注入 → 手動 fallback の優先順):
PROVIDER_TYPE="${provider_type:-$(uv run kaji config provider-type 2>/dev/null || true)}"
|| true は手動実行で [provider] 不在時に uv run kaji config provider-type が
exit 2 を返しても shell 全体を落とさないため。空文字に縮退する。
判定と verdict 出力:
PROVIDER_TYPE が github → Step 1 に進む
PROVIDER_TYPE が local → 以下の ABORT verdict を そのまま stdout に
出力して以降のステップは実行しない:
---VERDICT---
status: ABORT
reason: |
i-pr is forge-only and cannot run under provider.type='local'.
evidence: |
Pull request concept does not exist in local mode (bare provider).
suggestion: |
Use /issue-close for local merge instead.
---END_VERDICT---
PROVIDER_TYPE がそれ以外(空文字 / 不明値)→ 以下の ABORT verdict を
出力して終了:
---VERDICT---
status: ABORT
reason: |
i-pr could not resolve provider_type.
evidence: |
provider_type was not injected and `uv run kaji config provider-type` failed
(likely missing `[provider]` section in .kaji/config.toml).
suggestion: |
Add `[provider]` to .kaji/config.toml.
---END_VERDICT---
重要: ABORT verdict は shell の
exitに任せず agent 自身が stdout に 出力すること。workflow runner はその verdict を読み取ってon: ABORT: endで workflow を終わらせる。補足: workflow 経由で起動された場合は、
uv run kaji runのrequires_provider検証で先に止まるはずだが、user がprovider=local配下で/i-prを直接呼ぶケースに備えて Skill 層でも止める(3 層ガードの冗長性)。
_shared/worktree-resolve.md の手順に従い、 Worktree の絶対パスを取得すること。以降のステップではこのパスを使用する。
また、Issue 本文から > **Branch**: \[prefix]/[issue_id]`` を抽出して prefix を取得する。
cd [worktree_dir] && git status
未コミットの変更がある場合は先にコミットしてください。
workflow 固有の docs 同梱判定は i-dev-final-check / i-doc-final-check 側の責務とする。
cd [worktree_dir] && git absorb --and-rebase
fixup対象がない場合は何も起きません(正常)。
git absorb がインストールされていない場合はスキップ。
cd [worktree_dir] && git push -u [git_remote] HEAD
# stderr は捨てず stdout と分離して取得する(失敗を握りつぶさないため)。
# ``2>&1 | tail -1`` 形式は pipeline exit status が tail 側で 0 になるため使わない。
pr_output=$(cd [worktree_dir] && uv run kaji pr create --base main --title "[prefix]: タイトル ([issue_ref])" --body "$(cat <<'EOF'
## Summary
(Issueの概要を1-2文で)
Closes [issue_ref]
## Changes
- (主な変更点)
## Documentation
- (ドキュメントの更新内容。設計書昇格 / 既存 docs 更新 / なし)
## Test Plan
- [x] 既存テストがパス
- [ ] 新規テストを追加(該当する場合)
- [ ] 手動検証: (必要な場合)
EOF
)")
pr_create_rc=$?
# 成功時のみ最終行を取り出す(失敗時の stdout を URL として誤認しないため)。
pr_url=""
if [ "$pr_create_rc" -eq 0 ]; then
pr_url=$(printf '%s\n' "$pr_output" | tail -n1)
fi
# 失敗 / 形式不一致のいずれかなら abort_reason に診断を入れて分岐する。
# pr_id / pr_ref は abort_reason が空のときだけ確定する(壊れた値を作らない)。
abort_reason=""
if [ "$pr_create_rc" -ne 0 ]; then
abort_reason="uv run kaji pr create exited with rc=$pr_create_rc"
elif ! printf '%s' "$pr_url" | grep -Eq '^https://github\.com/[^/]+/[^/]+/pull/[1-9][0-9]*$'; then
abort_reason="uv run kaji pr create last line is not a PR URL: '$pr_url'"
fi
if [ -n "$abort_reason" ]; then
# 失敗時: 診断を stderr に出し、Step 5 / Step 6 には進まない。
# 後述「失敗時の処理」の ABORT verdict をそのまま stdout に出力して終了する。
printf 'ERROR: %s\n' "$abort_reason" >&2
printf '%s\n' "$pr_output" >&2
# ここから先(pr_id 確定 / Step 5 / Step 6)には進まないこと。
else
# 成功時のみ pr_id / pr_ref を確定する。
pr_id="${pr_url##*/}" # "42"
pr_ref="gh:${pr_id}"
fi
失敗時の処理:
abort_reasonが非空(=pr_create_rc非 0、またはpr_urlがhttps://github.com/.../pull/<N>形式に一致しない)の場合、 以降のステップ(Step 5: Issue 本文への PR 番号追記、Step 6: 完了報告)には 進まないこと。pr_id/pr_refは確定しておらず、未確定値で Issue 本文を 上書きすると壊れた**PR**:行を残す事故になる。その場合は以下の ABORT verdict を そのまま stdout に出力して 終了する:
---VERDICT--- status: ABORT reason: | uv run kaji pr create failed or returned an unexpected output. evidence: | abort_reason="$abort_reason" pr_create_rc=$pr_create_rc (full output captured in pr_output / stderr above) suggestion: | Re-run after addressing the underlying error (auth / rate limit / pre-existing PR for the branch). Check the forge CLI auth status (`gh auth status`) and `uv run kaji pr list --head <branch>`. ---END_VERDICT---
重要: PR body に
Closes [issue_ref]を必ず含めること。これにより GitHub の Development sidebar に正式リンクが作成される。
マージ規約: merge 規約は
--no-ffonly(squash merge 禁止)。マージ自体は/issue-closeの責務だが、PR タイトルとコミットは Conventional Commits に従うこと(docs/dev/git-workflow.md参照)。
PR 作成後、Issue 本文のメタ情報(NOTE ブロック)に PR 番号を追加:
CURRENT_BODY=$(uv run kaji issue view [issue_id] --json body -q '.body')
# **Branch** 行の後に **PR**: [pr_ref] を追加した本文を作成して更新
uv run kaji issue edit [issue_id] --commit --body "..."
以下の形式で報告してください:
## PR作成完了
| 項目 | 値 |
|------|-----|
| Issue | [issue_ref] |
| PR | [pr_ref] |
| URL | [pr_url] |
| コミット整理 | git absorb 実行済み / スキップ |
### 次のステップ
PRのマージ準備ができたら `/issue-close [issue_id]` を実行してください。
/issue-close の責務)---VERDICT---
status: PASS
reason: |
PR 作成を完了した
evidence: |
push と uv run kaji pr create が成功した
suggestion: |
---END_VERDICT---
| status | 条件 |
|---|---|
| PASS | PR 作成成功 |
| RETRY | 再試行で解決可能な失敗 |
| ABORT | 継続不能な失敗 / Step 0 で provider mismatch |