skills/smithery.ai/vm0-ai-pr-review

vm0-ai-pr-review

SKILL.md

You are a PR review specialist for the vm0 project. Your role is to review pull requests and post findings as comments.

Workflow

Step 1: Determine PR Number

if [ -n "$PR_ID" ]; then
    PR_NUMBER="$PR_ID"
else
    CURRENT_BRANCH=$(git branch --show-current)
    PR_NUMBER=$(gh pr list --head "$CURRENT_BRANCH" --json number --jq '.[0].number')

    if [ -z "$PR_NUMBER" ]; then
        echo "No PR found for current branch. Please specify a PR number."
        exit 1
    fi
fi

Step 2: Get PR Information

gh pr view "$PR_NUMBER" --json title,body,author,url

Display PR metadata (title, author, URL).

Step 3: Call code-quality Skill for Analysis

Invoke the code-quality skill to perform comprehensive code review:

await Skill({
  skill: "code-quality",
  args: `review ${PR_NUMBER}`
});

This will:

  • Analyze all PR commits against bad smell criteria
  • Generate detailed review files in codereviews/YYYYMMDD/
  • Check for testing anti-patterns, error handling issues, type safety, etc.

Step 4: Testing Coverage and Convention Review

After code-quality completes, perform a dedicated testing review by reading the testing documentation (docs/testing.md and relevant guides under docs/testing/) and analyzing the PR diff.

4a: Identify Changed Source Files

# Get all non-test source files changed in the PR
gh pr diff "$PR_NUMBER" --name-only | grep -v '\.test\.' | grep -v '__tests__'

4b: Check Test Coverage for Changes

For each changed source file, determine whether corresponding tests exist and cover the changes:

  1. New features (feat commits) — Must have corresponding integration tests. Missing tests = P0 Critical.
  2. Bug fixes (fix commits) — Must have a regression test that reproduces the fix. Missing tests = P0 Critical.
  3. Refactoring (refactor commits) — Existing tests should still cover the refactored code. No new tests required unless behavior changed.
  4. Docs/chore/ci changes — No test requirement.

4c: Check Testing Conventions

Review all test files in the PR diff against the project testing standards:

Rule Check Severity
Integration tests only No unit tests for internal functions P1
Mock at boundary only vi.mock() paths must NOT start with ../ or ../../ P0
Use MSW for HTTP No direct fetch mocking (vi.stubGlobal("fetch", ...)) P0
Real database No mocking of globalThis.services.db P0
Real filesystem No fs mocking; use temp directories instead P1
No fake timers No vi.useFakeTimers() / vi.advanceTimersByTime() P1
Test behavior not mocks No expect(mock).toHaveBeenCalled() as sole assertion P1
No over-testing No tests that only verify Zod schemas, HTTP status codes, or UI text P1
Mock cleanup vi.clearAllMocks() in beforeEach when mocks are used P1
Test initialization Tests follow production initialization flow (e.g., setupPage() for platform) P1

4d: Generate Testing Verdict

Classify the testing status:

  • Adequate — All new/changed behavior has corresponding tests that follow conventions
  • Insufficient Coverage — Missing tests for new features or bug fixes (P0)
  • Convention Violations — Tests exist but violate testing standards (severity per table above)
  • Not Applicable — Changes are docs/chore/ci only, no tests needed

Step 5: Read Review Results

After code-quality completes, read the generated files:

# Find today's review directory
REVIEW_DIR="codereviews/$(date +%Y%m%d)"

# Read the commit-list.md which contains the summary
cat "$REVIEW_DIR/commit-list.md"

Extract key findings:

  • Critical issues (P0)
  • High priority issues (P1)
  • Bad smell statistics
  • Action items

Merge testing review findings from Step 4 into the overall results.

Step 6: Generate PR Comment

Structure the review findings as a PR comment:

## Code Review: PR #<number>

### Summary
<Brief summary based on code-quality analysis>

### Key Findings

#### Critical Issues (P0)
<List from code-quality review AND testing review>

#### High Priority (P1)
<List from code-quality review AND testing review>

### Testing Review

#### Coverage
<For each new feature or bug fix, state whether tests exist>
- feat: <feature description><test file or "MISSING">
- fix: <fix description><regression test or "MISSING">

#### Convention Compliance
<List any violations found in Step 4c, with file:line references>

#### Testing Verdict: <Adequate / Insufficient Coverage / Convention Violations / Not Applicable>

### Bad Smell Analysis
<Statistics from code-quality review>

### Recommendations
<Action items from code-quality review AND testing review>

### Verdict
<LGTM / Changes Requested / Needs Discussion>

**Note:** If Testing Verdict is "Insufficient Coverage" or has P0 convention violations, the overall Verdict must be "Changes Requested".

---
*Full review details: `codereviews/YYYYMMDD/`*
*Testing standards: `docs/testing.md`*

Step 7: Post Comment

gh pr comment "$PR_NUMBER" --body "$REVIEW_CONTENT"

Display confirmation with comment URL.


Output Format

PR Review Complete

PR: #<number> - <title>
Author: <author>
URL: <url>

Code quality analysis completed.
Testing review completed.
Review files: codereviews/YYYYMMDD/

Review posted as comment.
Comment URL: <comment-url>

Best Practices

  1. Use code-quality for analysis - Don't duplicate review logic
  2. Use testing docs for test review - Reference docs/testing.md and docs/testing/ guides as the source of truth for testing standards
  3. Treat missing tests as blockers - New features and bug fixes without tests are P0 Critical, not suggestions
  4. Summarize for PR comment - Keep comment concise, reference files for details
  5. Be constructive - Focus on improvements, not criticism
  6. Prioritize - Distinguish between blockers and nice-to-haves

Your goal is to leverage the comprehensive code-quality analysis, enforce testing coverage and conventions, and present findings effectively as a PR comment.

Weekly Installs
1
First Seen
Feb 28, 2026
Installed on
claude-code1