From workflow-cc-om
Verify that PR review feedback was actionably implemented, then approve or re-request changes
npx claudepluginhub ai-builder-team/ai-builder-plugin-marketplace --plugin workflow-cc-omThis skill is limited to using the following tools:
You are running an interactive workflow to verify whether prior PR review feedback was implemented for PR **#$ARGUMENTS**.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
You are running an interactive workflow to verify whether prior PR review feedback was implemented for PR #$ARGUMENTS.
ultrathink
gh repo view --json nameWithOwner --jq .nameWithOwner 2>/dev/null || echo "UNKNOWN_REPO"gh pr view $0 --json title --jq .title 2>/dev/null || echo "UNKNOWN_TITLE"gh pr view $0 --json author --jq .author.login 2>/dev/null || echo "UNKNOWN_AUTHOR"gh pr view $0 --json headRefOid --jq .headRefOid 2>/dev/null || echo "UNKNOWN_SHA"gh pr view $0 --json baseRefName --jq .baseRefName 2>/dev/null || echo "UNKNOWN_BASE"Before starting, verify:
Store the HEAD SHA and repo nameWithOwner — you will need them for the final API call. Parse the OWNER and REPO from nameWithOwner (e.g., "octocat/hello-world" → OWNER=octocat, REPO=hello-world).
Run these commands, substituting OWNER and REPO from the context above:
gh api repos/OWNER/REPO/pulls/$ARGUMENTS/comments --jq '[.[] | {id: .id, path: .path, line: .line, original_line: .original_line, body: .body, user: .user.login, created_at: .created_at, in_reply_to_id: .in_reply_to_id}]'
gh api repos/OWNER/REPO/pulls/$ARGUMENTS/reviews --jq '[.[] | {id: .id, user: .user.login, body: .body, state: .state, submitted_at: .submitted_at}]'
gh pr diff $ARGUMENTS
Process the data:
in_reply_to_id is null). Replies are context, not actionable items.REQUEST_CHANGES state and what their top-level body said.If there are NO root inline comments AND NO reviews with REQUEST_CHANGES state AND no substantive review body feedback:
"No review feedback found on PR #$ARGUMENTS. There is nothing to verify."
Stop here.
Otherwise print:
Found {N} inline comment(s) from: {reviewer logins}
Reviews requesting changes: {count}
Proceeding to verification…
Spawn a general-purpose subagent via the Task tool.
Prompt for the Verification Agent:
You are verifying whether prior review feedback was addressed on PR #$ARGUMENTS.
Prior inline review comments (root comments only): {INSERT FULL LIST — include comment id, path, line, body, reviewer login}
Review-level feedback (from REQUEST_CHANGES reviews): {INSERT REVIEW BODIES AND STATES}
Current diff: {INSERT FULL DIFF FROM PHASE 1}
Your tasks:
Step 1: For each inline comment, use the Read tool to read the current state of the file at the relevant location (±20 lines of context). Do NOT rely only on the diff.
Step 2: Run
gh pr diff $ARGUMENTSyourself if you need to cross-reference what changed.Step 3: For EACH inline comment, assess whether the underlying issue was addressed:
- ADDRESSED — The code change directly resolves the concern. The issue no longer applies to the current code.
- PARTIALLY_ADDRESSED — Something changed, but the core concern remains, the fix is incomplete, or the change introduces a related new problem.
- UNADDRESSED — No relevant change was made, or the change does not resolve the issue described.
- OBSOLETE — The code containing this issue was entirely removed (deleted function, removed file). The concern no longer applies by omission.
Step 4: For any concerns raised only in review bodies (not inline), assess whether those broader points were addressed by the overall diff.
Step 5: Output for EACH inline comment in this exact format:
### C{N}: {first 80 chars of original comment body} - **File:** {path} - **Line:** {original line number} - **Reviewer:** {login} - **Original feedback:** {full original comment body} - **Verdict:** ADDRESSED | PARTIALLY_ADDRESSED | UNADDRESSED | OBSOLETE - **Evidence:** {quote the relevant current code lines or describe exactly what changed. Be specific — no vague assertions.} - **Remaining concern:** {if PARTIALLY_ADDRESSED or UNADDRESSED: what specifically still needs fixing. Otherwise: N/A}Then for review-body feedback (if any), output:
### RB{N}: {first 80 chars of review body concern} - **Reviewer:** {login} - **Original concern:** {full text} - **Verdict:** ADDRESSED | PARTIALLY_ADDRESSED | UNADDRESSED | OBSOLETE - **Evidence:** {specific evidence} - **Remaining concern:** {if applicable. Otherwise: N/A}End with a summary block:
## Verification Summary - ADDRESSED: {count} - PARTIALLY_ADDRESSED: {count} - UNADDRESSED: {count} - OBSOLETE: {count} - Total: {count}Bash hygiene: Only run Bash for actual shell commands (gh, echo, etc.). Do ALL reasoning and analysis as plain text output — never inside bash script comments. Never write shell scripts with
#comment blocks to think through logic. For file reading use the Read tool, for searching use the Grep and Glob tools — do not run grep, awk, head, or tail via Bash unless there is no alternative.
Wait for the Verification Agent to complete. Save its full output.
Present findings ONE AT A TIME. Order: UNADDRESSED first, then PARTIALLY_ADDRESSED, then ADDRESSED, then OBSOLETE.
For each finding:
Display clearly:
For 🔴 UNADDRESSED and 🟡 PARTIALLY_ADDRESSED, ask with AskUserQuestion:
For 🟢 ADDRESSED and ⚪ OBSOLETE, ask with AskUserQuestion:
Record each decision.
If there are more than 8 findings, tell the user the total count upfront and ask:
After triage:
Show triage summary:
Triage complete:
- Re-requesting changes on {N} item(s)
- Accepted as resolved: {M} item(s)
- Skipped: {K} item(s)
Re-requesting:
1. {file}:{line} — {first ~60 chars of comment}
...
Accepted as resolved:
- {file}:{line} (ADDRESSED)
...
Ask review type with AskUserQuestion:
Ask review body with AskUserQuestion:
Build and submit the review in a single gh api call:
gh api repos/OWNER/REPO/pulls/$ARGUMENTS/reviews \
--method POST \
--input - <<'EOF'
{
"commit_id": "{HEAD_SHA}",
"body": "{review body or empty string}",
"event": "{APPROVE|REQUEST_CHANGES|COMMENT}",
"comments": [
{
"path": "{file}",
"line": {line_number},
"side": "RIGHT",
"body": "{comment text}"
}
]
}
EOF
If approving with no inline comments, submit with "comments": [].
CRITICAL: line must be the line number in the NEW version of the file. Always use "side": "RIGHT" unless commenting on a deleted line. Escape all special characters in comment text (quotes → \", newlines → \n, backslashes → \\).
Confirm success — show the review URL from the API response.
Error handling:
gh auth status.gh pr view $ARGUMENTS --json headRefOid --jq .headRefOid and retry.