Claude-skill-registry detecting-existing-threads
Detects existing PR review threads to prevent duplicate comments. Use BEFORE posting any inline comments. Fetches resolved and open threads, then matches against planned findings.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/detecting-existing-threads" ~/.claude/skills/majiayu000-claude-skill-registry-detecting-existing-threads && rm -rf "$T"
manifest:
skills/data/detecting-existing-threads/SKILL.mdsource content
Detecting Existing Threads
Purpose
Prevent duplicate comments by detecting existing review threads before posting new findings.
Required Tools
- Get general PR commentsBash(gh pr view:*)
- Get resolved threadsBash(gh api graphql*reviewThreads*-f owner=*-f repo=*-F pr=*:*)
- Script wrapperBash(./scripts/get-review-threads.sh:*)
Step 1: Determine PR Number
Use this priority order:
-
GitHub Actions environment:
- Check
environment variableGITHUB_EVENT_PATH - Extract PR number from event payload:
.pull_request.number - Get repo from
("owner/repo" format)GITHUB_REPOSITORY
- Check
-
Conversation context:
- Direct number: "123" → use 123
- PR URL: extract from
https://github.com/org/repo/pull/456 - Text reference: "PR #789" → extract 789
-
Local review mode:
- No PR number available → skip thread detection entirely
Step 2: Fetch Thread Data
Capture BOTH comment sources:
# General PR comments gh pr view <PR_NUMBER> --json comments # Inline resolved review threads (REQUIRED - gh pr view misses these) ./scripts/get-review-threads.sh <PR_NUMBER> <OWNER> <REPO>
Step 3: Parse Into Structure
Build this JSON structure from merged results:
{ "total_threads": 5, "threads": [ { "location": "src/auth.ts:45", "severity": "CRITICAL", "issue_summary": "SQL injection risk in query builder", "resolved": false, "author": "claude", "path": "src/auth.ts", "line": 45 } ] }
Severity detection from emoji prefix:
- ❌ →
CRITICAL - ⚠️ →
IMPORTANT - ♻️ →
DEBT - 🎨 →
SUGGESTED - ❓ →
QUESTION
Thread Matching Logic
Before creating any new comment, check for matches:
| Match Type | Criteria | Action |
|---|---|---|
| Exact | Same file + same line | Use existing thread |
| Nearby | Same file + line within ±5 | Use existing thread |
| Content | Body similarity >70% | Use existing thread |
| No match | None of above | Create new comment |
Handling Matches
- Issue persists unchanged → Respond in existing thread
- Issue resolved → Note resolution, don't re-raise
- Issue evolved → Create new comment explaining change