home / skills / openclaw / openclaw / prepare-pr
/.agents/skills/prepare-pr
This skill prepares a PR head for merge by validating findings, updating changelog, and safely gating and pushing to the PR head.
npx playbooks add skill openclaw/openclaw --skill prepare-prReview the files below or copy the command above to add this skill to your agents.
---
name: prepare-pr
description: Script-first PR preparation with structured findings resolution, deterministic push safety, and explicit gate execution.
---
# Prepare PR
## Overview
Prepare the PR head branch for merge after `/review-pr`.
## Inputs
- Ask for PR number or URL.
- If missing, use `.local/pr-meta.env` if present in the PR worktree.
## Safety
- Never push to `main`.
- Only push to PR head with explicit `--force-with-lease` against known head SHA.
- Do not run `git clean -fdx`.
- Wrappers are cwd-agnostic; run from repo root or PR worktree.
## Execution Contract
1. Run setup:
```sh
scripts/pr-prepare init <PR>
```
2. Resolve findings from structured review:
- `.local/review.json` is mandatory.
- Resolve all `BLOCKER` and `IMPORTANT` items.
3. Commit scoped changes with concise subjects (no PR number/thanks; those belong on the final merge/squash commit).
4. Run gates via wrapper.
5. Push via wrapper (includes pre-push remote verification, one automatic lease-retry path, and post-push API propagation retry).
Optional one-shot path:
```sh
scripts/pr-prepare run <PR>
```
## Steps
1. Setup and artifacts
```sh
scripts/pr-prepare init <PR>
ls -la .local/review.md .local/review.json .local/pr-meta.env .local/prep-context.env
jq . .local/review.json >/dev/null
```
2. Resolve required findings
List required items:
```sh
jq -r '.findings[] | select(.severity=="BLOCKER" or .severity=="IMPORTANT") | "- [\(.severity)] \(.id): \(.title) => \(.fix)"' .local/review.json
```
Fix all required findings. Keep scope tight.
3. Update changelog/docs (changelog is mandatory in this workflow)
```sh
jq -r '.changelog' .local/review.json
jq -r '.docs' .local/review.json
```
4. Commit scoped changes
Use concise, action-oriented subject lines without PR numbers/thanks. The final merge/squash commit is the only place we include PR numbers and contributor thanks.
Use explicit file list:
```sh
scripts/committer "fix: <summary>" <file1> <file2> ...
```
5. Run gates
```sh
scripts/pr-prepare gates <PR>
```
6. Push safely to PR head
```sh
scripts/pr-prepare push <PR>
```
This push step includes:
- robust fork remote resolution from owner/name,
- pre-push remote SHA verification,
- one automatic rebase + gate rerun + retry if lease push fails,
- post-push PR-head propagation retry,
- idempotent behavior when local prep HEAD is already on the PR head,
- post-push SHA verification and `.local/prep.env` generation.
7. Verify handoff artifacts
```sh
ls -la .local/prep.md .local/prep.env
```
8. Output
- Summarize resolved findings and gate results.
- Print exactly: `PR is ready for /merge-pr`.
## Guardrails
- Do not run `gh pr merge` in this skill.
- Do not delete worktree.
This skill prepares a pull request head branch for merge using a script-first, deterministic workflow that enforces structured findings resolution and safe push behavior. It ensures required findings are resolved, scoped commits are created, gates are executed, and the PR head is pushed with lease and verification safeguards. The output is a clear handoff confirming the PR is ready for merge.
The skill initializes a PR prep session, validates required artifacts, and enumerates BLOCKER and IMPORTANT findings from the structured review file. You resolve findings, update changelog/docs, and create focused commits via the committer wrapper. Gates run through the wrapper, and the push step performs pre-push SHA checks, a lease-safe force-push path with an automated rebase+retry, and post-push propagation verification, producing local handoff artifacts.
What files are mandatory for this workflow?
.local/review.json is mandatory; .local/pr-meta.env and other .local artifacts are used if present.
Will this skill ever push to main?
No. It never pushes to main and only targets the PR head with --force-with-lease against a known SHA.
Can I run this from any directory?
Wrappers are cwd-agnostic but running from the repo root or the PR worktree is recommended.