plugins/sdlc/skills/pr-review/SKILL.md
Conduct comprehensive PR review from multiple perspectives (PM, Developer, QA, Security)
npx skillsauth add jmagly/aiwg pr-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.
PR Link/Number: $ARGUMENTS
Instructions: Execute each task in the order given to conduct a thorough code review. Post the review back to the PR on the resolved primary remote (see "Provider Resolution" below). Important: The future is now—any improvements or "future" recommendations must be addressed immediately.
Don't assume GitHub. The PR API to use is determined by the project's .aiwg/aiwg.config remotes.primary (#994):
import { readAiwgConfig, resolveRemotes, resolveRemoteProvider } from 'aiwg/config';
const cfg = await readAiwgConfig(projectDir);
const resolved = resolveRemotes(cfg?.remotes); // primary defaults to "origin"
const url = exec(`git remote get-url ${resolved.primary}`).trim();
const host = resolveRemoteProvider(url); // 'github' | 'gitea' | 'gitlab' | 'unknown'
host === 'github' → gh pr view, gh pr review, gh apihost === 'gitea' → Gitea MCP pull_request_* tools or tea CLIhost === 'gitlab' → glab CLIhost === 'unknown' → ask the operator which provider to use; don't guessWhen the operator passes a full PR URL (<pr_link_or_number>), parse the host out of the URL and prefer that — the URL is the operator's explicit choice.
When approving and merging, consult .aiwg/aiwg.config delivery via resolveDelivery(). The resolved policy controls how the merge happens:
| Field | Effect on this skill |
|-------|----------------------|
| merge_style (default rebase-merge) | Pass through to the PR API on merge. Allowed: rebase-merge / squash / merge / fast-forward-only |
| delete_branch_on_merge (default true) | Pass delete_branch: true to the merge call so the feature branch is cleaned up |
| require_ci_green (default true) | Block approval until CI is green on the PR's head SHA. Don't approve a red PR even if the diff looks fine. |
| require_signed_commits (default false) | When true, reject the PR if any commit on the head ref is unsigned |
When no delivery block is configured, resolveDelivery(undefined) returns the conservative defaults — same behavior this skill exhibits today.
<pr_link_or_number> - PR URL or PR number on the resolved primary remote (required)--interactive - Prompt for confirmation before posting review--guidance "text" - Additional review guidance or focus areas--regression-gate - Run regression check before merge approval (default: true)--allow-regression - Allow merge even if regressions detected (requires justification)Default behavior: Regression gate is enabled by default. To disable: --regression-gate=false
Objective: Assess from a product management perspective, focusing on:
Action: Provide clear directives on how to ensure maximum user and business impact. All "future" suggestions must be implemented now.
Objective: Evaluate the code thoroughly from a senior lead engineer perspective:
Action: Leave a concise yet complete review comment, ensuring all improvements happen immediately—no deferrals.
Objective: Verify the overall quality, testing strategy, and reliability of the solution:
Action: Provide a detailed QA assessment, insisting any "future" improvements be completed right away.
Objective: Ensure robust security practices and compliance:
Action: Provide security assessment with immediate remediation for any findings. No deferring security issues.
Objective: Detect behavioral regressions introduced by this PR
When: Runs automatically before merge approval (unless --regression-gate=false)
Process:
/regression-check \
--baseline <base-branch> \
--scope changed-files \
--format summary
--allow-regression)Output: Regression analysis posted as PR comment
| Regression Severity | Default Action | With --allow-regression |
|---------------------|----------------|---------------------------|
| None | Approve merge | Approve merge |
| Minor (warnings) | Approve with note | Approve with note |
| Major (behavior change) | Request changes | Approve with documented risk |
| Critical (test failures) | BLOCK merge | Approve with justification required |
## 🚨 Regression Gate: BLOCKED
**Baseline**: main (commit abc123)
**Changed Files**: 5 files
**Tests Affected**: 12 tests
### Critical Regressions
1. **test/unit/auth/login.test.ts::validateCredentials**
- Status: PASS → FAIL
- Error: "Expected 200, received 401"
- Impact: Breaks user authentication
- **Action**: FIX REQUIRED BEFORE MERGE
2. **test/integration/api/payments.test.ts::processPayment**
- Status: PASS → FAIL
- Error: "Transaction timeout"
- Impact: Payment processing broken
- **Action**: FIX REQUIRED BEFORE MERGE
### Verdict
❌ **MERGE BLOCKED** - Critical regressions must be resolved.
To override (not recommended): Use `--allow-regression` and provide justification in PR description.
See full report: [regression-2026-01-25T15-30-00Z.md]
## ⚠️ Regression Gate: WARNING
**Baseline**: main (commit abc123)
**Changed Files**: 3 files
**Tests Affected**: 8 tests
### Behavior Changes Detected
1. **test/integration/api/users.test.ts::createUser**
- Performance: 150ms → 450ms (+200%)
- Severity: MAJOR
- **Action**: INVESTIGATE before merge
### Verdict
⚠️ **MERGE WITH CAUTION** - Behavior changes detected but not blocking.
Recommendation: Review performance regression and document if intentional.
See full report: [regression-2026-01-25T15-30-00Z.md]
## ✅ Regression Gate: PASSED
**Baseline**: main (commit abc123)
**Changed Files**: 2 files
**Tests Affected**: 5 tests
**Result**: All tests passing, no behavioral changes detected
### Verdict
✅ **REGRESSION CHECK PASSED** - Safe to merge from regression perspective.
Integration with Regression Analyst:
For deep regression analysis or complex regressions, escalate to @$AIWG_ROOT/agentic/code/frameworks/sdlc-complete/agents/regression-analyst.md for:
Objective: Synthesize all review feedback into actionable summary
Required Sections:
## PR Review Summary
**Verdict**: REQUEST CHANGES
### Critical Issues (MUST FIX)
1. ❌ **Regression**: Authentication tests failing (see regression report)
2. ❌ **Security**: API key exposed in config file (line 42)
### Major Issues (SHOULD FIX)
1. ⚠️ **Performance**: Database query in loop (lines 156-178)
2. ⚠️ **Test Coverage**: New function missing unit tests
### Minor Issues (NICE TO HAVE)
1. 💡 **Code Style**: Inconsistent variable naming
2. 💡 **Documentation**: JSDoc comments missing
### Regression Status
❌ **2 CRITICAL REGRESSIONS DETECTED** - See detailed report above
### Merge Recommendation
🚫 **BLOCK MERGE**
**Rationale**:
- Critical regressions break authentication flow
- Security vulnerability exposes API credentials
- Must be resolved before merge
**Next Steps**:
1. Fix authentication regression
2. Remove exposed API key
3. Re-run regression check
4. Address major issues or create follow-up tickets
After completing review:
regression-risk if regressions detectedsecurity-issue if vulnerabilities foundneeds-tests if coverage insufficientperformance-concern if performance issues founddata-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.