6.0 KiB
name, description
| name | description |
|---|---|
| pr-reviewer | Fetches PR review comments, analyzes requested changes, implements fixes, commits and pushes the resolution. Use after a reviewer has left comments on an open PR to close the feedback loop efficiently. |
PR Reviewer
Overview
This skill automates the response cycle for code review. When a reviewer leaves comments on a Pull Request, this skill fetches all pending feedback, categorizes issues by severity, implements fixes, and submits a follow-up commit with appropriate review response comments.
Prerequisites
- An open PR exists with pending review comments
- The local branch matches the PR's head branch
ghCLI is authenticated
Workflow
Step 1 — Fetch Review State
Retrieve all review comments and overall review status:
# Get overall review decisions
PAGER=cat GH_PAGER=cat gh pr view <PR-NUMBER> --json reviews,reviewDecision,headRefName \
--jq '{decision: .reviewDecision, reviews: [.reviews[] | {author: .author.login, state: .state, body: .body}]}'
# Get inline code comments (specific line comments)
PAGER=cat GH_PAGER=cat gh api repos/Fu-Jie/openwebui-extensions/pulls/<PR-NUMBER>/comments \
--jq '[.[] | {path: .path, line: .line, body: .body, author: .user.login, id: .id}]'
# Get general issue comments
PAGER=cat GH_PAGER=cat gh issue view <PR-NUMBER> --comments --json comments \
--jq '[.comments[] | {author: .author.login, body: .body}]'
Confirm the current local branch matches the PR head:
git branch --show-current
If mismatched, checkout the correct branch first.
Step 2 — Categorize Review Feedback
Group feedback into categories:
| Category | Examples | Action |
|---|---|---|
| Code Bug | Logic error, incorrect variable, broken condition | Fix code immediately |
| Style / Formatting | Indentation, naming convention, missing blank line | Fix code |
| Documentation | Missing i18n key, wrong version in README, typo | Fix docs |
| Design Question | Suggestion to restructure, alternative approach | Discuss with user before implementing |
| Nitpick / Optional | Minor style preferences reviewer marked as optional | Fix if quick; document if skipped |
| Blocking | Reviewer explicitly blocks merge | Must fix before proceeding |
Present the full categorized list to the user and confirm the resolution plan.
Step 3 — Implement Fixes
For each accepted fix:
- Read the affected file at the commented line for context:
sed -n '<line-5>,<line+10>p' <file-path> - Apply the fix using appropriate file edit tools
- After editing, verify the specific area looks correct
For code changes that might affect behavior:
- Check if tests exist:
ls tests/test_*.py - If tests exist, run them:
python -m pytest tests/ -v
For documentation fixes:
- If modifying README.md, check if
docs/mirror needs the same fix - Apply the same fix to both locations
Step 4 — Run Consistency Checks
After all fixes are applied:
# Version consistency (if any version files were touched)
python3 scripts/check_version_consistency.py
# Quick syntax check for Python files
python3 -m py_compile plugins/{type}/{name}/{name}.py && echo "✅ Syntax OK"
Step 5 — Stage and Commit
Create a new commit (do NOT amend if the branch has already been pushed, to avoid force-push):
git add -A
git status
Draft a Conventional Commits message for the fixup:
Format: fix(scope): address review feedback
Body should list what was fixed, referencing reviewer concerns:
fix(github-copilot-sdk): address review feedback from @reviewer
- Fix X per review comment on line Y of file Z
- Update README to clarify auth requirement
- Correct edge case in _parse_mcp_servers logic
git commit -m "<fixup commit message>"
Step 6 — Push the Fix Commit
git push origin $(git branch --show-current)
Force-push policy:
- Use
git push(non-force) by default - Only use
git push --force-with-leaseif:- The user explicitly requests it, AND
- The only change is an amended commit squash (cosmetic, no logic change)
- Never use
--force(without--lease)
Step 7 — Respond to Reviewers
For each addressed review comment, post a reply:
# Reply to inline comment
gh api repos/Fu-Jie/openwebui-extensions/pulls/<PR-NUMBER>/comments/<COMMENT-ID>/replies \
-X POST -f body="Fixed in commit <SHORT-SHA>. <Brief explanation of what was changed.>"
# General comment to summarize all fixes
gh issue comment <PR-NUMBER> --body "All review feedback addressed in commit <SHORT-SHA>:
- Fixed: <item 1>
- Fixed: <item 2>
Ready for re-review. 🙏"
Step 8 — Re-Request Review (Optional)
If the reviewer had submitted a CHANGES_REQUESTED review, request a new review after fixes:
PAGER=cat GH_PAGER=cat gh api repos/Fu-Jie/openwebui-extensions/pulls/<PR-NUMBER>/requested_reviewers \
-X POST -f reviewers[]='<reviewer-login>'
Decision Guide
When NOT to implement a suggestion immediately
- Design questions: "Should this be a separate class?" — Present to user for decision
- Optional nitpicks: Reviewer marked as
nit:— Ask user if they want to include it - Large refactors: If fix would require changing >50 lines, propose a separate follow-up issue instead
When to ask the user before proceeding
- Any fix involving behavioral changes to plugin logic
- Renaming Valve keys (breaking change — requires migration notes)
- Changes that affect the bilingual release notes already committed
Anti-Patterns to Avoid
- ❌ Do NOT
git commit --amendon a pushed commit without user approval for force-push - ❌ Do NOT silently skip a reviewer's comment; always acknowledge it (implement or explain why not)
- ❌ Do NOT use
--force(only--force-with-leasewhen absolutely necessary) - ❌ Do NOT make unrelated changes in the fixup commit; keep scope focused on review feedback
- ❌ Do NOT respond to reviewer comments in Chinese if the PR language context is English