implementation-review
Skill0 starsChanged 7 days agoMITView on GitHub
Pre-commit quality gate. Invoke before every git commit, after the live-run check (/run). Seven checks, run by subagents (seven in parallel, or one for a small diff): plan gaps, use-case coverage gaps, missing test scenarios, test-philosophy and test-integrity violations (Kent Dodds Testing Trophy; deleted, skipped or weakened tests), SOLID violations, Clean Code violations, and security vulnerabilities (via /security-audit, which layers on /wstg). Surfaces findings before they land in history. Also invoke when the user says 'review this', 'am I done', 'did I miss anything', or 'check the quality'.
6 other projects use a version of this.
Adopted by
Most recently taken up by
- drvoss/everything-copilot-clitheir own version, first seen Oct 26, 2026
- futex-ai/skillstheir own version, first seen Oct 25, 2026
- cellrishi-code/claude-skills-atlastheir own version, first seen Oct 4, 2026
- HugoLopes45/design-skillstheir own version, first seen Aug 26, 2026
- aku11i/skillstheir own version, first seen May 16, 2026
- ProviderProtocol/aitheir own version, first seen Jan 20, 2026
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- drvoss/everything-copilot-cli★ 48same name
- cellrishi-code/claude-skills-atlas★ 6same name
- ProviderProtocol/ai★ 4same name
- aku11i/skills★ 1same name
- futex-ai/skills★ 1same name
- HugoLopes45/design-skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository31 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- ai-estimateSkill
- aso-craftSkill
- audit-reportSkill
- babysit-prsSkill
- blueprintSkill
- brag-docSkill
- business-briefSkill
- cagan-checkSkill
- code-craftSkill
- commit-reportSkill
- compassSkill
- cv-craftSkill
- dev-flowSkill
- grill-meSkill
- llm-wikiSkill
- parallel-worktreesSkill
- periscopeSkill
- portfolio-syncSkill
- pr-craftSkill
- problem-solvingSkill
- publish-skillSkill
- review-passSkill
- security-auditSkill
- semverSkill
- sentinelSkill
- seoSkill
- testing-philosophySkill
- to-prdSkill
- write-a-skillSkill
- wstg-security-testingSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 13 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
13
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Run this before every commit, after the live-run check (/run — drive the actual app and see the change work).
- Very specific: line 26
Leave lockfiles out. A binary file (- in numstat) counts as a file with no lines.
- Distinctive: line 35
Before spawning subagents, collect:
- Distinctive: line 48
If no plan is findable, say so explicitly and skip Checks 1-2 in the subagent briefs.
- Distinctive: line 84
First, reconcile against the ledger: If the plan carries a Blind Spots table, every row is a claim to check:
- Distinctive: line 90
No Blind Spots table (bug tier, or the plan predates it) → say so and derive from scratch below.
- Distinctive: line 105
Not every category applies to every change, exercise judgment, but do not skip a category without a reason.
- Distinctive: line 210
Do not skip a check because "the change is small", that is when violations sneak through.
- Distinctive: line 211
Do not invent a plan if none is findable, skip Checks 1-2 and say so.
- Distinctive: line 212
Do not treat every advisory finding as blocking, use judgment.
- Distinctive: line 213
Do not apply Check 4's philosophy rules to non-test files (its integrity rule reads the source diff only for test-aware code), or run Check …
- Distinctive: line 214
Do not report a Check 7 finding without a concrete exploit path.
- Distinctive: line 215
Do not fail Check 7 when the dependency auditor is missing, degrade to advisory.
- Distinctive: line 216
Do not report "✓ clean" without the subagent actually reading the diff.
- Distinctive: line 217
Do not run the checks in the main agent, however small the diff.
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Implementation Review
Run this before every commit, after the live-run check (/run — drive the actual app and see the change work). The goal: what was planned is implemented, what is implemented is tested, and what is tested is correct.
The checks run in subagents, never in the main agent: a subagent reads the diff without this conversation's assumptions, so a session never grades its own work. Seven subagents or one below decides how many. Collect their reports, then synthesise into the output format below.
Two checks pull in other skills' content, pass it into the brief of the subagent that runs them:
- Checks 2-4 apply
/testing-philosophy: behavior over implementation detail, the two acid tests, the Testing Trophy, the e2e necessity floor, the scenario rules for acceptance examples, and the test-integrity list. Stack-agnostic. Pass that skill's content into the Check 2, 3, and 4 briefs so they judge tests against one shared bar. - Check 7 applies
/security-audit(which itself layers on/wstg): the confidence gate, false-positive precedents, three-phase methodology, WSTG mapping, and dependency audit. Pass that skill's content into the Check 7 brief.
Narrow mode. --tests-only runs Check 4 alone, as one subagent fed only Check 4's inputs, whatever the diff's size, and reports that one line plus the summary. review-pass decides when to call it (see its Depth rules).
Review target. By default the diff under review is git diff --staged. When a caller passes a target (a commit range, or the working tree vs the merge-base, which is what review-pass scopes), use that diff everywhere below instead, so a change left unstaged or committed earlier on the branch is still in view.
Seven subagents or one. Once Step 1 has the diff, count its files and changed lines, the sum of both numstat columns (added plus deleted, so 9 1 is 10 lines), with the command that matches the review target:
--staged, the default:git diff --staged --numstat- a commit range:
git diff --numstat <range> - the working tree vs the merge-base:
git diff --numstat <merge-base>, plus every untracked file fromgit ls-files --others --exclude-standard, each counted as all of its lines
Leave lockfiles out. A binary file (- in numstat) counts as a file with no lines.
- At most 3 files and 50 lines: spawn one subagent that runs all seven checks in order, each against its own inputs below, and returns the seven lines.
- Anything larger: spawn seven, one per check, in parallel.
Under the report's title, say which: Subagents: 1 (N files, M lines) or Subagents: 7 (N files, M lines).
Step 1: Gather inputs (main agent)
Before spawning subagents, collect:
- The diff under review (see Review target above), full diff, the primary input for all subagents.
- Its file list.
- For Checks 2 and 4: the plan as it stood before the change (
git show <base>:<plan path>), commit messages in the target range, and every test file that cites the plan's AC ids. - The active plan, look in this order:
- Session context: did a planning skill (
/blueprint,/to-prd,/grill-me) run earlier in this conversation? Use that output. docs/plans/*.mdordocs/prds/*.md, the most recently modified file. Falling back further,docs/intent/*.mdcarries the grill-me design notes and edge-case decisions — thinner than a plan, but enough for Checks 1-3 to have something to reconcile against.- The decision log:
docs/adr/,docs/prds/,docs/development/. The foundational decision anchors mission and scope. - README or CLAUDE.md scope notes.
- Session context: did a planning skill (
- Full content of test files touched or related to the staged changes.
- Full content of non-test source files in the staged diff.
If no plan is findable, say so explicitly and skip Checks 1-2 in the subagent briefs.
Step 2: Dispatch the subagents
Spawn them with model: "sonnet", seven at once or one, per Seven subagents or one. Each check receives the relevant slice of inputs (below) and returns findings as Check N · [name]: ✓ clean | ⚠ [finding] | ✗ [blocking finding].
Check 1: Plan gap analysis
Inputs: full git diff --staged, the active plan.
Compare what the plan said would be built against what the diff implements. For each plan item: in the diff → ✓ implemented; partially there → ⚠ partial, name what is missing; absent → ✗ gap, deferred or forgotten?
Ask: would a reader of the plan consider this commit "phase complete"? If the plan defined a gate ("Done when: AC-1 to AC-4 pass", or "ATs #1-4" in older plans), does the commit satisfy it, with a test for each of those ACs present and passing? If nothing in the inputs shows those tests ran, report the gate as unverified, not met. A deferred item is not a gap, but it must be explicitly deferred, not silently absent.
Check 2: Use-case coverage
Inputs: full git diff --staged, the foundational scope doc (docs/prds/*, docs/adr/*, docs/development/*, or CLAUDE.md), README feature description, the active plan (for its AC ids and phase gates), and every test file that cites those ids, changed or not (search the repo for them). Apply /testing-philosophy.
For every user-facing capability in scope for this commit: is there a test that exercises it through the public API? A code path that implements it? Is the critical happy path covered end-to-end through the real assembled system (the e2e floor)?
Numbered acceptance criteria first. When the plan numbers ACs (AC-n), reconcile them before anything else: every AC example in this phase's gate needs a test, at the tier the example (or its rule) names, whose name or docstring carries the id in whatever form the language allows (AC-1a, ac_1a, AC1a). List each AC with no test, and each test that cites an AC id it doesn't exercise. An AC still marked (proposed) gets a ⚠: the code is being held to examples no human has approved yet.
Different from Check 1: use cases can be implicit in the product scope even if the plan did not spell them out. Ask "what would a consumer of this code reasonably expect to be able to do?" Flag any use case with an implementation but no test, a test but no implementation, or a user-facing happy path with no end-to-end coverage.
Check 3: Missing test scenarios
Inputs: full git diff --staged, full content of changed test files, the plan's ## Edge Cases table if present (plans written before the rename call it ## The Blind Spots; accept either). Apply /testing-philosophy.
First, reconcile against the ledger. If the plan carries a Blind Spots table, every row is a claim to check:
handle→ is the case actually implemented, and is there a test that fails without it? Implemented-but-untested is a finding. Neither is a ✗.defer/won't→ is it still absent? Silently implemented is fine but note it. Silently half-implemented is a ✗ — a partial path is worse than none.- Anything the diff introduced that no row covers → new blind spot, flag it and name the row that should have existed.
No Blind Spots table (bug tier, or the plan predates it) → say so and derive from scratch below.
Then, for every behavior introduced or changed, work the scenario checklist:
| Scenario | Question |
| Happy path | Is the basic success case tested? |
| Empty / nil / zero | Empty, null, zero, or absent input? |
| Boundary | First, last, exactly one, max capacity? |
| Invalid input | Malformed, out-of-range, wrong type, is rejection tested? |
| Error path | For every success path, is the failure path tested? |
| Idempotency | If callable twice, is that safe and tested? |
| Order sensitivity | Does the result depend on call order? Documented and tested? |
| Concurrent access | If called from multiple tasks, safe and tested? (Only if relevant.) |
Not every category applies to every change, exercise judgment, but do not skip a category without a reason.
Check 4: Test philosophy and integrity (Testing Trophy)
Inputs: full content of changed test files; the test-file hunks of the diff, since a deleted test or an edited expected value only shows there; the source diff, read only for test-aware code; the plan as it stood before this change; and any PR body or commit messages in range. Apply /testing-philosophy. A violation is a finding.
- Test integrity: apply testing-philosophy's integrity tells. This check never clears a tell itself, because every reason it could read can be written by the agent under review. For each tell, report what changed plus any reason in view (an AC or plan entry that changed, a commit message, the PR body, a comment): with a reason → ⚠ needs-a-human, quoting the reason so the user can confirm it in one look; with none → ✗. Both block the commit until the user confirms.
- Scenario level: an acceptance or Given/When/Then test that scripts the UI (clicks, selectors, field names) or checks more than one rule → flag. Run the scenario acid test from testing-philosophy.
- Behavior over implementation: does the test name describe a behavior ("rejects an out-of-range index with RangeError") or a mechanism ("calls chooseIndex with the given index")? Does it assert the observable result or how it was produced?
- Public API only: accessing private fields,
_inner, unexported functions, or internal state → violation. Asserting an internal function was called (spy / mock-call-count on an owned collaborator) → violation. Mocking types it owns → violation. Mocking only genuine external boundaries → ✓. - Real collaborators where cheap: anything mocked that could be a real instance without significant cost → flag.
- Refactor-proof: would it break on an internal rename with the public contract unchanged, or on an internal data-structure change with the return value unchanged? → violation.
- Trophy shape (both directions): more unit than integration for cross-unit behavior → flag; something at E2E level that fits cheaper at integration → flag (overuse); a user-facing critical path with no e2e at all → flag (the quieter, more common gap, coordinate with Check 2). A snapshot that will be rubber-stamped on update → flag.
- Test names:
it("works"),it("test 1"),it("should work correctly")→ violation. Specific behavior + expected error → ✓.
Check 5: SOLID violations
Inputs: non-test source files from the staged diff only.
- Single Responsibility: a class or module with more than one reason to change (validates and persists, formats and dispatches). Flag if methods cluster into two distinct concern groups.
- Open/Closed: adding a variant requires editing existing files (a
switch/if-elsechain on a type tag in the caller). Flag if extension requires modification rather than addition. - Liskov: a subtype that throws where its base does not, or ignores a method the base defines. Flag a narrower contract.
- Interface Segregation: an interface that forces implementors to define methods they do not use. Flag fat interfaces.
- Dependency Inversion:
new ConcreteType()inside a class body where injection or an abstraction would be natural. Flag it.
Check 6: Clean Code violations
Inputs: full git diff --staged (test and non-test).
| Issue | What to look for |
| Magic values | Bare literals with meaning: if (index >= 99), setTimeout(fn, 3000), a string key repeated across files. Name them. |
| Does more than one thing | If describing it needs "and", split it. |
| Unqualified generic names | data, info, result, value, temp, manager, handler, helper without qualification. |
| What-comments | Comments restating code (// increment the index over index++). Keep only why comments. |
| Half-finished surfaces | Exported symbol with TODO, a stub { return null; }, or "implement later". |
| Long parameter lists | More than 3-4 positional params, group into an options object. |
Check 7: Security
Inputs: full git diff --staged, file list, the lockfile diff if a lockfile changed.
Pull in the full content of /security-audit and apply it to the staged diff. That skill carries the confidence gate, the three-phase methodology, the false-positive precedents, the dependency audit, and it maps findings to WSTG IDs via /wstg.
The one rule: only report a finding with a concrete exploit path, and only when over 80% confident it is actually exploitable. Review what the change newly introduces, not pre-existing issues the diff sits near. When a lockfile changed, run the repo's native auditor (detect it from the lockfile, see the table in /security-audit) scoped to the changed packages, degrade to an advisory flag if unavailable. Return findings in the house line format. HIGH and MEDIUM block; LOW is advisory.
Step 3: Synthesise (main agent)
Merge the seven check reports, in this format:
Implementation review, [commit subject or staged file summary]
Subagents: [1 or 7] ([N files, M lines])
Check 1 · Plan gaps
✓ All phase items present | ✗ Gap: [item], [present/partial/absent]
Check 2 · Use-case coverage
✓ All use cases covered | ✗ [use case], no test / no implementation
Check 3 · Missing test scenarios
✓ Scenarios complete | ⚠ [behavior]: missing [scenario type]
Ledger: [N handled / N deferred / N drifted] | ✗ [case]: planned [decision], shipped [reality]
Check 4 · Test philosophy and integrity
✓ Tests pass | ✗ [test name]: [violation] | ⚠ integrity: [test or file:line], [tell], reason: [pointer], confirm | ✗ integrity: [test or file:line], [deleted / skipped / weakened / expected edited / test-aware code], no reason
Check 5 · SOLID
✓ No violations | ✗ [file:line]: [principle], [finding]
Check 6 · Clean Code
✓ No violations | ✗ [file:line]: [issue]
Check 7 · Security
✓ No vulnerabilities | ✗ [file:line]: [category] ([severity], WSTG-ID), [exploit] + fix | ⚠ [lockfile / auditor]
Summary: [N findings, fix before committing / Clean, proceed]Blocking (fix before committing unless the user overrides): a plan gap, a philosophy violation on a public-API test, any test-integrity tell the user hasn't confirmed, a SOLID violation that breaks extensibility, a HIGH or MEDIUM security finding. Advisory (surface, do not block): an unclear test name, a slightly long function.
Flow position
[code changes complete]
↓
/run ← does the change actually work end-to-end
↓
/implementation-review ← THIS SKILL, seven checks in subagents
↓
git commit
↓
/pr-craft ← open the PRAnti-patterns
- Do not skip a check because "the change is small", that is when violations sneak through.
- Do not invent a plan if none is findable, skip Checks 1-2 and say so.
- Do not treat every advisory finding as blocking, use judgment.
- Do not apply Check 4's philosophy rules to non-test files (its integrity rule reads the source diff only for test-aware code), or run Check 5 on test files.
- Do not report a Check 7 finding without a concrete exploit path.
- Do not fail Check 7 when the dependency auditor is missing, degrade to advisory.
- Do not report "✓ clean" without the subagent actually reading the diff.
- Do not run the checks in the main agent, however small the diff. See Seven subagents or one.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

