Catalog
getsentry/iterate-pr

getsentry

iterate-pr

Iterate on a PR until actionable CI passes and high/medium review feedback is addressed. Use for PR CI failures, review feedback, or green-check loops; do not wait for human approval, draft status, or merge gates.

global
New~1.2k
v1.0Saved Jul 11, 2026

Iterate on PR Until CI Passes

Goal: fix actionable CI failures and high/medium review feedback. Stop and report human approval, draft-readiness, and merge-readiness gates.

Requires:

  • authenticated gh
  • uv
  • target repository root as cwd
  • skill-root-relative script paths, for example scripts/fetch_pr_checks.py

Bundled Scripts

Script Run Output
scripts/fetch_pr_checks.py uv run scripts/fetch_pr_checks.py [--pr NUMBER] JSON: pr, summary, checks, failure snippets
scripts/fetch_pr_feedback.py uv run scripts/fetch_pr_feedback.py [--pr NUMBER] JSON buckets: high, medium, low, bot, resolved
scripts/monitor_pr_checks.py uv run scripts/monitor_pr_checks.py [--pr NUMBER] terminal marker plus tab-separated checks
scripts/reply_to_thread.py uv run scripts/reply_to_thread.py THREAD_ID BODY [...] JSON reply results

Check summary fields include failed, pending, actionable_pending, and human_gate_pending.

Monitor markers:

  • ALL_CHECKS_PASSED
  • CHECKS_DONE_WITH_FAILURES
  • NO_CHECKS_REGISTERED
  • DRAFT_PR_WITH_NO_CHECKS
  • CHECKS_BLOCKED_BY_REVIEW_GATE

Workflow

1. Identify PR

Run:

gh pr view --json number,url,headRefName,isDraft,reviewDecision

Stop when:

  • no PR exists
  • draft PR has no checks after monitor grace period: report DRAFT_PR_WITH_NO_CHECKS

Draft rule: inspect existing checks/feedback only. Do not mark ready for review unless asked.

2. Handle Feedback

Run uv run scripts/fetch_pr_feedback.py [--pr NUMBER].

Bucket Action
high fix
medium fix
low ask user which to address
bot skip informational comments
resolved skip

Feedback fix checklist:

  • verify root cause
  • search related code
  • fix all instances
  • for review_bot: true: fix real issues, explain false positives

Low-priority prompt format:

Found 3 low-priority suggestions:
1. [l] "Consider renaming this variable" - @reviewer in api.py:42
2. [nit] "Could use a list comprehension" - @reviewer in utils.py:18
3. [style] "Add a docstring" - @reviewer in models.py:55

Which should I address? ("1,3", "all", or "none")

3. Check CI Status

Run uv run scripts/fetch_pr_checks.py [--pr NUMBER].

State Action
failed > 0 and actionable_pending == 0 fix failures
actionable_pending > 0 wait; poll feedback while waiting
pending > 0 and actionable_pending == 0 report CHECKS_BLOCKED_BY_REVIEW_GATE
no checks after grace period report NO_CHECKS_REGISTERED or DRAFT_PR_WITH_NO_CHECKS
all actionable checks passed run post-CI feedback check

Wait for actionable review bots: sentry, warden, cursor, bugbot, seer, codeql. Do not wait for approval, isDraft, REVIEW_REQUIRED, Codecov, or informational bots.

4. Fix CI Failures

For each failure:

  1. read full log: gh run view <run-id> --log-failed
  2. trace from assertion/exception/lint rule to source
  3. state the cause before editing: "fails because X, affected by Y"
  4. search related call sites/patterns
  5. fix root cause, not symptom
  6. add focused test coverage when needed

5. Verify Locally, Then Commit and Push

Before commit:

  • test fix: rerun specific test
  • lint/type fix: rerun affected checker
  • code fix: rerun covering tests
  • local failure: fix before pushing
git add <files>
git commit -m "fix: <descriptive message>"
git push

6. Monitor CI and Address Feedback

