{"id":17982,"plugin_id":"plugins_6a82e3d1df508191bfffcec222b18433","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:14:32.779Z","digest":"f9c56cc2c45684d6e90742017ea0a0ee47dd85fe5936aaf1090f73ec14ea5e60","against":null,"payload":{"description":"Resolve the findings on an existing pull request - review comments, CI failures, and self-review findings - driving each to a decision (fix / defer to a tracked issue / discard), re-verifying the gates, replying to each reviewer, and watching for late feedback. The counterpart to pr-review that closes the loop.","included_files":[],"name":"fix-pr","skill_md_contents":"---\nname: fix-pr\ndescription: Resolve the findings on an existing pull request - review comments, CI failures, and self-review findings - driving each to a decision (fix / defer to a tracked issue / discard), re-verifying the gates, replying to each reviewer, and watching for late feedback. The counterpart to pr-review that closes the loop.\n---\n\n# Fix PR\n\nDrive a PR's feedback to done: run a review, triage **every** item to a decision, fix what deserves fixing, file what deserves doing later, discard what deserves nothing, answer every reviewer, and re-check after pushing in case late feedback (bots, CI) arrives. The bar for correctness is high; the bar for new machinery is low — fix the defect, don't redesign around it.\n\n## 1. Establish the PR intent (the scope ruler)\nWrite one or two sentences: **what this PR is for, and what it deliberately does not change** — derived from the title, body, linked issue, and the diff. Every scope call below is measured against it. If the intent is genuinely ambiguous, ask the author before triaging.\n\n## 2. Gather the findings\nCollect from every surface, deduplicated. Commands below are for `github` (`prHost` in `.claude/dev-kit.json`); for **bitbucket** use the REST API (`/pullrequests/{id}` comments, `/statuses`), for **gitlab** `glab mr view/checks`.\n\n1. **CI failures**: `gh pr checks <pr>` — read the failing job logs, not just the status.\n2. **Review feedback**: unresolved inline threads, review summary bodies, and PR conversation comments — bots included (`gh pr view <pr> --comments`, `gh api` for threads). Keep outdated threads: the code moved, the concern may not have.\n3. **Self-review findings** handed over by the caller (the `pr-review` pass).\n\n## 3. Build the ledger\nOne row per **distinct claim**, merging duplicates across sources (if the review pass and a human flagged the same defect, that's one row citing both — and the human's thread still gets a reply):\n\n| id | source | file:line | claim | category | verdict |\n\nAssign exactly one verdict per row — nothing stays undecided:\n- **`FIX_NOW`** — fix it in this PR.\n- **`DEFER_TO_ISSUE`** — real value, wrong moment → a tracked issue.\n- **`DISCARD`** — not worth anyone's time; no fix, no issue.\n\n**Never `DISCARD`** (from `instructions/secure-coding.md` + `instructions/testing-standards.md`): security/data-exposure, serious performance regressions, duplication this PR introduces, and missing test coverage for behavior it changes (when the project has tests). Only defer one of these when the fix is genuinely a separate project — and say so, treating the PR as blocked on the author's call, not quietly filing an issue.\n\nShow the classified ledger before touching code — the cheapest moment to correct a bad call.\n\n## 4. Ask about scope conflicts\nBatch every fix that would push past the PR's intent into **one** round of questions (AskUserQuestion) with your recommendation. Don't widen scope silently.\n\n## 5. Fix\nSmallest correct change per `FIX_NOW`, following the repo's conventions and the kit instructions. Add/update the tests that prove each fix (a test that fails without it); keep touched files at the project's coverage bar (adaptive — see `testing-standards.md`). One commit per coherent group; push to the PR branch. No opportunistic refactors, no force-push/amend/rebase of remote commits.\n\n## 6. Answer every reviewer (consent-first)\nReply to each human/bot comment with the decision taken, then resolve the thread. **Show the exact replies and get confirmation before posting to GitHub** (in `--auto-approve` pipeline runs, post them and flag prominently in the report). Never resolve someone else's thread without a reply. A finding you believe is wrong gets a reasoned reply, not silence.\n\n## 7. File deferred work\nFor each `DEFER_TO_ISSUE`, confirm the batch with the user, then create a tracked issue **via the configured tracker** (the `issue-*` adapters / `.claude/dev-kit.json`) — or the PR host's issues — and link it from the reply.\n\n## 8. Re-verify the gates\nSame as `create-pr`, adaptive to the project: unit tests for touched files pass; `coverage-check` holds the project's bar with no regression; related e2e pass if user-facing and the project does e2e; lint clean; no suppressions to dodge a gate.\n\n## 9. Watch for late feedback, then loop\nBots and CI often post minutes after a push. Right after pushing, run the bundled watcher in the background. It ships with the kit at `scripts/watch-pr-feedback.sh`; resolve its path from the kit install — `$CLAUDE_PLUGIN_ROOT` on Claude Code, the kit checkout path on Codex:\n```bash\nBASELINE=<ledger github ids> \"$CLAUDE_PLUGIN_ROOT\"/scripts/watch-pr-feedback.sh <pr>   # Claude Code\n# Codex: run the same script from the kit's install path (no $CLAUDE_PLUGIN_ROOT there)\n```\nRead its exit code: **10** = new feedback (printed) → back to step 3 with the new items; **20** = a bot signalled all-clear (👍 on the PR / approving review); **0** = ten quiet minutes; **30** = inconclusive → re-run it. Only close out on **0** or **20** from a window covering the last push. (GitHub only; for other hosts, do a single post-push re-check instead.)\n\n## 10. Report\nAccount for **every** ledger row (fixed / deferred+issue link / discarded+why / answered), the verification evidence, how the feedback window closed, and the PR URL. Never report the PR clean while blocking threads remain open.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}