openclaw/.agents/skills/prepare-pr/SKILL.md
Prepare a GitHub PR for merge by rebasing onto main, fixing review findings, running gates, committing fixes, and pushing to the PR head branch. Use after /reviewpr. Never merge or push to main.
npx skillsauth add team-hireal/realchat prepare-prInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Prepare a PR branch for merge with review fixes, green gates, and an updated head branch.
main or origin/main. Push only to the PR head branch.git push without specifying remote and branch explicitly. Do not run bare git push.git clean -fdx.git add -A or git add .. Stage only specific files changed.~/openclaw.git clean -fdx.git add -A or git add ..origin/main..local/review.md..local/prep.md with a prep summary.PR is ready for /mergepr.Create a checklist of all prep steps, print it, then continue and execute the commands.
Use an isolated worktree for all prep work.
cd ~/openclaw
# Sanity: confirm you are in the repo
git rev-parse --show-toplevel
WORKTREE_DIR=".worktrees/pr-<PR>"
Run all commands inside the worktree directory.
if [ -f .local/review.md ]; then
echo "Found review findings from /reviewpr"
else
echo "Missing .local/review.md. Run /reviewpr first and save findings."
exit 1
fi
# Read it
sed -n '1,200p' .local/review.md
gh pr view <PR> --json number,title,author,headRefName,baseRefName,headRepository,body --jq '{number,title,author:.author.login,head:.headRefName,base:.baseRefName,headRepo:.headRepository.nameWithOwner,body}'
contrib=$(gh pr view <PR> --json author --jq .author.login)
head=$(gh pr view <PR> --json headRefName --jq .headRefName)
head_repo_url=$(gh pr view <PR> --json headRepository --jq .headRepository.url)
git fetch origin pull/<PR>/head:pr-<PR>
# Move worktree to the PR tip first
git reset --hard pr-<PR>
# Rebase onto current main
git fetch origin main
git rebase origin/main
If conflicts happen:
git add <resolved_file> for each file.git rebase --continue.If the rebase gets confusing or you resolve conflicts 3 or more times, stop and report.
.local/review.mdKeep a running log in .local/prep.md:
CHANGELOG.md if flagged in reviewCheck .local/review.md section H for guidance.
If flagged and user-facing:
CHANGELOG.md exists.ls CHANGELOG.md 2>/dev/null
Check .local/review.md section G for guidance.
If flagged, update only docs related to the PR changes.
Stage only specific files:
git add <file1> <file2> ...
Preferred commit tool:
committer "fix: <summary> (#<PR>) (thanks @$contrib)" <changed files>
If committer is not found:
git commit -m "fix: <summary> (#<PR>) (thanks @$contrib)"
pnpm install
pnpm build
pnpm ui:build
pnpm check
pnpm test
Require all to pass. If something fails, fix, commit, and rerun. Allow at most 3 fix and rerun cycles. If gates still fail after 3 attempts, stop and report the failures. Do not loop indefinitely.
# Ensure remote for PR head exists
git remote add prhead "$head_repo_url.git" 2>/dev/null || git remote set-url prhead "$head_repo_url.git"
# Use force with lease after rebase
# Double check: $head must NOT be "main" or "master"
echo "Pushing to branch: $head"
if [ "$head" = "main" ] || [ "$head" = "master" ]; then
echo "ERROR: head branch is main/master. This is wrong. Stopping."
exit 1
fi
git push --force-with-lease prhead HEAD:$head
git fetch origin main
git fetch origin pull/<PR>/head:pr-<PR>-verify --force
git merge-base --is-ancestor origin/main pr-<PR>-verify && echo "PR is up to date with main" || echo "ERROR: PR is still behind main, rebase again"
git branch -D pr-<PR>-verify 2>/dev/null || true
If still behind main, repeat steps 2 through 9.
Update .local/prep.md with:
git rev-parse HEAD.Create or overwrite .local/prep.md and verify it exists and is non-empty:
git rev-parse HEAD
ls -la .local/prep.md
wc -l .local/prep.md
Include a diff stat summary:
git diff --stat origin/main..HEAD
git diff --shortstat origin/main..HEAD
Report totals: X files changed, Y insertions(+), Z deletions(-).
If gates passed and push succeeded, print exactly:
PR is ready for /mergepr
Otherwise, list remaining failures and stop.
/mergepr may reuse it.gh pr merge.development
Get current weather and forecasts (no API key required).
tools
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
tools
Start voice calls via the OpenClaw voice-call plugin.
tools
Extract frames or short clips from videos using ffmpeg.