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.

NewUpdated Sep 9, 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
Files7
7 files · 51.2 KB

Select a file to preview

Overall Score

87/100

Grade

A

Excellent

Grades are signals, not a certification. Always review a skill yourself before use.

Safety

85

Quality

88

Clarity

90

Completeness

82

Summary

The `iterate-pr` skill guides an agent through fixing actionable CI failures and high/medium review feedback on pull requests. It provides a structured workflow to fetch PR state, categorize feedback using the LOGAF scale, fix issues locally, and monitor CI until checks pass or a non-actionable gate is reached (e.g., human approval, draft status). The skill includes four bundled Python scripts that use GitHub CLI to fetch checks, feedback, monitor progress, and reply to review threads.

Detected Capabilities

file readshell execution (gh CLI, uv)github api access via ghgraphql queriesjson parsing and generationprocess pollingsubprocess timeout handling

Trigger Keywords

Phrases that agents use to match this skill to user intent.

fix pr feedbackiterate ci failuresaddress review commentspass pr checkshandle pr loop

Risk Signals

INFO

Referenced domain develop.sentry.dev used for LOGAF scale documentation link

scripts/fetch_pr_feedback.py line 12
INFO

Referenced domain www.apache.org used for license text

LICENSE file header
WARNING

GitHub CLI authentication assumed but not validated

SKILL.md Requires section
INFO

GraphQL query executed dynamically via gh api graphql

scripts/fetch_pr_feedback.py:get_review_threads()
WARNING

No input validation on thread_id or body arguments before GraphQL execution

scripts/reply_to_thread.py:reply_to_threads()
WARNING

Subprocess timeout set to 30s for GraphQL reply; general subprocess calls have no timeout

scripts/reply_to_thread.py and fetch_pr_feedback.py

Referenced Domains

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

develop.sentry.devwww.apache.org

Use Cases

  • Fix PR CI failures and retest
  • Address high-priority code review feedback
  • Iterate PR loop until actionable checks pass
  • Categorize and triage review suggestions by priority
  • Monitor CI progress while pushing fixes
  • Handle draft PRs and human review gates gracefully

Quality Notes

  • Skill provides exceptionally clear workflow structure with numbered steps and decision tables
  • LOGAF scale documentation is well-integrated; feedback categorization rules are explicit and easy to follow
  • Four bundled scripts have docstrings and clear contracts (inputs and outputs documented)
  • Error handling is present (subprocess try-catch, JSON parse validation) but inconsistent—some calls check returncode, others do not
  • Feedback categorization logic is robust with multiple pattern matching layers (explicit markers, high/medium/low heuristics)
  • Exit conditions are well-defined with clear state reporting (ALL_CHECKS_PASSED, DRAFT_PR_WITH_NO_CHECKS, etc.)
  • Scripts handle GitHub CLI JSON output with fallback to tab-separated parsing, showing resilience
  • Monitor script includes configurable poll intervals and grace periods for draft/no-check scenarios
  • No stored credentials or secrets handling—relies entirely on authenticated gh CLI
  • Supporting SPEC.md file explicitly documents scope, intent, validation expectations, and known limitations
  • Thread reply script properly escapes newlines and uses GraphQL aliasing for batch operations
Model: claude-haiku-4-5-20251001Analyzed: Sep 9, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Version History

  1. v1.1

    Content updated

    ✦ AIAdds OpenAI agent configuration and streamlines reply script.

    2026-09-09

    LATEST
  2. v1.0

    2026-07-11

    View This VersionInitial version

Use getsentry/iterate-pr in your dev environment

Command Palette

Search for a command to run...