[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DF64R25FD595P1J3CTZZ5T":3,"skill-same:01M6DF64R25FD595P1J3CTZZ5T":60},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":14,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":39,"install":40,"resources":53},"01M6DF64R25FD595P1J3CTZZ5T","handling-pr-comments",null,"Address PR review feedback systematically — fetch inline comments, review bodies, handle outside-diff-range comments, resolve threads with proper attribution","Prekzursil\u002Fagent-skills-toolchain","Prekzursil","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54636077?v=4","01M6DACZ1PCQHD99SCR1YXG28B","Andrei Mihai Visalon","01M6DACZ670WZF535V3WYYSS4Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fhandling-pr-comments\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"pr","pr comments","handling pr comments","review","pr review","attribution","feedback","address pr review","fetch","diff","2026-11-10 10:12:30",false,"---\nname: handling-pr-comments\ndescription: Address PR review feedback systematically — fetch inline comments, review bodies, handle outside-diff-range comments, resolve threads with proper attribution\n---\n\n# handling-pr-comments\n\nUse when addressing PR review feedback, after receiving review comments from CodeRabbit, Cursor, or human reviewers - ensures systematic responses to each comment thread with proper attribution and thread resolution.\n\n## When to Activate\n\nActivate this skill when ANY of these conditions are true:\n\n- User asks to \"address PR comments\" or \"handle review feedback\"\n- User mentions CodeRabbit, Cursor bot, or reviewer comments\n- User is working on fixes requested in a PR review\n- User asks to \"check PR comments\" or \"respond to reviewers\"\n- After making fixes to address review feedback\n\n## CRITICAL: The Complete Workflow\n\n**Most developers forget steps 4-6. This skill ensures they happen.**\n\n### Phase 1: Discover and Filter Comments\n\nRun the filtering script to identify actionable comments:\n\n```bash\n# Filter actionable vs non-actionable comments\nbin\u002Fpr-comments-filter.sh \u003CPR_NUMBER>\n```\n\nThis script:\n\n- Filters out non-actionable comments (confirmations, acknowledgments, fingerprinting)\n- Categorizes actionable comments by priority (Critical → Low)\n- Shows comment IDs and details for processing\n\n### Phase 2: Triage Actionable Comments\n\nThe filter script categorizes by priority:\n\n| Priority        | Marker                                                   | Action           |\n| --------------- | -------------------------------------------------------- | ---------------- |\n| CRITICAL        | `_⚠️ Potential issue_ \\| _? Critical_`                  | Fix immediately  |\n| HIGH            | `_⚠️ Potential issue_ \\| _? Major_`                     | Fix before merge |\n| MEDIUM          | `_? Minor_` or `_?️ Refactor suggestion_ \\| _? Major_` | Should fix       |\n| LOW             | `_? Trivial_` \u002F `_? Nitpick_`                          | Fix if quick     |\n| HUMAN           | Non-bot comments                                         | Always process   |\n\nFor each actionable comment, further categorize as:\n\n1. **Bug\u002FIssue** - Must fix\n2. **Enhancement** - Should fix\n3. **Nitpick** - Nice to fix\n4. **Question** - Needs clarification\n5. **Intentional** - Decline with explanation\n6. **Out-of-Scope** - See Phase 2b\n\n### Phase 2b: Extract \"Outside Diff Range\" Comments from Review Bodies (CRITICAL)\n\n**COMMONLY MISSED**: CodeRabbit posts \"Outside diff range\" comments in the **review body**, not as inline threads. These are actionable feedback that MUST be addressed.\n\n```bash\n# Extract Outside diff range comments from review bodies\nPR_NUMBER=\u003Cnumber>\nOWNER=$(gh repo view --json owner -q .owner.login)\nREPO_NAME=$(gh repo view --json name -q .name)\n\necho \"=== OUTSIDE DIFF RANGE COMMENTS ===\"\ngh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Freviews\" --paginate | \\\n  jq -r '.[] | select(.body | test(\"Outside diff range\"; \"i\")) |\n    \"Review ID: \\(.id)\\n\\(.body)\\n---\"'\n```\n\n**These comments are NOT in threads** - they cannot be replied to inline. You must:\n\n1. Parse the file paths and line numbers from the review body\n2. Address the feedback in your code\n3. Commit and push\n4. Leave a general PR comment acknowledging you addressed them\n\n### Phase 2c: Handle Other Out-of-Scope Comments\n\nRun the out-of-scope detection script:\n\n```bash\n# Detect out-of-scope comments\nbin\u002Fpr-comments-out-of-scope.sh \u003CPR_NUMBER>\n```\n\nThis script detects comments that:\n\n- Reference lines NOT in the PR diff\n- Are marked \"outdated\" by GitHub (GraphQL `isOutdated` flag)\n- Are general PR discussion comments\n\n**IMPORTANT**: Treat out-of-scope comments as **IN SCOPE** by default.\n\n#### Evaluation Process\n\nUse **ultrathink** to evaluate each out-of-scope comment:\n\n```text\nultrathink: Analyze this out-of-scope review comment:\n- What is the reviewer asking for?\n- How complex is this change? (lines of code, files affected)\n- Does it require refactoring other systems?\n- Can I complete this in under 30 minutes?\n- Are there any risks or dependencies?\n\nRecommend: FIX_NOW or CREATE_ISSUE\n```\n\n#### Decision Matrix\n\n| Criteria                                      | Action                                    |\n| --------------------------------------------- | ----------------------------------------- |\n| Simple fix (\u003C 30 min, \u003C 3 files, no refactor) | **FIX_NOW** - Make the change immediately |\n| Medium complexity (unclear scope)             | **ASK_USER** - Present options            |\n| Major refactor (multiple systems, risky)      | **CREATE_ISSUE** - Document for follow-up |\n\n#### For FIX_NOW\n\n1. Make the fix\n2. Commit with descriptive message\n3. Push to the PR branch\n4. Reply: \"Fixed in commit \u003Chash>. This was outside the original PR scope but straightforward to address.\"\n5. Resolve the thread\n\n#### For CREATE_ISSUE\n\n1. Create GitHub issue with context\n2. Reply: \"Created issue #\u003Cnumber> to track this.\"\n3. Resolve the thread\n\n### Phase 3: Make Fixes\n\nFix the actual code issues. Commit and push.\n\n### Phase 4: RESPOND TO EACH THREAD (Often Forgotten!)\n\n**After pushing fixes, respond to EACH comment thread individually:**\n\n```bash\nPR_NUMBER=\u003Cnumber>\nOWNER=$(gh repo view --json owner -q .owner.login)\nREPO_NAME=$(gh repo view --json name -q .name)\nCURRENT_USER=$(gh api user -q '.login')\nCOMMENT_ID=\u003Cid-from-filter-script>\n\ngh api \"\u002Frepos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Fcomments\u002F$COMMENT_ID\u002Freplies\" \\\n  -X POST \\\n  -f body=\"Fixed in commit $(git rev-parse --short HEAD).\n\n*(Response by Claude on behalf of @$CURRENT_USER)*\"\n```\n\n### Phase 5: Resolve ALL Threads\n\n**Every thread must be resolved after responding.** Use GraphQL to resolve:\n\n```bash\nTHREAD_ID=\"PRRT_kwDOK-xA485...\"  # From GraphQL query\n\ngh api graphql -f query='mutation {\n  resolveReviewThread(input: {threadId: \"'\"$THREAD_ID\"'\"}) {\n    thread { id isResolved }\n  }\n}'\n```\n\n### Phase 6: Handle Threads That Can't Be Resolved\n\n1. **Query the comment author** asking for specific follow-up\n2. **Do NOT leave unresolved** - either resolve after responding, or ask for clarification\n3. If waiting for author response, mark as needing user input\n\n### Phase 7: Post-Push Iteration Check (MANDATORY)\n\n**THE #1 WORKFLOW FAILURE: Stopping after Phase 5-6 without checking for NEW comments.**\n\nAutomated reviewers (CodeRabbit, Cursor) analyze EVERY commit you push. They post NEW comments during\u002Fafter their check runs.\n\n```bash\n# STEP 1: Wait for ALL CI\u002FCD checks to complete\nPR_NUMBER=\u003Cnumber>\necho \"Waiting for CI\u002FCD checks to complete...\"\ngh pr checks $PR_NUMBER --watch\n\n# STEP 2: Check for NEW comments since your last response\nOWNER=$(gh repo view --json owner -q .owner.login)\nREPO_NAME=$(gh repo view --json name -q .name)\nCURRENT_USER=$(gh api user -q '.login')\n\n# Get timestamp of your last reply\nLAST_REPLY=$(gh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Fcomments\" --paginate | \\\n  jq -r \"[.[] | select(.user.login == \\\"$CURRENT_USER\\\") | select(.in_reply_to_id)] | sort_by(.created_at) | last | .created_at\")\n\n# Handle case where user has no previous replies\nif [ -z \"$LAST_REPLY\" ] || [ \"$LAST_REPLY\" = \"null\" ]; then\n  echo \"No previous replies found - checking all comments as new\"\n  LAST_REPLY=\"1970-01-01T00:00:00Z\"  # Unix epoch - treat all comments as new\nfi\n\n# Check for new comments after that time\nNEW_COUNT=$(gh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Fcomments\" --paginate | \\\n  jq -r --arg time \"$LAST_REPLY\" '[.[] | select(.in_reply_to_id == null) | select(.created_at > $time)] | length')\n\n# STEP 3: Also check review bodies for new \"Outside diff range\" comments\nNEW_REVIEWS=$(gh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Freviews\" --paginate | \\\n  jq -r --arg time \"$LAST_REPLY\" '[.[] | select(.submitted_at > $time) | select(.body | test(\"Outside diff range\"; \"i\"))] | length')\n\nTOTAL_NEW=$((NEW_COUNT + NEW_REVIEWS))\n\nif [ \"$TOTAL_NEW\" -gt 0 ]; then\n  echo \"$NEW_COUNT NEW INLINE COMMENT(S) + $NEW_REVIEWS NEW REVIEW BODY COMMENT(S) DETECTED\"\n  echo \"ACTION: Return to Phase 1 and iterate\"\nelse\n  echo \"No new comments - safe to proceed to verification\"\nfi\n```\n\n**If NEW comments found**: Return to Phase 1. DO NOT proceed to verification.\n\n**Iteration Loop**:\n\n```text\nREPEAT:\n  Phase 1: Discover comments\n  Phase 2: Triage\n  Phase 3: Fix\n  Phase 4: Respond\n  Phase 5: Resolve threads\n  Phase 6: Handle unclear threads\n  Phase 7: Check for NEW comments after push\n\n  IF new comments found → GO TO Phase 1\n  IF no new comments → proceed to verification\n```\n\n## Response Templates\n\n### For Fixes Made\n\n```text\nFixed in commit \u003Chash>.\n\n*(Response by Claude on behalf of @username)*\n```\n\n### For Acknowledged Nitpicks\n\n```text\nAcknowledged - this is a valid suggestion. Deferring to a future cleanup PR to keep this PR focused.\n\n*(Response by Claude on behalf of @username)*\n```\n\n### For Intentional Decisions\n\n```text\nThis is intentional because [reason]. The [thing] is designed to [explanation].\n\n*(Response by Claude on behalf of @username)*\n```\n\n## Mandatory Pre-Completion Check\n\n**BLOCKING: You MUST run this script and show its output before declaring ANY PR ready:**\n\n```bash\nbin\u002Fpr-comments-check.sh \u003CPR_NUMBER>\n```\n\nThis script:\n\n- Returns exit code 0 if all comments addressed\n- Returns exit code 1 if ANY unaddressed comments exist\n- Shows status for each comment\n\n**If the script shows ANY unaddressed comments, you are NOT done.** Address each unaddressed comment:\n\n1. If actionable → Fix it and reply confirming the fix\n2. If out-of-scope → Reply explaining deferral (create issue if needed)\n3. If disagree → Reply with reasoning\n4. **NEVER ignore silently**\n\n**You must show the script output in your response** as proof that all comments are addressed. Example:\n\n```\nChecking PR #908 for unaddressed comments...\n\n=== Inline Code Review Comments ===\nComment 123 by cursor[bot] - 1 reply(s) [OK]\nComment 456 by coderabbitai[bot] - 1 reply(s) [OK]\n\n=== General PR Discussion Comments ===\ncoderabbitai[bot]: \u003C!-- summary -->...\n\nAll inline review comments have been addressed\n```\n\nA PR is NOT ready until this script returns success.\n\n## Verification Checklist\n\nBefore declaring PR comments handled:\n\n- [ ] Ran `bin\u002Fpr-comments-filter.sh \u003CPR>` to identify actionable comments\n- [ ] **CRITICAL**: Extracted \"Outside diff range\" comments from review bodies (Phase 2b)\n- [ ] Ran `bin\u002Fpr-comments-out-of-scope.sh \u003CPR>` to find other out-of-scope feedback\n- [ ] Code fixes have been made and pushed\n- [ ] Each comment thread has a response posted\n- [ ] \"Outside diff range\" comments addressed with a general PR comment\n- [ ] **POST-PUSH CHECK**: Waited for CI\u002FCD to complete, checked for NEW comments\n- [ ] **NO new comments found** after the post-push check (iterate if found)\n- [ ] **ALL threads have been resolved** (no unresolved threads remaining)\n- [ ] All responses include proper attribution\n- [ ] Out-of-scope comments have been either fixed OR have GitHub issues created\n\n**DO NOT skip the \"Outside diff range\" check (Phase 2b) - this is the #2 cause of incomplete PR handling.**\n\n## Reference\n\nFor the complete detailed workflow with all edge cases and troubleshooting, see:\nthe `\u002Fmetaswarm:handle-pr-comments` command\n","# handling-pr-comments\n\nUse when addressing PR review feedback, after receiving review comments from CodeRabbit, Cursor, or human reviewers - ensures systematic responses to each comment thread with proper attribution and thread resolution.\n\n## When to Activate\n\nActivate this skill when ANY of these conditions are true:\n\n- User asks to \"address PR comments\" or \"handle review feedback\"\n- User mentions CodeRabbit, Cursor bot, or reviewer comments\n- User is working on fixes requested in a PR review\n- User asks to \"check PR comments\" or \"respond to reviewers\"\n- After making fixes to address review feedback\n\n## CRITICAL: The Complete Workflow\n\n**Most developers forget steps 4-6. This skill ensures they happen.**\n\n### Phase 1: Discover and Filter Comments\n\nRun the filtering script to identify actionable comments:\n\n```bash\n# Filter actionable vs non-actionable comments\nbin\u002Fpr-comments-filter.sh \u003CPR_NUMBER>\n```\n\nThis script:\n\n- Filters out non-actionable comments (confirmations, acknowledgments, fingerprinting)\n- Categorizes actionable comments by priority (Critical → Low)\n- Shows comment IDs and details for processing\n\n### Phase 2: Triage Actionable Comments\n\nThe filter script categorizes by priority:\n\n| Priority        | Marker                                                   | Action           |\n| --------------- | -------------------------------------------------------- | ---------------- |\n| CRITICAL        | `_⚠️ Potential issue_ \\| _? Critical_`                  | Fix immediately  |\n| HIGH            | `_⚠️ Potential issue_ \\| _? Major_`                     | Fix before merge |\n| MEDIUM          | `_? Minor_` or `_?️ Refactor suggestion_ \\| _? Major_` | Should fix       |\n| LOW             | `_? Trivial_` \u002F `_? Nitpick_`                          | Fix if quick     |\n| HUMAN           | Non-bot comments                                         | Always process   |\n\nFor each actionable comment, further categorize as:\n\n1. **Bug\u002FIssue** - Must fix\n2. **Enhancement** - Should fix\n3. **Nitpick** - Nice to fix\n4. **Question** - Needs clarification\n5. **Intentional** - Decline with explanation\n6. **Out-of-Scope** - See Phase 2b\n\n### Phase 2b: Extract \"Outside Diff Range\" Comments from Review Bodies (CRITICAL)\n\n**COMMONLY MISSED**: CodeRabbit posts \"Outside diff range\" comments in the **review body**, not as inline threads. These are actionable feedback that MUST be addressed.\n\n```bash\n# Extract Outside diff range comments from review bodies\nPR_NUMBER=\u003Cnumber>\nOWNER=$(gh repo view --json owner -q .owner.login)\nREPO_NAME=$(gh repo view --json name -q .name)\n\necho \"=== OUTSIDE DIFF RANGE COMMENTS ===\"\ngh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Freviews\" --paginate | \\\n  jq -r '.[] | select(.body | test(\"Outside diff range\"; \"i\")) |\n    \"Review ID: \\(.id)\\n\\(.body)\\n---\"'\n```\n\n**These comments are NOT in threads** - they cannot be replied to inline. You must:\n\n1. Parse the file paths and line numbers from the review body\n2. Address the feedback in your code\n3. Commit and push\n4. Leave a general PR comment acknowledging you addressed them\n\n### Phase 2c: Handle Other Out-of-Scope Comments\n\nRun the out-of-scope detection script:\n\n```bash\n# Detect out-of-scope comments\nbin\u002Fpr-comments-out-of-scope.sh \u003CPR_NUMBER>\n```\n\nThis script detects comments that:\n\n- Reference lines NOT in the PR diff\n- Are marked \"outdated\" by GitHub (GraphQL `isOutdated` flag)\n- Are general PR discussion comments\n\n**IMPORTANT**: Treat out-of-scope comments as **IN SCOPE** by default.\n\n#### Evaluation Process\n\nUse **ultrathink** to evaluate each out-of-scope comment:\n\n```text\nultrathink: Analyze this out-of-scope review comment:\n- What is the reviewer asking for?\n- How complex is this change? (lines of code, files affected)\n- Does it require refactoring other systems?\n- Can I complete this in under 30 minutes?\n- Are there any risks or dependencies?\n\nRecommend: FIX_NOW or CREATE_ISSUE\n```\n\n#### Decision Matrix\n\n| Criteria                                      | Action                                    |\n| --------------------------------------------- | ----------------------------------------- |\n| Simple fix (\u003C 30 min, \u003C 3 files, no refactor) | **FIX_NOW** - Make the change immediately |\n| Medium complexity (unclear scope)             | **ASK_USER** - Present options            |\n| Major refactor (multiple systems, risky)      | **CREATE_ISSUE** - Document for follow-up |\n\n#### For FIX_NOW\n\n1. Make the fix\n2. Commit with descriptive message\n3. Push to the PR branch\n4. Reply: \"Fixed in commit \u003Chash>. This was outside the original PR scope but straightforward to address.\"\n5. Resolve the thread\n\n#### For CREATE_ISSUE\n\n1. Create GitHub issue with context\n2. Reply: \"Created issue #\u003Cnumber> to track this.\"\n3. Resolve the thread\n\n### Phase 3: Make Fixes\n\nFix the actual code issues. Commit and push.\n\n### Phase 4: RESPOND TO EACH THREAD (Often Forgotten!)\n\n**After pushing fixes, respond to EACH comment thread individually:**\n\n```bash\nPR_NUMBER=\u003Cnumber>\nOWNER=$(gh repo view --json owner -q .owner.login)\nREPO_NAME=$(gh repo view --json name -q .name)\nCURRENT_USER=$(gh api user -q '.login')\nCOMMENT_ID=\u003Cid-from-filter-script>\n\ngh api \"\u002Frepos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Fcomments\u002F$COMMENT_ID\u002Freplies\" \\\n  -X POST \\\n  -f body=\"Fixed in commit $(git rev-parse --short HEAD).\n\n*(Response by Claude on behalf of @$CURRENT_USER)*\"\n```\n\n### Phase 5: Resolve ALL Threads\n\n**Every thread must be resolved after responding.** Use GraphQL to resolve:\n\n```bash\nTHREAD_ID=\"PRRT_kwDOK-xA485...\"  # From GraphQL query\n\ngh api graphql -f query='mutation {\n  resolveReviewThread(input: {threadId: \"'\"$THREAD_ID\"'\"}) {\n    thread { id isResolved }\n  }\n}'\n```\n\n### Phase 6: Handle Threads That Can't Be Resolved\n\n1. **Query the comment author** asking for specific follow-up\n2. **Do NOT leave unresolved** - either resolve after responding, or ask for clarification\n3. If waiting for author response, mark as needing user input\n\n### Phase 7: Post-Push Iteration Check (MANDATORY)\n\n**THE #1 WORKFLOW FAILURE: Stopping after Phase 5-6 without checking for NEW comments.**\n\nAutomated reviewers (CodeRabbit, Cursor) analyze EVERY commit you push. They post NEW comments during\u002Fafter their check runs.\n\n```bash\n# STEP 1: Wait for ALL CI\u002FCD checks to complete\nPR_NUMBER=\u003Cnumber>\necho \"Waiting for CI\u002FCD checks to complete...\"\ngh pr checks $PR_NUMBER --watch\n\n# STEP 2: Check for NEW comments since your last response\nOWNER=$(gh repo view --json owner -q .owner.login)\nREPO_NAME=$(gh repo view --json name -q .name)\nCURRENT_USER=$(gh api user -q '.login')\n\n# Get timestamp of your last reply\nLAST_REPLY=$(gh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Fcomments\" --paginate | \\\n  jq -r \"[.[] | select(.user.login == \\\"$CURRENT_USER\\\") | select(.in_reply_to_id)] | sort_by(.created_at) | last | .created_at\")\n\n# Handle case where user has no previous replies\nif [ -z \"$LAST_REPLY\" ] || [ \"$LAST_REPLY\" = \"null\" ]; then\n  echo \"No previous replies found - checking all comments as new\"\n  LAST_REPLY=\"1970-01-01T00:00:00Z\"  # Unix epoch - treat all comments as new\nfi\n\n# Check for new comments after that time\nNEW_COUNT=$(gh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Fcomments\" --paginate | \\\n  jq -r --arg time \"$LAST_REPLY\" '[.[] | select(.in_reply_to_id == null) | select(.created_at > $time)] | length')\n\n# STEP 3: Also check review bodies for new \"Outside diff range\" comments\nNEW_REVIEWS=$(gh api \"repos\u002F$OWNER\u002F$REPO_NAME\u002Fpulls\u002F$PR_NUMBER\u002Freviews\" --paginate | \\\n  jq -r --arg time \"$LAST_REPLY\" '[.[] | select(.submitted_at > $time) | select(.body | test(\"Outside diff range\"; \"i\"))] | length')\n\nTOTAL_NEW=$((NEW_COUNT + NEW_REVIEWS))\n\nif [ \"$TOTAL_NEW\" -gt 0 ]; then\n  echo \"$NEW_COUNT NEW INLINE COMMENT(S) + $NEW_REVIEWS NEW REVIEW BODY COMMENT(S) DETECTED\"\n  echo \"ACTION: Return to Phase 1 and iterate\"\nelse\n  echo \"No new comments - safe to proceed to verification\"\nfi\n```\n\n**If NEW comments found**: Return to Phase 1. DO NOT proceed to verification.\n\n**Iteration Loop**:\n\n```text\nREPEAT:\n  Phase 1: Discover comments\n  Phase 2: Triage\n  Phase 3: Fix\n  Phase 4: Respond\n  Phase 5: Resolve threads\n  Phase 6: Handle unclear threads\n  Phase 7: Check for NEW comments after push\n\n  IF new comments found → GO TO Phase 1\n  IF no new comments → proceed to verification\n```\n\n## Response Templates\n\n### For Fixes Made\n\n```text\nFixed in commit \u003Chash>.\n\n*(Response by Claude on behalf of @username)*\n```\n\n### For Acknowledged Nitpicks\n\n```text\nAcknowledged - this is a valid suggestion. Deferring to a future cleanup PR to keep this PR focused.\n\n*(Response by Claude on behalf of @username)*\n```\n\n### For Intentional Decisions\n\n```text\nThis is intentional because [reason]. The [thing] is designed to [explanation].\n\n*(Response by Claude on behalf of @username)*\n```\n\n## Mandatory Pre-Completion Check\n\n**BLOCKING: You MUST run this script and show its output before declaring ANY PR ready:**\n\n```bash\nbin\u002Fpr-comments-check.sh \u003CPR_NUMBER>\n```\n\nThis script:\n\n- Returns exit code 0 if all comments addressed\n- Returns exit code 1 if ANY unaddressed comments exist\n- Shows status for each comment\n\n**If the script shows ANY unaddressed comments, you are NOT done.** Address each unaddressed comment:\n\n1. If actionable → Fix it and reply confirming the fix\n2. If out-of-scope → Reply explaining deferral (create issue if needed)\n3. If disagree → Reply with reasoning\n4. **NEVER ignore silently**\n\n**You must show the script output in your response** as proof that all comments are addressed. Example:\n\n```\nChecking PR #908 for unaddressed comments...\n\n=== Inline Code Review Comments ===\nComment 123 by cursor[bot] - 1 reply(s) [OK]\nComment 456 by coderabbitai[bot] - 1 reply(s) [OK]\n\n=== General PR Discussion Comments ===\ncoderabbitai[bot]: \u003C!-- summary -->...\n\nAll inline review comments have been addressed\n```\n\nA PR is NOT ready until this script returns success.\n\n## Verification Checklist\n\nBefore declaring PR comments handled:\n\n- [ ] Ran `bin\u002Fpr-comments-filter.sh \u003CPR>` to identify actionable comments\n- [ ] **CRITICAL**: Extracted \"Outside diff range\" comments from review bodies (Phase 2b)\n- [ ] Ran `bin\u002Fpr-comments-out-of-scope.sh \u003CPR>` to find other out-of-scope feedback\n- [ ] Code fixes have been made and pushed\n- [ ] Each comment thread has a response posted\n- [ ] \"Outside diff range\" comments addressed with a general PR comment\n- [ ] **POST-PUSH CHECK**: Waited for CI\u002FCD to complete, checked for NEW comments\n- [ ] **NO new comments found** after the post-push check (iterate if found)\n- [ ] **ALL threads have been resolved** (no unresolved threads remaining)\n- [ ] All responses include proper attribution\n- [ ] Out-of-scope comments have been either fixed OR have GitHub issues created\n\n**DO NOT skip the \"Outside diff range\" check (Phase 2b) - this is the #2 cause of incomplete PR handling.**\n\n## Reference\n\nFor the complete detailed workflow with all edge cases and troubleshooting, see:\nthe `\u002Fmetaswarm:handle-pr-comments` command\n",{"name":5,"description":7},"main","a298c929b6cbd662e1fce54302ce520d5ceea1a5","tools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fhandling-pr-comments","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain","https:\u002F\u002Fgithub.com\u002FPrekzursil","2026-11-02 14:30:57",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add Prekzursil\u002Fagent-skills-toolchain --skill handling-pr-comments",{"tool":46,"command":47},"bunx","bunx skills add Prekzursil\u002Fagent-skills-toolchain --skill handling-pr-comments",{"tool":49,"command":50},"pnpm","pnpm dlx skills add Prekzursil\u002Fagent-skills-toolchain --skill handling-pr-comments","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fhandling-pr-comments\u002FSKILL.md",true,[54],{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"agents\u002Fopenai.yaml","REFERENCE","参考文档",300,"https:\u002F\u002Fgithub.com\u002Fstrmt7\u002Fai_skills_collection_benchmarked\u002Fblob\u002Fmain\u002Fincluded\u002Fskills\u002Fby-category\u002Fcoding-refactoring-repository-automation\u002Fselected-structure-reference\u002Finvestor-materials\u002Fagents\u002Fopenai.yaml",[61,83,114,140,154,170],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":29},"01M6DF7D7478R55P46REYH4QAC","clarify-requirements","Resolve genuine pre-execution ambiguity by scanning repo context, generating 1-6 grounded options, and asking 1-3 focused questions via AskUserQuestion. NOT for mid-task use (injection risk); NOT when the goal is already unambiguous; use to disambiguate vague prompts before any file edits.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fworkspace-hooks\u002Fskills\u002Fclarify-requirements\u002FSKILL.md",[],[68,69,70,71,72,73,74,75,76,77,78,79,80,81,82],"clarify requirements","clarify","requirements","risk","options","task","prompts","goal","scanning","use","context","repo","injection","execution","file",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":94,"publishedAt":29},"01M6DF79CA4BHJS66J8EZDBPWJ","openmm-md","Run FREE, open-source, Windows-native GPU molecular dynamics via the openmm-md MCP (OpenMM + CUDA on the local NVIDIA GPU). Use for protein \u002F protein-ligand MD when you want a free stack or are on Windows without a Schrodinger license. Covers the full workflow (prepare, solvate, minimize, equilibrate, production, analyze, mmgbsa) AND an honest decision guide vs Schrodinger Desmond, including how to run Desmond legitimately on Linux or a cloud GPU with a real license. This is a deliberately LESSER free alternative and does NOT replace the schrodinger MCP tools. Do NOT use it to pick a free tool when a validated FEP+, WaterMap, IFD-MD, or Prime MM-GBSA result is actually required.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fmcp\u002Fopenmm-md-mcp\u002Fskill\u002Fopenmm-md\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[95,96,97,98,99,100,101,102,103,104,105,106,107,108,77,109,110,111,112,113],"openmm md","how","decision","pick","linux","analyze","tool","stack","open","NVIDIA","gpu","license","workflow","windows","free","molecular dynamics","local","do","MCP",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":126,"publishedAt":29},"01M6DF76C1MG85VEWP8VZCBNMN","visual-review","Take screenshots of web pages and UI using Playwright for visual review and iteration","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fvisual-review\u002FSKILL.md",[120,123],{"categoryNo":121,"categoryName":122,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":124,"categoryName":125,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000008","测试与质量",[22,127,128,129,130,131,132,133,134,135,96,136,137,138,139],"visual","visual review","pages","web","false","iteration","take","check","slides","ui","screenshot","playwright","screenshots",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":29},"01M6DF73AQVCBZKEN0YXEX9FXP","status","Diagnostic status report — shows metaswarm installation state, project setup, and potential issues","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstatus\u002FSKILL.md",[],[142,147,148,149,150,151,152,153],"setup","report","project","installation","project setup","issues","state",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":29},"01M6DF6X6C2XB0P6GX76P7TTYV","start","Use when starting work on any task, when the user mentions metaswarm, or when the user wants to begin tracked development work","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstart\u002FSKILL.md",[160],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[156,162,73,163,164,165,77,166,167,168,169],"start issue","issue","ready","work on issue","user","work","work on","development",{"skillNo":171,"name":147,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":29},"01M6DF6QMJ9AJKFKHHKRT005PQ","Interactive project setup — detects your project, configures metaswarm, writes project-local files","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fsetup\u002FSKILL.md",[],[147,149,111,176,151,177],"files","interactive"]