用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/werf/trdl --skill pull-request命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Code review of a pull request, branch, or diff. Covers technical, product, and risk perspectives in one pass and produces a consolidated report. Use when asked to review a PR, branch, or code changes.
Verify a test actually falsifies the behavior it claims to cover, via real mutation. Use right after writing or changing a test, when auditing an existing suite's real coverage, or as a step inside a code review.
Adversarial verification layer for reviewing agent-generated or otherwise untrusted implementations. Use when the author of a diff, patch, commit, or test suite is an agent, when a change touches tests or verification infrastructure, or when invoked as /agent-code-review. Adds test falsifiability checks and check-gaming detection on top of ordinary review; does not replace it.
基于 SOC 职业分类
正在显示 SKILL.md
| name | pull-request |
| description | Generates Pull Request titles and descriptions according to project conventions. Use when creating or updating a PR. |
The description is the spec of the change: a reviewer who never opens the diff must be able to say what the project does differently after it, where it bites, and what was actually proven. The diff is the evidence, not the source.
Everything only true during the review — what you ran, where to look, what to do after the merge — goes in a comment. When a project squashes PRs, the description becomes the commit body and outlives the review, while a comment does not: the kernel's --- line, with GitHub doing the cutting. The (#NNNN) in the subject keeps the comment reachable from git log.
gh pr create --draft) and leave them draft. Only the user marks a PR ready.gh pr comment), never in the description. Nothing to say — skip it; a comment holding only a mutation line is still required.<type>(<scope>): <subject>, ≤ 72 characters, mirroring the header of the main commit. Types, scopes and subject rules come from git-conventions and CONTRIBUTING.md#conventions, including the rule that a feat/fix subject names the user-visible outcome, not the mechanism. Nested scopes are comma-separated from the broadest: fix(server, release): …. For a dependency bump the title states the project's outcome, never the upstream changelog subject.
## Summary
<What the project does differently now, at most 3 sentences. For a `fix`: the observed wrong behavior,
plus a pasteable repro (command / config file / Dockerfile) when it reproduces from a clean
checkout, otherwise the precondition it needs — a race, a pre-existing host state. Never a
fabricated repro. For a `feat`: what the user can now do and the workflow that needed it.>
## What
- <One falsifiable behavior claim per line, with the condition that triggers it: "under umask 001
the service script is mode 0755", never "handles umask correctly".>
- <Every user-visible surface added or changed, with its default: flag, annotation, env var,
config field, log or error text, exit code.>
- <BREAKING: a claim that breaks an existing setup names who it breaks and the way out — "a client
below vX can no longer update after the TUF metadata change; re-add the repository".>
- <VERIFIED: a check CI cannot repeat — hand-run, host-level, offline, against a cluster — named
on the claim it settles. Anything CI does is not worth the line.>
- <UNVERIFIED: a claim nothing stands behind says so, and says what would settle it.>
- <What deliberately does NOT change, where a reader would expect it to.>
## Why
<The root cause, and what leaving it alone costs. Then the rejected alternative, when there is one
someone would argue for — "a repo-wide marker instead of a per-project one" is an alternative,
"the Vault API exposes no typed error for this case" is the diff. Never a reworded Summary or claim list.>
fix the symptom and its cause are neighbours in one chain: what is visible from outside goes in Summary, why the code did that and what leaving it costs goes in Why. When the symptom cannot be named without its mechanism — a stale cache entry, a missing host binary — name it in Summary anyway.### Breaking group, or lead their line with BREAKING: when there is only one. VERIFIED: and UNVERIFIED: stay inside the claim they qualify and are never grouped — a claim that both breaks and is unproven is the one a group would tear in half. Capitals, never bold or emoji — git log shows both literally, and only a word greps.BREAKING CHANGE: footer, which release-please turns into a major version bump. Never add it on your own — propose it, the bump is the user's call.UNVERIFIED: — becomes the next line of the same group. Group by user workflow or surface, never by file, under ### headings once What passes eight claims.task targets. For a speed change it is the work that no longer happens plus the workload the numbers came from; a wall-clock figure alone is not a claim.BREAKING:, or marker would qualify — drop the headings: one to three sentences, a marker leading the sentence it qualifies. A typo or a wording fix qualifies; a change to a published artifact, to what a pipeline emits, or to an instruction an agent follows does not, and a change needing never does.Before handing the PR over to the user, map it both ways:
A branch too large to walk hunk by hunk is mapped commit by commit, and the comment says so.
## Verification
- <manual or hand-run check CI cannot make, and the environment it needed>
- Mutation: <what was broken in the code> → <test that failed>.
- Not run: <check that would have covered a claim, and why it could not run>
## Review focus
- <where to look: an area that deserves care, a large generated diff>
## Follow-up
- [ ] <action outside this diff, naming where it happens (`owner/repo`, a file, a command)>
- [ ] BLOCKER: <the same, but it has to land before this PR is merged>
VERIFIED:, and this block is where it is spelled out; never the same sentence twice. Only the delta over CI. CI builds and runs the whole suite, so task build/task test:unit are noise unless a scoped local run is itself the point. Which claims are unproven belongs to the claims, never written twice.test-the-tests).Not run: line names the check and what stopped it; the claim itself says it is unproven. If the line would only restate the claim, drop it. It earns its place only when the missing check leaves a claim unverified.BLOCKER: for a dependency that has to land first. Mark what must not be skipped; when a release note is the only mitigation for a breaking change, say so on the line. No speculative and no already-done items. Public repositories only: a private harness or any path under ~ is never a line in the PR.When generating only the title (e.g. for gh pr edit --title), output ONLY the title, with no additional text, quotes, or formatting.
VERIFIED:UNVERIFIED:BREAKING:gh api repos/<owner>/<repo>/compare/<old>...<new> answers it in a second; a bump is trivial only after that range comes back with no user-visible change, and then the sentences name the range and say so..agents/skills, AGENTS.md or CODESTYLE.md is trivial only when it cannot change what an agent produces: a typo, a broken link, reflowed text. A changed, added or removed instruction takes the full form, and What states the delta in the artifact the agent generates.Fixes/Closes keywords live in the description — GitHub does not auto-close from a comment. When a known commit introduced the bug, pin it: Fixes: <12+ chars of sha> ("the commit subject").git-conventions and apply here unchanged, plus: a public project may be named as the workload that motivated a change, a customer may not.