← All skills
Rewrite · 5 sources citedProtocolSoftware & games

self-review-before-submitting

Run the author's own completeness pass on a change before opening a pull request or asking for review - list every requirement as met or unmet with evidence, check that each new test can actually fail, find what the change made false, try unusual spellings of anything parsed, check failure direction and early exits, and run the project's checks with real output.

Use it when
A task is finished but not yet submitted, or when the user says "self-review", "before I open the PR", "am I done", "is this ready for review" or "check my work before pushing". This is the author's check, not an independent review. Not for reviewing someone else's change (performing-code-review), asking a reviewer (requesting-code-review), or the test-first cycle (test-driven-development).
What kind it is
A written method: it lays out how the work is done and what to check along the way.
Size
1,356 words. The whole text loads when the skill fires; only the 122-word description is always loaded.
Starts with
Ask for the job it describes.

How it is organised

What’s inside

The skill’s top-level sections, in order. The bar is each section’s share of the 1,356 words, so you can see where the weight sits before reading.

  1. 1Size the pass to the risk62 words
  2. 21. Look at what you are about to submit142 words
  3. 32. Requirement ledger135 words
  4. 43. Five questions about the whole diff98 words
  5. 54. Can each new test fail?196 words
  6. 65. What did this change make false?156 words
  7. 76. Other spellings51 words
  8. 87. Failure direction and early exits77 words
  9. 98. Production lens83 words
  10. 109. Run the project's checks and read the output99 words
  11. 1110. Write the submission note92 words
  12. 12The one-line test30 words

The skill itself

Read it before you install it

self-review-before-submitting/SKILL.md · 1,356 wordsDownloadSkill on GitHub ↗
---
name: self-review-before-submitting
description: Run the author's own completeness pass on a change before opening a pull request or asking for review - list every requirement as met or unmet with evidence, check that each new test can actually fail, find what the change made false, try unusual spellings of anything parsed, check failure direction and early exits, and run the project's checks with real output. Use when a task is finished but not yet submitted, or when the user says "self-review", "before I open the PR", "am I done", "is this ready for review" or "check my work before pushing". This is the author's check, not an independent review. Not for reviewing someone else's change (performing-code-review), asking a reviewer (requesting-code-review), or the test-first cycle (test-driven-development).
license: MIT
---

# Self-review before submitting

You wrote the change, so you cannot see what you assumed. This pass finds what is still free to fix and lets the change arrive at review carrying evidence instead of claims. It is the author's check. It is not an independent review and never counts as one: write "self-review", not "reviewed".

## Size the pass to the risk

A typo fix, or a local and reversible change with a direct check, needs steps 1, 2 and 9. A change to authentication, stored data, concurrency, public interfaces, deletion or deployment needs the whole pass **and** an independent reviewer (see requesting-code-review). Do not invent low-value tests or write a long checklist for ceremony. Self-review never replaces tests or reviews the project requires.

## 1. Look at what you are about to submit

Read the diff as a stranger would, not as you wrote it.

- Check the working tree status first. Only your changes should be there. Changes you do not recognize may belong to the user or to another agent running at the same time: do not commit them, do not discard them, and tell the user.
- Remove your own leftovers: debug output, commented-out code, unrelated reformatting, TODOs with no ticket.
- Confirm the branch was cut from the right base. A wrong base carries someone else's diff into yours.
- Every changed line should trace back to the task. Pull out or flag what does not, even when it is an improvement.
- Look at how the repo already does the same thing. If your change makes an existing convention impossible to follow, the change is probably wrong, not the convention.

## 2. Requirement ledger

List every requirement of the task and mark each **met** or **unmet**, with evidence: a test name, a command and its output, a line in the diff. "Implements the issue" is not an entry.

- A requirement you cannot mark met is unfinished work. Finish it, or cut it on purpose and say so.
- Count the artifacts the task owes besides code: tests, docs, migrations, configuration, changelog.
- If the task is too open to enumerate (no acceptance criteria, a requirement you would have to invent), stop and ask. Building past that gap yields something that passes review and fails the person who asked.
- If this is the last piece of a larger goal, check that the whole goal is delivered, and list what is not as follow-up work, not as a caveat.

