Skip to content

Example PRD: Issue-to-PR Loop

A workflow PRD for resolving a GitHub issue through implementation, review, and CI until done.


Resolve a GitHub issue by opening a PR, responding to feedback, fixing CI, and continuing until the work is complete or blocked.

┌─────────────┐
│ Read issue │
└──────┬──────┘
┌─────────────┐
│ Branch + PR │
└──────┬──────┘
┌─────────────┐ ┌──────────┐
│ Implement │────▶│ Run tests│
└──────┬──────┘ └────┬─────┘
│ │
▼ ▼
┌─────────────┐ ┌──────────┐
│ Push + wait │────▶│ Check CI │
└──────┬──────┘ └────┬─────┘
│ │
▼ ▼
┌─────────────────────────────┐
│ Review feedback? Fix + loop │
└──────────────┬──────────────┘
┌──────────────┐
│ Done/Blocked │
└──────────────┘
  • Read issue title, body, labels, and comments
  • Identify acceptance criteria (ask if unclear)
  • Check for existing PRs on the same issue
  • Create a branch from the default branch
  • Make focused commits referencing the issue (#123)
  • Open a PR that links the issue and summarizes the approach
  • List tests run and flag risks in the PR description
  • After each push, check review comments and CI results
  • Apply reviewer requests that are in scope and safe
  • Re-run tests after changes
  • Update PR description when behavior changes
ConditionAction
All acceptance criteria met, CI green, no blocking reviewsDone
Requirements conflict or are ambiguousStop, post question
Secrets or permissions neededStop, request help
CI unavailable or flakyStop, note blocker
Max iterations reachedStop, summarize status
  • Keep changes minimal and scoped to the issue
  • Never force-push over human commits
  • Never expose tokens or secrets in logs, commits, or comments
  • Use test/lint commands already in the repo
  • PR is open and linked to the issue
  • PR description has summary, tests, and risks
  • Acceptance criteria satisfied or explicitly out-of-scope
  • CI checks pass
  • Review comments resolved or answered
  • Final status is clear: done, blocked, or needs human review

Resolve issue #123. Read the issue, open or update a PR, respond to review feedback, fix failing checks, and continue until the PR is ready or a blocker requires human input.