SuperAPI AI Directory

triage-pr

Coding & development

View repository

Updated 10-15 22:37

About this skill

Triage PR

Fetch, categorize, and address pull request review comments in priority order.

Prerequisites

Fail immediately with an explicit error if any check fails: gh installed (command -v gh), authenticated (gh auth status), inside a git repo (git rev-parse --is-inside-work-tree).

Step 1 -- Identify PR

Use $ARGUMENTS as the PR number if provided. Otherwise detect from the current branch via gh pr view --json number --jq '.number'. Stop if no PR is found, or if the PR state is CLOSED or MERGED.

Step 2 -- Fetch

Get owner/repo: gh repo view --json owner,name --jq '"\(.owner.login)/\(.name)"'

Run all fetches in parallel:

  • PR metadata: gh pr view <num> --json title,body,baseRefName,headRefName,state,reviewDecision
  • Inline comments: gh api repos/{owner}/{repo}/pulls/{num}/comments
  • Top-level reviews: gh api repos/{owner}/{repo}/pulls/{num}/reviews
  • Resolved status (critical -- without this, resolved threads cannot be skipped):
gh api graphql -f query='
  query($owner:String!,$repo:String!,$num:Int!){
    repository(owner:$owner,name:$repo){
      pullRequest(number:$num){
        reviewThreads(first:100){nodes{id isResolved
          comments(first:10){nodes{id body author{login} path line createdAt}}
        }}
      }
    }
  }' -f owner=OWNER -f repo=REPO -F num=NUM

Discard all threads where isResolved is true. Only unresolved threads proceed.

Step 3 -- Categorize

For each unresolved comment, record: reviewer, file:line, full text, category. Assign exactly one category (first match wins):

Category Signals
BLOCKER Required change, bug, security issue, "must", "please fix", CHANGES_REQUESTED reviewer
QUESTION Asks for clarification, "why", "can you explain", "what about", substantive ?
SUGGESTION Optional improvement, "consider", "maybe", "might be nice", "what if", "could we"
NITPICK Minor style, starts with "nit:", "nitpick", "minor", formatting-only

Default to SUGGESTION if no pattern matches.

Step 4 -- Address in Order

Work through BLOCKERs, then QUESTIONs, then SUGGESTIONs, then NITPICKs.

  • BLOCKERs: Read the file and lines. Show the planned fix. WAIT for user confirmation before editing.
  • QUESTIONs: Draft reply text. Print it. Do NOT post via gh without user permission.
  • SUGGESTIONs/NITPICKs: Apply if quick and correct. Otherwise mark SKIPPED with reason.

Track each comment as: FIXED, DRAFTED, SKIPPED, or PENDING.

Step 5 -- Summary

| # | Category   | Reviewer | File:Line          | Status  |
|---|------------|----------|--------------------|---------|
| 1 | BLOCKER    | alice    | src/auth.ts:42     | FIXED   |
| 2 | QUESTION   | bob      | lib/utils.go:118   | DRAFTED |
| 3 | SUGGESTION | alice    | src/auth.ts:55     | SKIPPED |
| 4 | NITPICK    | carol    | README.md:12       | FIXED   |

Idempotency

Safe to re-run. Fetches fresh state each time. Resolved threads are automatically skipped via the GraphQL isResolved check.

Arguments

$ARGUMENTS -- PR number. If omitted, detected from the current branch.