## 3. Five questions about the whole diff

1. Does it do exactly what I say it does, no more and no less?
2. What is the worst input or state it can receive: null, empty, zero, huge, concurrent, a missing config key, an unauthenticated caller?
3. Where can it silently do the wrong thing: swallowed exceptions, defaults that mask errors, partial writes, flags that can be misread?
4. Does it change anything outside its stated scope: shared state, configuration, schema, global handlers, code that runs on import?
5. If it breaks in production, how soon will I know? Is the path tested, logged and loud?

## 4. Can each new test fail?

A green run and a coverage number cannot tell you. A test that cannot fail passes while asserting nothing.

For each test you added or changed, break the production code in the way the test claims to guard against, run the test, and expect red. Then undo that break and expect green. A new assertion that adds no red asserts nothing. (A test you watched fail before writing the code has already passed this check; see test-driven-development.)

- Break the **source**, never the test. Mutating the test only checks the test.
- Do it safely: make the break a small manual edit, note exactly what you changed, and restore by undoing that edit. Never restore by resetting or discarding the working tree, which would also throw away uncommitted work that is not yours.
- Common reasons a test cannot fail: an earlier guard short-circuits so the branch under test never runs (choose inputs that clear every earlier guard, and add a control case with the opposite outcome); the same literal sits on both sides of the assertion (derive the expectation from the computed or rendered value); a test double answers the same whatever it is asked.

## 5. What did this change make false?

A changed rule leaves stale claims in files the diff does not touch, and those files use the words of the **old** claim. Searching for what you edited searches the one region that is already correct.

- Search the repo for the identifiers, command names, flag names, counts and sentences that are no longer true. Read every hit and give each a disposition: fixed, or noted as not drift.
- Check the README, the header comment of each file you changed, docs, configuration examples and any table that carries a count.
- A search finds restatements, not omissions. Also ask where the repo tells someone how to do this thing, and whether that place knows about the change.
- If the repo keeps decision records, supersede the old statement with the reason rather than rewriting it silently.
- Do it now. A sentence that becomes false the moment this merges cannot wait for a later change.

## 6. Other spellings

If the change parses or matches text (commands, flags, paths, names, labels), try the legal but unobvious forms: attached values such as `--flag=value`; text that looks like a flag but sits inside quotes; a second occurrence when the match is greedy; a marker inside a longer word; case and prefix variants.

## 7. Failure direction and early exits

- For each new error path, decide whether it fails open (it silently stops protecting) or closed (it blocks loudly). Both are defects, but only one announces itself, so check the silent one first.
- For each new early return, exit or `continue`, list every rule or step after it and confirm each is still reachable for the cases that matter. A success path can skip code the diff never touched while every existing test still passes.

## 8. Production lens

When the change can reach production, name what you checked instead of writing "no impact": dependencies and lockfiles, permissions and roles, secrets, new external inputs, the deploy or publish path, configuration. "Not applicable" counts only with the evidence: "no manifest or lockfile in the diff, no CI or infrastructure files, a scan of the diff for key patterns found nothing." Check the artifact that ships, not how the diff looks: a comment-only change can still be emitted by a build that inlines content.

## 9. Run the project's checks and read the output

Run the suites you touched and the ones you did not, since a change in one place can redden another, plus lint, type check and build. Use what they printed, not a prediction.

- A check that skipped did not pass. If it matched no files, say so.
- Name failures that were already there. Do not hide them, and do not fix them unasked.
- A red check gets its own sentence in your report, never a parenthesis under "done". Confirm green after the run finishes.
- A check you did not run is reported as not run.

## 10. Write the submission note

Put in it: what changed and why; the ledger; what you cut and why; the checks you ran and what they showed; the checks you did not run; the decisions and assumptions you made; where you want the reviewer to look hardest; and whether anything a user or reader sees has changed. The reviewer will find any gap anyway, and finding it in your own report is cheaper for everyone.

If your self-review and an independent review disagree, the independent review wins. Your pass is a claim to the reviewer, not evidence.

## The one-line test

Would a stranger reading only the task agree this is finished? Can every assertion I added fail? Is every sentence this change leaves behind still true? Can it break production?

The second audit

