一键导入
triage-reviews
Fetch PR review comments, verify each against real code/docs, fix valid issues, commit and push
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Fetch PR review comments, verify each against real code/docs, fix valid issues, commit and push
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Invoke this skill when the user says "use btca"
Check out a candidate PR locally, restart the MCP server on the PR branch, re-run the exact same MCP tool call that failed in /2-repro-issue, diff the outputs, and audit the fix for locale-independence, DOM-stability, and scope per CLAUDE.md scraping rules. Use when the user says "verify PR
Reproduce a single LinkedIn-MCP issue locally on the current branch against the real authenticated LinkedIn session at ~/.linkedin-mcp/profile/, using the MCP streamable-http server. Captures the exact failure mode (tool output, error, missing data) and maps it back to the scraper code path. Use when the user says "reproduce
Scan all open issues and PRs in stickerdaniel/linkedin-mcp-server and rank them by urgency (severity, user impact, age, references), implementation quality (for PRs — mergeability, CI, diff scope, locale-independence, test coverage), and contributor track record (prior merged PRs, review quality, response cadence). Use when the user asks "what should I tackle first as core maintainer", "which PRs are production-ready", "triage backlog", "scan open issues", or any maintainer-prioritisation question about this repo. Outputs a ranked list with rationale per item, not a fix.
| name | triage-reviews |
| description | Fetch PR review comments, verify each against real code/docs, fix valid issues, commit and push |
| argument-hint | [PR number] |
Fetch all review comments on the current PR, verify each finding against real code, fix valid issues, and push.
Determine the PR number:
$ARGUMENTS if providedgh pr view --json number --jq .numberFetch ALL comments (reviewers post in multiple places):
gh api --paginate repos/{owner}/{repo}/pulls/{pr}/reviews
gh api --paginate repos/{owner}/{repo}/pulls/{pr}/comments
gh api --paginate repos/{owner}/{repo}/issues/{pr}/comments
Extract unique findings — deduplicate across Copilot, Greptile, and human reviewers. Group by file and line.
For EVERY finding, verify against real code before accepting or rejecting:
btca resources to see what's available, then btca ask -r <resource> -q "..." for library/framework questionsgit add only changed files, git commit with message:
fix: Address PR review feedback
- <one-line summary per fix>
gt submit (or git push if not using Graphite)Pushing the fix isn't enough. Each inline review comment lives in its own thread that GitHub keeps showing as "Unresolved" until someone explicitly resolves it. The skill must close that loop for every Valid and False-positive finding so the PR view actually reflects what was triaged.
Workflow per finding:
Reply on the thread with the verdict and evidence:
Fixed in <short-sha>. <one-line what changed>.Valid, deferred to follow-up. Reason: <why>.False positive. <one-line evidence: file:line shows X, or doc link Y>.Resolve the thread only when the finding is Fixed or False positive. Valid + unfixed threads must stay open so the PR view continues to surface the real bug. Resolving them would let the PR look ready while the bug is still in the code. Leave the maintainer to close those threads when they file the follow-up.
GitHub's review threads can only be resolved via GraphQL (REST has no endpoint). The thread ID is a GraphQL node ID, not the REST comment ID, so fetch both together. Use --paginate so PRs with more than 100 threads are covered, the page size cap is per-request not total:
PR=<pr-number>
OWNER=<owner>
REPO=<repo>
gh api graphql --paginate -f query='
query($owner: String!, $repo: String!, $pr: Int!, $endCursor: String) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
reviewThreads(first: 100, after: $endCursor) {
pageInfo { hasNextPage endCursor }
nodes {
id
isResolved
comments(first: 1) { nodes { databaseId path line body } }
}
}
}
}
}' \
-F owner="$OWNER" -F repo="$REPO" -F pr=$PR \
--jq '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false) | {threadId: .id, commentId: .comments.nodes[0].databaseId, path: .comments.nodes[0].path, line: .comments.nodes[0].line}' \
> /tmp/triage-threads-$PR.json
Each entry now has {threadId, commentId, path, line}. Match it against your Phase-2 finding map (by path + line or commentId). For each match:
# Post reply (REST endpoint for replies on a specific review comment)
gh api -X POST "/repos/$OWNER/$REPO/pulls/$PR/comments/$COMMENT_ID/replies" \
-f body="Fixed in $SHORT_SHA. <one-line>."
# Resolve the thread (GraphQL) — Fixed and False-positive only. SKIP for Valid+unfixed.
gh api graphql -f query="
mutation {
resolveReviewThread(input: {threadId: \"$THREAD_ID\"}) {
thread { isResolved }
}
}"
If the parent review left a separate top-level summary comment (Greptile's Greptile Summary issue-level comment, for example), leave it alone, only inline review threads need resolving.
Cap: resolve only threads tied to findings you actually classified. Do not bulk-resolve unrelated threads (other reviewers, human discussion, follow-up questions that aren't from this triage round).
Present a final summary table of ALL findings with verdicts:
| # | Source | File:Line | Finding | Verdict | Reason | Thread |
|---|
Last column: replied + resolved, replied + still open (e.g. waiting on reviewer), or n/a (no inline thread, only summary). If any thread stayed open, name it explicitly so the next pass picks it up.