All skills
getsentry avatar

/iterate-pr

@e7a87fa official
by Sentrygetsentry/skills1k stars
53

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.

Use this Skill: https://skilld.dev/gh/getsentry/skills/iterate-pr

This session only. Nothing lands on disk.

SKILL.md

≈56 tokens always: the name and description. ≈1.2k when used: this file. ≈1.4k more on demand in 2 files.

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

Source: SKILL.md on GitHub

2 warnings17d5 checks · Risk SAFE
  • Gen Agent Trust Hub17d

    The skill implements a workflow to automate pull request iteration by monitoring CI checks and categorizing review feedback using the GitHub CLI. It ingests external data (such as pull request comments and logs), which creates a potential surface for indirect prompt injection, but it contains no malicious patterns or insecure command executions.

  • Socket17d

    No alerts

  • Snyk17d

    Risk: MEDIUM · 1 issue

  • Runlayer7mo

    2/3 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at e7a87fa. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 2 months ago
disable-model-invocation
false

README badge

README badge for getsentry/skills/iterate-pr

Iterates on a PR by fixing actionable CI failures and addressing high/medium review feedback, stopping at human approval gates or merge blockers. Bundles Python scripts to fetch PR checks, parse review feedback, monitor CI status, and reply to threads, all integrated with the gh CLI.

Generated from the current SKILL.md.

Does this skill wait for human approval before finishing?
No. The skill stops and reports when it encounters human-gate conditions like draft status, merge gates, or review approval requirements, but it does not wait for them.
Which CI bots does this skill wait for?
It waits for actionable review bots: sentry, warden, cursor, bugbot, seer, and codeql. It skips approval gates, codecov, and informational bots.
What are the requirements to run this skill?
You need an authenticated gh CLI, uv installed, the target repository as the current working directory, and access to the bundled Python scripts.
Can this skill handle both CI failures and code review feedback?
Yes. It fixes high and medium priority review feedback and actionable CI failures, then loops until both pass. Low priority feedback requires user input on which to address.
What happens if the same failure occurs twice?
The skill asks the user for help after the same failure appears a second time, rather than continuing to iterate.

Generated from the current SKILL.md. These answers refresh after source changes.