skills/code-review/SKILL.md
Correctness, security, and spec-fidelity gate for incoming pull requests. Auto-invoked when reviewing a diff, evaluating a PR, running /code-review at any effort level, or asked "is this safe to merge?" Covers bugs, TypeScript hygiene, security, database safety, test existence, devex regressions, feature-flag leaks, and whether the diff matches the originating issue/spec. Multi-PR report-only review routes through review-dispatch; non-serial queue draining is exposed only through exact /merge force.
npx skillsauth add shipshitdev/library code-reviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Correctness and security gate. High-conviction findings only — flag issues you
are certain about. Ambiguity defaults to "request changes." Structural concerns
(cohesion, abstraction altitude, circular deps, dead code) belong to the
structural-review skill; trust it on those axes and own correctness + security
here.
Stack rules from the repo's agent instruction file (Bun, Tailwind v4, Next.js 16, shadcn/ui) are validated by the correctness review harness's rule-compliance layer. Do not re-flag them here.
Inputs:
git/gh commands gather
scope.Outputs:
Creates/Modifies:
External Side Effects:
git and gh invocations only. No mutations, no deploys.Confirmation Required:
Delegates To:
structural-review for cohesion/abstraction/dead-code axes.security-audit for OWASP-depth security review.codebase-design when a finding is about module depth or seam placement.The checklist below is the Standards axis (correctness + security + this repo's hygiene). Run a Spec axis in parallel so a change that follows every standard but implements the wrong thing cannot hide, and a change that matches the issue but breaks conventions cannot hide.
A change can pass one axis and fail the other:
Report them under ## Standards and ## Spec. Do not merge or rerank findings
across axes.
Whatever the user said is the fixed point — a commit SHA, branch name, tag,
main, HEAD~5. If they did not specify one, ask. Confirm it resolves and the
diff is non-empty (git diff <fixed-point>...HEAD) before reviewing.
Look for the originating spec, in this order:
#123, Closes #45) — fetch via gh.docs/, specs/, or the issue body matching the branch.Report:
Quote the spec line for each finding. Spec misses that drop required behaviour are Block Merge. Scope creep is Request Changes unless the user already accepted it.
any types — define proper interfaces or named types in *.types.tsunknown without a type guard — bare unknown is deferred anyas X casts without an explanatory commentconsole.log — use the project logger (LoggerService, pino, winston)@ts-ignore or @ts-expect-error without an explanatory commentawait db.update() calls that can leave the DB half-written on
failure must be wrapped in a transaction or collapsed to a single atomic writeError)useEffect with async calls (AbortController)@ApiOperation / @ApiResponse)Changes that silently break the local dev loop for other engineers:
.env.example / .env.template? Is the rename announced (migration note,
changelog, or PR description)?package.json that break the existing
bun run dev / bun run build contract without a clear migration noteBlock merge when a devex regression is unannounced. Request changes when it is documented but the documentation is in the wrong place.
Features meant to be gated that are shipping unflagged or partially flagged:
const ENABLE_NEW_CHECKOUT = true standing in for
a real flag evaluation; will never be cleaned up and bypasses the flag serviceFlag leaks that expose unreleased functionality to all users are merge blockers. Missing cleanup tickets are a "request changes."
any types or bare unknown without type guardsThis skill = correctness + security gate.
Use it for an individual diff or PR. Route a report-only multi-PR request such as
"review all PRs" through review-dispatch, which applies this gate per PR. The
only non-serial queue-drain mode is exact /merge force, owned by
merge-open-prs; never infer that mutating mode from a review request.
Structural and maintainability concerns — module cohesion, abstraction altitude,
circular dependencies, dead-code introduction, API surface sprawl, whether the
implementation matches the stated architecture — belong to the structural-review
skill. Do not re-litigate those axes here; trust structural-review to own them.
Security-audit depth (OWASP rubric, dependency CVEs, timing attacks, privilege
escalation paths) belongs to the security-audit skill. Surface obvious issues
found in the diff, but do not attempt a full security audit in this skill.
development
Coordinates a weekly engineering review of board accuracy, recent code changes, operational health, and scoped cleanup. Use for a recurring repository health review or a review of the last several days.
testing
Audits project board configuration and prepares explicitly requested setup, copy, or normalization changes while preserving the existing workflow and provider boundaries. Use when inspecting a board's fields, columns, scope, or configuration.
testing
Reconciles a project board with current work and delivery evidence, reports incomplete coverage and metadata gaps, and applies only approved provider-supported field changes. Use when auditing board drift, reviewing blocked work, or assessing upcoming delivery.
development
Walk through how a subsystem works. Use for "how does X work", code walkthroughs before changing something, and placement or ownership questions. Explains architecture, runtime flow, and onboarding mental models. Can critique architecture. Use why for motivation.