Loop:

  1. run uv run scripts/fetch_pr_checks.py
  2. handle table in step 3
  3. while actionable_pending > 0, run uv run scripts/fetch_pr_feedback.py
  4. fix new high/medium feedback immediately
  5. if changed, verify, commit, push, restart loop
  6. otherwise sleep 30 seconds and repeat
  7. after checks pass, wait 10 seconds, fetch feedback once more
  8. if new high/medium feedback exists, return to step 4

Claude Code optional: run uv run scripts/monitor_pr_checks.py through MonitorTool with persistent: false; set timeout to normal repo CI duration. Restart the monitor after every push.

Exit Conditions

Exit Conditions
Success actionable CI passed; post-CI feedback clean; low-priority choice handled
Ask user same failure after 2 attempts; feedback unclear; infrastructure issue
Stop no PR; branch needs rebase; no checks; draft no-checks; only human gates remain

Fallback

If scripts fail, use gh CLI directly:

  • gh pr view --json number,url,headRefName,isDraft,reviewDecision
  • gh pr checks --json name,state,bucket,description,link
  • gh run view <run-id> --log-failed
  • gh api repos/{owner}/{repo}/pulls/{number}/comments
Files6
6 files · 51.5 KB

Select a file to preview

Overall Score

82/100

Grade

B

Good

Safety

82

Quality

85

Clarity

85

Completeness

78

Summary

Iterate-PR is an agent skill that guides automated iteration on GitHub pull requests through CI failures and code review feedback. It orchestrates a loop of fetching PR status, diagnosing failures, fixing code, committing changes, and monitoring checks until actionable CI passes and high/medium-priority feedback is addressed. It halts at non-actionable gates (draft status, required human approval) and reports them explicitly rather than polling indefinitely.

Detected Capabilities

Git operations (add, commit, push)GitHub CLI commands (gh pr view, gh run view)Shell execution (uv run, subprocess)JSON parsing and processingHTTP requests via gh (GraphQL API)File reading (CI logs)Process spawning

Trigger Keywords

Phrases that MCP clients use to match this skill to user intent.

iterate pr feedbackfix ci failurespr check monitoringaddress review feedbackautomate pr loop

Risk Signals

INFO

gh api graphql command without escaping validation

scripts/reply_to_thread.py:_normalize_body()
INFO

subprocess.run with shell=False and user input in GraphQL query

scripts/reply_to_thread.py:reply_to_threads()
INFO

Network request to GitHub API (authenticated via gh)

scripts/fetch_pr_feedback.py, scripts/fetch_pr_checks.py, scripts/monitor_pr_checks.py, scripts/reply_to_thread.py
INFO

Subprocess calls to gh CLI without error handling in some paths

scripts/fetch_pr_checks.py:get_failed_runs()
INFO

Timeout set on HTTP requests (60s for logs)

scripts/fetch_pr_checks.py:get_run_logs()

Referenced Domains

External domains referenced in skill content, detected by static analysis.

develop.sentry.devwww.apache.org

Use Cases

  • Fix CI failures and iterate until checks pass
  • Address high and medium priority code review feedback
  • Automate PR feedback loops without human intervention
  • Distinguish actionable CI from human review gates
  • Monitor and push fixes in a single workflow

Quality Notes

  • Well-structured workflow with clear step-by-step instructions and exit conditions
  • Comprehensive bundled scripts with proper Python shebang and uvpip metadata
  • Clear categorization system (high/medium/low via LOGAF scale) for feedback prioritization
  • Strong distinction between actionable gates (CI, code review) and non-actionable gates (draft, approval) prevents infinite loops
  • Detailed fallback mechanism using gh CLI directly if scripts fail
  • Each script has clear input/output contracts documented in docstrings
  • SPEC.md provides maintenance contract with validation expectations and known limitations
  • Monitor loop includes grace periods for check registration and polling intervals to avoid hammering CI systems
  • Good error handling in most scripts with JSON fallback parsing (fetch_pr_checks.py)
  • Review bot detection allows actionable feedback from automated tools while skipping informational bots
Model: claude-haiku-4-5-20251001Analyzed: Jul 11, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Add getsentry/iterate-pr to your library

Command Palette

Search for a command to run...