What we found in the sources

The bundle holds several distinct jobs under one name. This skill is the author-side one: the completeness pass an author runs on their own change before submitting it. It is based on tedeuxx/tadeumendonca-skills, which is written for one project's workflow; the project-specific parts are removed and the reasoning kept. It is deliberately not an independent review and says so. Performing a review of someone else's change is a separate skill, performing-code-review. Every source below was read at the commit the auditor recorded. Nothing was taken from a source without a permissive license.

What each source contributed

  • tedeuxx/tadeumendonca-skills ↗ · Primary basis · MIT

    The requirement ledger (each requirement met or unmet, with evidence, and unfinished work is not a note); the rule that every new assertion must be able to fail, checked by breaking the source and counting reds; the three common reasons a test cannot fail (short-circuiting guard, the same literal on both sides, a double that cannot tell inputs apart); the "what did this change make false" sweep (search the old claim's words, disposition every hit, a search finds restatements and not omissions); alternative spellings of anything parsed; failing open versus closed; an early return as an allow path; naming the axes checked instead of "no impact"; checking the artifact that ships; clean tree, foreign changes and the branch base; the repo's own conventions; gates with real output; submitting evidence rather than claims; the one-line test; the independent gate wins over the author's pass.

  • rolling-codes/dev-workflow-pack ↗ · Added ideas · MIT

    The five questions about the whole diff (does it do what it says, worst-case input, silent wrong path, anything changed outside scope, how soon would I know), and the leftover-hygiene list (debug output, commented-out code, TODOs with no ticket).

  • xu91102/claude-everything-Workflow ↗ · Added ideas · MIT

    Size the pass to the risk: self-review for local, reversible, verifiable work and independent review as risk grows; no ceremony or low-value tests; self-review never replaces required review.

  • tapway/tapway-superpowers ↗ · Added ideas · MIT

    Every changed line should trace to the stated goal, and out-of-scope changes are flagged even when they look like improvements.

  • kajisho5/ffmpeg-skill ↗ · Added ideas · MIT

    Report a red check as its own statement, confirm green after the run finishes rather than predicting it, and report an unrun check as unrun.

What changed

  • tedeuxx/tadeumendonca-skills is written for one project's workflow (personas, a definition-of-done list, decision records, end-to-end journeys, a no-squash merge rule). This version is host- and project-neutral and keeps only the reasoning that applies to any change.
  • Removed the incident counts, PR numbers and "Measured" claims, because the file includes no data for them.
  • The description gains trigger phrases ("self-review", "before I open the PR", "am I done") and a not-for clause naming skills that exist in this repository; the source's not-for clause pointed at a skill that is not here.
  • Added a safe way to run the break-the-source check: a small manual edit, note exactly what changed, undo that edit, and never restore by resetting or discarding the working tree. The source says only to restore.
  • Added the rule for unrecognized changes in the working tree: do not commit them and do not discard them; tell the user.
  • Added a proportionality section (from xu91102/claude-everything-Workflow) and the statement that self-review is not independent review.
  • Reordered into a numbered pass with a submission note and the one-line test.

Problems found in the sources

  • tedeuxx/tadeumendonca-skills: Written for one project's workflow: personas (developer, quality-assurance), a definition-of-done list, decision records, end-to-end journeys, a no-squash merge rule and a rule about shell scripts. There is no name field in the frontmatter. It states counts from its own repository (eight commits across two slices, six corrective, seven assertions that could not fail, PR numbers) and says "Measured" without including the data. The mutation step says to restore after each break but not how to do so without touching uncommitted work. The not-for clause points at a quality-gates skill that is not in the bundle.
  • rolling-codes/dev-workflow-pack: The description has good trigger phrases and a not-for clause, but the not-for clause points at skills that are not in the bundle (code-review-routing, architecture-review, bug-triage). The delegated mode depends on a plugin-shipped code-reviewer agent and on graph-tool reference files. It gives an unexplained threshold (about 400 lines or 8 files), shell commands that pipe test output through tail, and an emoji-marked output template.
  • xu91102/claude-everything-Workflow: States that it is adapted from mattpocock/skills at commit 2ab9580. It points to two prompt files under references/ that are not in the bundle, depends on --mode flags and on a caller that supplies base, scope and risk, and is written in dense compressed paragraphs.
  • tapway/tapway-superpowers: A checklist tied to one stack (Zod, Pydantic, SQLAlchemy) with emoji markers and fixed thresholds (functions under 50 lines, files under 300 lines) that have no stated basis. It bundles "requesting" and "receiving" modes that sibling skills already cover, and points to a db-reviewer subagent and a PR template file that are not in the bundle.
  • kajisho5/ffmpeg-skill: Repo-local. The frontmatter name is reviewing-ffmpeg-skill-changes while the folder is code-review. It points to three files under references/ that are not in the bundle, to other repo-local skills, and to repo-specific tests, a CI matrix and a byte budget for SKILL.md. It carries dated incident history. The transferable ideas sit in its first sections.

What was dropped

  • The closing essay on whether a rule belongs in a hook or a skill, including the owner's rule about shell scripts, and the decision and trade-off section. They argue for a design choice in one repository.
  • Repository conventions: conventional commit subjects, real merge commits and never squash, body files for multi-line text, git -C instead of cd, one command per call.
  • The story-level completeness checklist beyond one bullet about the last piece of a larger goal, the content-truth lens that a gate dispatches, and the instruction to use a separate worktree while a gate reviews.
  • The incident counts and PR numbers.
Read but not used (18)
  • mattpocock/skills: Read. Covers performing a review of a change (two axes: Standards and Spec); used in performing-code-review. Nothing taken here.
  • rengwu/wayfinder-maps: Read. A variant of mattpocock/skills (about 81% similar); used in performing-code-review. Nothing taken here.
  • rubakas/agent-notes: Read. A near copy of mattpocock/skills (about 98% similar). Nothing taken here.
  • CapitalCantrip/quality-gates: Read. A near copy of mattpocock/skills (about 98% similar), published as review-against-spec. Nothing taken here.
  • the-inconvenience-store/skills: Read. An almost exact copy of mattpocock/skills (about 99.8% similar). Nothing taken here.
  • Bossmann007/cursor-kit: Read. A near copy of mattpocock/skills (about 97% similar). Nothing taken here.
  • RollRollRoll/agent-toolkit: Read. A Chinese translation of mattpocock/skills, read in full. Nothing taken here.
  • oprogramadorreal/optimus-claude: Read. A plugin-bound review of local changes or a PR by parallel agents; used in performing-code-review. Nothing taken here.
  • igmarin/rails-agent-skills: Read. A Rails-specific PR review; used in performing-code-review. Nothing taken here.
  • yimwoo/hotl-plugin: Read. A review against a plan and project contracts, run by a dispatched reviewer; used in performing-code-review. Nothing taken here.
  • szarkans/multi: Read. A multi-model review plugin; used in performing-code-review. Nothing taken here.
  • helderberto/agent-skills: Read. A review of a GitHub pull request; used in performing-code-review. Nothing taken here.
  • yowcow/dude: Read. A review, fix and verify loop built on a plugin's worker skills; used in performing-code-review. Nothing taken here.
  • teamniteo/hakuto: Read. Read the header, scope step, check-category list, output format and severity rules, not every check in detail. A one-project audit; nothing taken.
  • ioncache/ioncache-ai-tools: Read. A read-only reviewer; used in performing-code-review. Nothing taken here.
  • cheng6563/litepowers: Read. A short Chinese-language review of a working diff, read in the original; used in performing-code-review. Nothing taken here.
  • mascah/skills: Read. A short review skill that defers to files not in the bundle; used in performing-code-review. Nothing taken here.
  • arbor-ai-inc/cadence: Read. A plugin-bound adversarial review loop; used in performing-code-review. Nothing taken here.
Left out for license (4)

No license is declared on these, so nothing was taken from them: andrian-syh/roblox-optimum, im47cn/awesome-rules, nilswidal/loobster, redfoxvn/agent-context-management.

Same text, wherever you work

Use it where you work

Copy the folder into your skills directory, then ask for the job or type its start command.

git clone https://github.com/nikbearbrown/skills
cp -R skills/skills/self-review-before-submitting ~/.claude/skills/

Pairs with