Use when opening a pull request, writing or improving a PR description, or preparing a branch for review. Examples: \"Open a PR for this\", \"Write the PR description\", \"Is this branch ready to review?\". For reviewing SOMEONE ELSE'S PR, use bearing-pr-review instead.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add ReidenXerx/bearing --skill bearing-pr --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Bearing Pr?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/reidenxerx-bearing-pr)More formats (shields.io, HTML) on the badges page.
---
name: bearing-pr
description: "Use when opening a pull request, writing or improving a PR description, or preparing a branch for review. Examples: \"Open a PR for this\", \"Write the PR description\", \"Is this branch ready to review?\". For reviewing SOMEONE ELSE'S PR, use bearing-pr-review instead."
---
# Writing a PR someone can actually review
<!-- BEGIN GENERATED: graph-uncertainty — bearing regenerates this block; edits here are replaced on update -->
## The graph can be wrong
A zero is not absence; a near-0.5 `r.confidence` edge is a lead, not proof (~92% of `USES`); a count
can be a floor — `impact` says which in `epistemic`. Before a conclusion that matters, confirm with a
scoped `Grep` (allowed here, not a gate violation) and say which check you ran.
<!-- END GENERATED: graph-uncertainty -->
It matters more here than anywhere else: a PR body states the blast radius **to the team**, in
writing, and you cannot take it back. If `epistemic` is not `"exact"`, write the number as a floor.
## The problem this solves
A reviewer's real questions are *what breaks if this is wrong*, *what else does it touch*, and *how
do I check it*. The default PR body — a bulleted list of what changed — answers none of them, and
answering them from the diff is the reviewer's most expensive work. Do it once, as the author, while
you still remember why.
## Step 0 — Follow the house style if there is one
**Never impose this structure on a repo that has its own.** In order:
1. `.github/pull_request_template.md`, `.github/PULL_REQUEST_TEMPLATE.md`, or any file under
`.github/PULL_REQUEST_TEMPLATE/` → fill it in, exactly as written. Do not add sections it omits.
2. No template → read the **three most recently merged PRs** for their shape:
`gh pr list --state merged --limit 3 --json title,body`. Match their headings, their level of
detail, and their ticket-reference convention.
3. Nothing to go on → use the structure below.
Also match the repo's commit and title convention (`gh pr list` shows it): if titles read
`feat(scope): thing (TICKET-123)`, yours does too.
## Step 1 — Establish the real blast radius
**With the graph:**
```
gitnexus_detect_changes({ scope: "compare", base_ref: "<default-branch>", branch: "<current>" })
```
Read `changed_symbols` and `affected_processes`. For anything HIGH/CRITICAL or surprising, run
`gitnexus_impact({ target: "<symbol>", direction: "upstream" })` on it.
**Without it:** `git diff --stat <base>...HEAD`, then for each changed exported symbol, grep its
call sites. Slower, same question.
**Then do the part that matters: reconcile the tool against reality.** A symbol changing is not the
same as behaviour changing. If five call sites are listed and four are unaffected because your change
is opt-in, *say that, and say why* — otherwise the reviewer re-derives it, or worse, assumes the
risk is real. This is the single highest-value paragraph in a PR body and no template generates it.
## Step 2 — Write it
```markdown
## Summary
What this does and why, in two or three sentences. Link the ticket. If the scope was
negotiated — a comment narrowing it, a decision in review — quote that, so the reviewer
is checking against the agreed scope and not their own guess at it.
## <One section per distinct change>
What it was, what it is now, and **why this way**. Name the alternative you rejected and
the reason — that is the question the reviewer is going to ask.
State the blast radius honestly here: which other callers touch this, why they are or are
not affected, and where a tool's "affected" list overstates the real behaviour change.
## Steps to verify
Numbered, concrete, in the reviewer's hands — what to click, what to type, what should
happen. Group them by area if there is more than one. These are the steps YOU ran.
## Risk / what to watch
Only when there is something real: a migration, a feature flag, a behaviour change behind
a config, something that cannot be undone by revert. Omit the section rather than pad it.
```
## Rules
- **One section per change, not per file.** The reviewer thinks in behaviours; the file list is
already in the diff.
- **Verification steps must be ones you actually performed.** An unrun step is a guess with a
checkbox (GP-1). If you could not run something, say so and say why.
- **Explain rejected alternatives** — "why not just change all six call sites" is the
question, and answering it pre-empts a review round trip.
- **Nothing in the body is for you** (GP-19). What you have not got round to verifying, why something
is still in draft, your own doubts and plans — those go to chat or the task-core. A real limitation
the reviewer must act on belongs; narrating your process does not.
- **Anything you changed outside what was asked gets itemised**, however small and however obviously
correct. An unreported out-of-scope change is indistinguishable from a mistake.
- **If you could not verify something, hand over the means to** (GP-18) — a link that opens the exact
case in the exact state, not "find an unpaid invoice". Reporting it as unverified is not a handover.
- **Do not restate the diff.** If a line adds nothing a reviewer could not read faster in the diff
itself, cut it.
- **Screenshots for anything visual**, before/after when behaviour changed.
- **No invented ticket numbers, no invented reviewers.** If you cannot find the ticket, leave the
link out and say it is missing.
## Before you open it
- Does the title match the repo's convention?
- Would someone who has never seen this code know what to click to check it?
- Is every claim in the body one you verified (GP-1, GP-8)?
- Is the branch actually up to date with the base?
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!