Stop posting phantom bugs. A five-phase, evidence-backed code review skill for high-stakes PRs — every finding cited, every fix snippet executed, every hypothesis verified or dropped.
SaferSkills independently audited thorough-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Every finding must be backed by evidence: a command that was run, a quoted doc, or a file:line citation. Claims that depend on adjacent behavior — a flag's semantics, a library's API, a shell idiom's expansion, what a parallel or older code path does — are hypotheses until verified. Hypotheses do not appear in the final report.
Use when:
Skip when:
/review slash command insteadFive phases. Do not skip or interleave.
gh pr view <n> + gh pr diff <n>glab mr view <n> + glab mr diff <n>git log <base>..HEAD + git diff <base>...HEADExit: state the PR's intent in one sentence; order files by review priority.
Read each changed file with at least 20 lines of surrounding context, or the full file if under ~200 lines. Diff-only review is forbidden past this phase — diffs hide surrounding code that may interact with the change.
For each file, jot down (scratch notes, not the report):
If you cannot articulate the change per file, you have not read enough.
Tag each candidate finding:
[verified] — issue is visible in the changed code; evidence is file:line + quoted code[hypothesis] — depends on adjacent behavior not yet checkedHypotheses are not findings. Do not write them into the final report.
Common hypothesis categories and how to verify:
| Category | Verification |
|---|---|
| What a CLI flag does | <tool> --help, official docs (use a docs-lookup skill if available), or run it |
| What a library function returns/throws | Docs lookup, source read, or a small repro |
Shell idiom expansion (xargs, glob, IFS, $(...) failure) | Run on sample input |
| What an old/parallel code path did | git show <base>:<path>, git log -p |
| Whether a test exists for X | grep / glob |
| Platform behavior (BSD vs GNU, macOS vs Linux) | Run it; cite the man page |
| Runtime behavior under edge case | Focused test, or downgrade severity |
Promote every [hypothesis] to [verified] or drop it. For each, produce evidence: command + output, doc quote with link, or source-of-truth file:line. Evidence goes in the finding's Evidence: field.
Code suggestions count as hypotheses. If you propose a fix snippet (shell one-liner, regex, config tweak), run it on representative input before posting. A "fix" that doesn't work as advertised is the most common review failure.
Parallel verification: for 3+ independent hypotheses, dispatch them to subagents in parallel via Agent. Each subagent gets one narrow task: "verify this claim and report yes/no with evidence." Subagents force evidence over vibes and keep the main context clean.
If a hypothesis cannot be verified within budget:
[unverified], downgrade to NOTE (never BLOCKER or MAJOR), orRe-read each finding as if you were the PR author defending it:
Drop or downgrade anything that fails. You are looking for your own mistakes.
Illustrates how a hypothesis is formed, verified, and either dropped or promoted.
Scenario: PR adds a new --strict flag to a CLI's config loader.
Phase 3 — candidate finding (raw):
[hypothesis] The new --strict flag may break backwards compatibility for
existing config files.Phase 4 — verification:
--strict is opt-in, default false.<tool> --help | grep strict against the changed branch: confirms default false.grep -rn "loadConfig(" src/: 4 callers; none set strict: true.Verification Log entry:
- "--strict may break existing configs" → dropped: flag default is `false`
(verified via --help output); 4 callers grepped, none opt in.A second hypothesis that survives verification:
Phase 3:
[hypothesis] --strict combined with the legacy --legacy-mode flag may
produce undefined behavior.Phase 4:
src/config.ts:142-160 (full function, not just diff): when bothflags are set, the loader returns early without applying either.
rg "strict.*legacy|legacy.*strict" tests/: zero matches → no testcovers the combination.
Promoted to MAJOR finding:
**MAJOR — [src/config.ts:142] Conflicting flags silently no-op**
When both --strict and --legacy-mode are set, the loader returns early
without applying either; users get neither behavior with no warning.
Evidence: src/config.ts:142-160 (read in Phase 2);
`rg "strict.*legacy|legacy.*strict" tests/` returned 0 matches.
Suggested fix: either error on the combination or document the
precedence explicitly. (No code snippet posted — the fix is a design
choice for the author.)Two properties to notice:
| Level | Meaning |
|---|---|
| BLOCKER | Must fix before merge. Concrete bug, security issue, or breaking change. Evidence unambiguous. |
| MAJOR | Should fix before merge. Correctness or design issue with clear reasoning. |
| MINOR | Nice-to-have inside the PR's scope. |
| NOTE | Observation, not a request. Unverified hypotheses and out-of-scope context land here. |
| PRAISE | Worth calling out: clean handling, smart trade-off, good test. Subject to the same evidence rule. |
Discipline:
Stay inside the PR's diff:
If a pre-existing bug makes the diff unsafe, frame it as: "this PR exposes a pre-existing X; the safest path here is Y" — not "while you're here, also fix X."
Apply the relevant block when the diff touches that area.
Shell scripts / hooks
$(...) failure modes, set -e interactions)/usr/bin/env shLibrary / framework usage
Database / migrations
API changes
Tests
Auth / security
# Review: <PR title> (#<n>)
## Summary
<2-3 sentences: what the PR does and the headline verdict.>
## Verdict
<BLOCK | APPROVE WITH CHANGES | APPROVE | NEEDS DISCUSSION>
## Findings
### Blockers
1. **[file:line] Title**
<Description.>
Evidence: <command + output, doc quote, or file:line citation>
Suggested fix: <concrete change; for snippets, confirm executed>
### Major
<same structure>
### Minor
<same structure, terse>
### Notes
<observations, unverified hypotheses (downgraded), scope-adjacent context>
### Praise
- [file:line] <what was done well, with evidence of why>
## Files Reviewed
- path/to/file.ts (lines 1-N) — <one-line note on what was checked>
## Verification Log
- <hypothesis> → verified by <command/doc/file>: <result>
- <hypothesis> → dropped because <reason>
## Out of scope
<Pre-existing issues noticed but not introduced by this PR. One line each.>The Verification Log is mandatory. A re-reviewer reading the report should be able to reconstruct exactly which claims were checked and how. Reviews without verification logs are unauditable.
Before delivering:
[hypothesis] tags survived to the final reportIf any check fails, fix before posting.
| Failure mode | Counter |
|---|---|
| Confident assertion of tool/library behavior from memory | Verify via docs or repro before writing |
| Suggesting a fix snippet without running it | Execute on sample input first |
| Glossing over visually familiar lines | Explain in writing what each changed line does |
| Single-pass tunnel vision | Phase 5 adversarial pass is mandatory |
| Scope creep into pre-existing issues | Move them to "Out of scope" |
| Praise without verification | Praise is subject to the same evidence rule as criticism |
| Polish substituting for work | A well-formatted finding is not a verified finding |
| "Elegant" or "interesting" framings | Verified findings are usually boring file:line citations; cleverness is a red flag |
If you catch yourself doing any of these mid-review, stop and verify before continuing.
find-docs) — invoke when verifying library, tool, or API behavior claims rather than asserting from memory.superpowers:verification-before-completion) — same evidence-before-assertions discipline applied to one's own work; complementary upstream principle.review-gitlab-mr) — for posting findings as inline MR comments after this skill's review pass produces them.The exact skill names depend on the host environment; the underlying capabilities are the requirement.
Recommended evaluation cycle when adopting or modifying this skill:
The empirical test depends on the agent having Bash, file-read, and (where applicable) skill-invocation permissions. Backgrounded subagents may default-deny tool use; either approve interactively or bypass permissions for the test run.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.