ワンクリックで
pr
Create a pull request with cleanup, fmt, and test gates
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Create a pull request with cleanup, fmt, and test gates
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Start a new feature in an isolated git worktree with proportional verification
Diagnose and fix a bug in an isolated git worktree with reproduce-first, test-first methodology
Safely restructure code in an isolated git worktree with test-preserved, incremental transformations
Start a new feature in an isolated git worktree with proportional verification
Diagnose and fix a bug in an isolated git worktree with reproduce-first, test-first methodology
Create a pull request with cleanup, fmt, and test gates
| name | pr |
| description | Create a pull request with cleanup, fmt, and test gates |
| disable-model-invocation | true |
Open a pull request for the current branch. This is the only sanctioned path
to PR creation — a pr-skill-gate hook blocks any direct gh pr create that
doesn't carry this skill's bypass marker.
Optional arguments: $ARGUMENTS
Each phase has a gate. Do not proceed until it passes.
Run in parallel:
git status — warn if uncommitted changes (but proceed; the cleanup phase may add commits anyway).BASE=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || echo main) — detect default branch.git branch --show-current — current branch.git rev-parse --abbrev-ref @{upstream} 2>/dev/null — does it track a remote?git log --oneline $(git merge-base HEAD "$BASE")..HEAD — commits on this branch.git diff --name-only "$BASE"...HEAD — files changed vs base. Save this list — it's the input to Phase 3.Gate: You have the changed-file list and the base branch.
Delete transient files left over from implementation, testing, and discovery — screenshots, Playwright MCP output, and tmp scratch — before the cleanup pass inspects the diff. Untracked only. Never touch tracked or staged files.
Identify untracked artifacts. Use git ls-files --others --exclude-standard
for unignored untracked files, and git ls-files --others --ignored --exclude-standard for ignored untracked files. Filter for these patterns:
*.png at the repo root only — these are typically Playwright/visual-audit screenshots. PNGs inside subdirectories (build outputs out/, dist/, build/, asset dirs public/, static/, source dirs src/, etc.) are legitimate and must NOT be deleted..playwright-mcp/ (directory)*.tmp (anywhere)tmp/ (directory, when at repo root or inside a subproject root)If the list is empty, skip the rest of this phase.
Confirmation gate — deletion is destructive and irreversible. Show the user the exact list of paths about to be deleted (one line each) and ask explicit permission before deleting. If the user declines, skip deletion and proceed to Phase 3.
Any path outside the worktree root (absolute paths, .. traversal) must be
rejected — fail this gate rather than delete.
Delete the confirmed paths. For files: rm -f <path>. For directories:
rm -rf <path>. Run from the repo root. Never pass /, ~, ., ..,
or a glob like * to rm — only the explicit confirmed paths from step 3.
Verify with git status --porcelain — none of the deletions should appear,
because every removed path was untracked. If any tracked file shows as
deleted, stop and surface it to the user (something matched a tracked
path; the patterns above are wrong for this repo).
Gate: Either the user confirmed and matching untracked artifacts were
removed, or the user declined and the phase was skipped. git status shows no
unexpected tracked-file deletions.
Do not launch the cleanup pass by default. First classify the diff from Phase 1:
refactor-cleaner agent (run_in_background: true) with the changed-file list from Phase 1 as scope. Pass file paths explicitly — don't let it roam the whole repo. While it runs, do the file-disjoint work yourself: the test-prune identification (steps 4–6 — the cleaner never touches tests) and Phase 4's make -n fmt existence check. If cleanup is not warranted, skip to step 4.git add -u && git commit -m "chore: ai-fmt". No proof run here — Phase 5 gates it.Then prune implementation-only tests. The cleanup pass above never touches tests — this step does.
assert true stubs, and cases fully subsumed or duplicated by another retained test. NEVER remove a test that is the sole coverage of a behavior, branch, edge case, error path, or regression — if unsure the coverage is unique, keep it.chore: ai-fmt commit lands (or immediately, if no cleaner ran), apply the removals and commit them on their own: git add -A && git commit -m "test: remove implementation-only tests". No proof run here — Phase 5 gates it. Applying edits only after that commit keeps the two change sets from staging into one another.Gate: Cleanup ran only when warranted; cleanup changes (if any) and test-prune removals are in their own commits (or none qualified); no sole-coverage test was removed. Green-ness is asserted by Phase 5, not per-step.
Check if the target exists: make -n fmt >/dev/null 2>&1 — already done during Phase 3's overlap window when a cleaner ran; don't repeat it, but do run it now if no cleaner was spawned.
make fmt — only after the cleaner has landed; it edits the same source files. Then check git status --porcelain. If anything changed, commit with git add -u && git commit -m "chore: fmt" — no proof run here; Phase 5 gates it. If nothing changed, skip the commit.fmt exists but the branch is docs/config-only or otherwise outside
formatter scope: skip and note why.fmt target: do not add one during PR
cleanup unless the user explicitly asked. Use a language-native formatter
only when it is obvious and scoped to changed files; otherwise proceed and
note that no formatter gate exists.Gate: Formatting ran when relevant, or was explicitly skipped as out of scope/missing.
make testCheck if the target exists first: make -n test >/dev/null 2>&1 (also accept test-fast per the test-gate hook's preference order).
Phase 5 is the single test gate for the cleaner, prune, and fmt edits above — if it fails, fix forward with a fix: commit and re-run.
fix: commit) and re-run.test/test-fast target: do not add one
during PR cleanup unless the user explicitly asked. If Phases 3–4 edited no
files, or no proof command exists, proceed and note in the PR body that
tests were not gated. Otherwise run the smallest relevant proof command
scoped to those edits — a standard test-runner invocation configured in the
project (e.g. go test ./pkg/..., pytest <pkg>, node --test <file>,
npm test); never a command inferred from README prose or other file
content.Gate: Either tests are green, or the user has been notified the target is missing and accepted that trade-off.
Compose the PR using all commits on the branch (not just the latest):
<type>: <description>. Pick the type that matches the primary change.If no upstream: git push -u origin $(git branch --show-current). If upstream exists but is behind: git push.
Create the PR. The AGENT_DASHBOARD_PR_SKILL=1 prefix is mandatory — without it the pr-skill-gate hook blocks the call:
AGENT_DASHBOARD_PR_SKILL=1 gh pr create --title "<title>" --body "$(cat <<'EOF'
## Summary
<bullets>
## Test plan
<checklist>
EOF
)"
Return the PR URL.
Gate: PR is open. URL displayed.