resolve-pr-feedback
Skill2 starsChanged 4 days agoMITView on GitHub
Review PRs and post the review on GitHub; inspect PR status and linked issues, evaluate review feedback, reply, resolve settled threads, and request re-review. Load to review a PR, for PR status checks, before reading a new review, or for issue discussions.
- Deletes or force-pushes
- Commits and pushes
3 other projects use a version of this.
Adopted by
Most recently taken up by
- fx/skillstheir own version, first seen Nov 8, 2026
- newkirkjosh/skillstheir own version, first seen Nov 1, 2026
- malinskibeniamin/skillstheir own version, first seen Oct 17, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- fx/skills★ 4same name
- malinskibeniamin/skills★ 4same name
- newkirkjosh/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository40 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .agents/skills/AGENTS.mdAGENTS.md
- attribute-ai-commitsSkill
- check-accessSkill
- choose-dependencySkill
- coordinate-landingSkill
- develop-featureSkill
- document-codeSkill
- git-conventionsSkill
- implement-featureSkill
- manage-versionsSkill
- monitor-ciSkill
- open-pull-requestSkill
- plan-client-server-boundarySkill
- plan-featureSkill
- plan-ui-designSkill
- prefer-small-solutionsSkill
- prepare-releaseSkill
- register-ai-agentSkill
- triage-issuesSkill
- use-a-novel-cliSkill
- use-discordSkill
- write-bash-scriptsSkill
- write-design-systemSkill
- write-dockerfilesSkill
- write-frontendSkill
- write-frontend-testsSkill
- write-github-actionsSkill
- write-go-kitSkill
- write-go-serviceSkill
- write-goSkill
- write-go-testsSkill
- write-infraSkill
- write-js-packageSkill
- write-openapiSkill
- write-platformSkill
- write-project-docsSkill
- write-protoSkill
- write-sqlSkill
- write-svelteSkill
The file
We split this skill into the rules it gives an agent
12 rules. 0 are common, 9 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 18
Read this skill before reading review comments, even when a proposed fix looks obvious.
- Distinctive: line 65
If you partially accepted, took a different direction, or bundled the fix with adjacent changes, the
- Distinctive: line 66
reply explains the deviation: before resolution. Quiet, after-the-fact re-interpretation erodes trust.
- Distinctive: line 154
Wait for a reply before acting.
- Distinctive: line 160
explaining the deviation: before any resolution:
- Very specific: line 206
After each logical change, before pushing, apply the current develop-feature stage.
- Very specific: line 221
If the fix required a rebase, use git push --force-with-lease.
- Distinctive: line 228
Silent resolution without a reply: Always pair a resolve with a reply naming the SHA (5.1).
- Distinctive: line 232
Accepting a reviewer's spec claim without checking the spec: Verify an asserted API shape, endpoint path, header name, or protocol detail …
- Very specific: line 238
Commenting as yourself: Every PR/issue comment and thread reply goes through a-novel core bot-comment so it attributes to <app-slug>[bot].
- Distinctive: line 248
Re-requesting review too early: Wait for all pushes + green CI + posted declines.
- Distinctive: line 265
When CI agrees with a reviewer (same root cause), fold the fix into the thread response rather than pushing twice.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Resolve PR Feedback
Load develop-feature to determine whether this work is in issue/draft review or final verification. During active development, survey linked issues and PRs together when resuming, after meaningful revisions or pushes, during CI waits, and before stage transitions or handoff. Read issue bodies/comments as well as all PR feedback surfaces below. Keep decisions needing expertise the developer lacks open on the relevant issue, with a recommendation and their impact on scope; do not mistake an unanswered discussion for approval.
Read this skill before reading review comments, even when a proposed fix looks obvious. A status check and an instruction to address feedback both start with the survey; only authorized feedback work continues through classification, fixes, replies, and resolution. Settled threads require both a reply and resolution, using the identity and verification rules in the closing-the-loop reference.
It also governs discussion under an issue — chiefly the planning issues plan-feature
produces, where the human and the agent converse in comments while the body holds the agreed plan.
Phases 1–5 are written for PRs. When the work is an issue, start at
Issue discussions, which maps the same posture onto issues:
flat comments, no review threads, no resolution state.
Choose the review path
- Reviewing a PR: read reviewing a pull request. The request authorizes posting it as one GitHub review with inline comments; post it without asking.
- PR status: read the survey procedure first. Status-only work ends after reporting evidence; it does not authorize edits or replies.
- Addressing PR feedback: survey, classify, and fix using the phases here. Before replying, resolving, or requesting re-review, read closing the loop.
- Issue discussion: read issue discussions; issue comments have no PR
thread-resolution state.
plan-featureowns changes to the planning issue body.
Reply and resolve remain one operation for settled PR threads. Use the authorized bot-comment path, preserve unresolved decisions, and never infer permission to communicate from a status query.
Guiding principle
A pull request — or a planning issue — is a conversation, not a checklist. Reviewers and collaborators — human or bot — can be right, wrong, unclear, or working from a partial picture of the change, so apply judgment. The failure modes are symmetric: silently overriding a valid concern erodes trust; blindly applying an incorrect suggestion ships a regression. The remedy for both is the same — speak on the thread so the reviewer sees your reasoning and can push back.
Two rules anchor the loop; the rest of this skill is their mechanics:
- Clear-cut → reply and resolve, in the same action. A thread you have decisively answered —
accepted (and pushed the fix) or declined (with a defensible reason) — is settled. Reply, then
resolve it right then; the resolve is not a later step. A "fixed in
<sha>" reply that leaves the thread open is the defect this rule exists to stop — it forces the reviewer to re-read work that is already done and to close threads you should have closed. An open thread must mean a real decision is still pending, never "answered but not yet resolved." The reviewer can re-open with new information. - Genuinely unclear or worth discussing → reply with a specific question, leave open. Silence is the worst option; acting on partial understanding is the second-worst.
If you partially accepted, took a different direction, or bundled the fix with adjacent changes, the reply explains the deviation before resolution. Quiet, after-the-fact re-interpretation erodes trust. Larger deviations where the reviewer might prefer the original suggestion fall under rule 2 — leave open with an explicit "OK with this approach?" question.
Reply style: rationale-dense, zero filler. Thread replies may be more technical than a PR body, but the same economy applies — lead with the reason, cite the evidence (a SHA, a doc, a measured fact), and stop. Never restate what the reviewer or the diff already shows.
Phase 2: Classify each unresolved thread
For every unresolved thread, fit it into one of four buckets. Read the full thread (including prior replies), read the code it points at, and reason about each thread independently — never in bulk.
| Bucket | When to use |
| Accept | The comment is correct and actionable; a straightforward change implements its intent. |
| Accept-with-deviation | The core concern is valid but the specific suggestion is wrong, partial, or better served by a different approach. |
| Decline | The comment misunderstands the change, conflicts with a repo guideline (CLAUDE.md, a skill file, a documented decision), would reintroduce a security or correctness regression, or is out of scope for this PR. |
| Unsure | You cannot confidently place the comment into one of the above. |
Signals that push toward decline specifically:
- Accepting would violate a rule in
.agents/skills/*/SKILL.md— the skill file is the authoritative source, not the comment. - The comment asks to re-expose something deliberately hidden for security (e.g., error strings on an unauthenticated endpoint). That is a decline, not a conversation.
- The comment asks for feature work outside this PR's layer or scope. The answer is usually "decline for this PR, file a follow-up."
Signals that push toward unsure:
- The comment assumes context you do not see in the PR (an incident, a prior decision, code in another repo).
- Two readings of the comment lead to different fixes, and the reviewer did not pick one.
- The comment is terse ("this won't work") with no specifics.
Bots vs humans. Copilot and similar bots do not re-engage on thread replies. Still classify their comments with the same rigor — bots miss context routinely, and blanket acceptance is how insecure or incorrect changes land. Weight your reply toward the human reviewer who will read the thread later.
A bot repeating the same claim across several comments is not independent evidence of
correctness; it is one opinion with a megaphone. Verify the underlying fact once — official docs, a
spec, or an empirical test (often one gh api call away) — and cite that source in your reply.
Treating repetition as confirmation is how a confidently wrong bot lands an error in the codebase.
Bots are especially prone to confident errors about external specs — API endpoint paths, header names, status code semantics, protocol details. When a comment asserts a factual claim about a third-party system, check that system's authoritative source before arguing from plausibility.
Phase 3: Act on each thread
Work the cheap replies first (decline, unsure) before the code changes (accept, accept-with-deviation). That gets the conversation moving while you focus on the fixes.
3.1 Decline
Reply once, inline on the thread, with:
- A one-sentence reason.
- A pointer to the authoritative source when one exists (skill file, CLAUDE.md section, linked incident, standard).
- An invitation to push back if more context would change the assessment.
Resolve the thread. The reply is the closure; if the reviewer brings new information, they can re-open and you re-enter Phase 2 on the same thread.
a-novel core bot-comment <org> <repo> <number> --reply-to <comment-id> \
--body "$(cat <<'EOF'
<one-sentence reason>
Per <.agents/skills/...-SKILL.md section / CLAUDE.md anchor / linked source>.
Happy to revisit if I've missed context here.
EOF
)"3.2 Unsure — start a discussion
Reply with a specific question, not a generic "what do you mean?". Quote the part you are unsure about and lay out the interpretations you see. That respects the reviewer's time and anchors the next round.
Wait for a reply before acting. Re-enter Phase 2 once the reviewer responds; multi-round exchanges on a single thread are normal.
3.3 Accept-with-deviation
Apply the fix in the direction that actually makes sense (Phase 4). After pushing, reply explaining the deviation before any resolution:
- "Took the core suggestion but scoped it to X instead of Y — Y would also touch the Z layer, which is out of scope for this branch."
- "Applied the spirit of the comment via
<alternative>— the literal suggestion would not work because<reason>."
How far you deviated decides whether to resolve. Resolve a small, well-explained deviation — the reply is the audit trail. A larger deviation where the reviewer might prefer the original suggestion stays open with an explicit "OK with this approach?" question.
3.4 Accept
Apply the fix (Phase 4). After pushing, reply with a one-liner:
Fixed in <short-sha>.- Optional: one sentence on anything non-obvious about how you applied it.
Resolve the thread.
Phase 4: Apply fixes and push
4.1 Commit per git-conventions
One commit per review round, holding all of that round's fixes: each signed commit costs a key touch. Type it by the round's main change, not the reviewer's category:
- Reviewer asked for a test →
test(<scope>): ... - Reviewer asked for a doc or description clarification →
docs(<scope>): ... - Reviewer flagged a real bug →
fix(<scope>): ... - Reviewer asked for a rename or internal reshape →
refactor(<scope>): ...
Cite the review in the commit body so the log is self-documenting:
Addresses <reviewer-login> review feedback on #<PR-number>.Never amend a pushed commit to address review. The review is anchored to the old SHA; amending
rewrites shared history and strands the review thread's context. Always create new commits. (A hard
rule from git-conventions.)
4.2 Run the narrowest test target
After each logical change, before pushing, apply the current develop-feature stage. Use focused
checks during issue/draft review; complete the full relevant coverage only after scope approval.
For final verification, use the affected suites:
- Go changes (internal or
pkg/go) →a-novel test --type=go -y pkg/jschanges →a-novel test --type=pnpm -y
Full mapping in the use-a-novel-cli skill (auto-loaded). Never push a red tree.
4.3 Push
git pushIf the fix required a rebase, use git push --force-with-lease. Never plain --force, never
force-push to master.
Common pitfalls
- Silent resolution without a reply. Always pair a resolve with a reply naming the SHA (5.1).
- Blanket acceptance of bot comments, or treating repeated bot claims as confirmation. Classify every comment, and verify the underlying fact once against an authoritative source (Phase 2).
- Accepting a reviewer's spec claim without checking the spec. Verify an asserted API shape, endpoint path, header name, or protocol detail against upstream docs — or one empirical call — before editing. Plausibility is not evidence.
- Replying with the wrong mode. A top-level comment does not thread with an inline review
comment. To reply on a review thread, pass
--reply-to <comment-id>toa-novel core bot-comment; a bare comment (no--reply-to) posts at the top level. - Commenting as yourself. Every PR/issue comment and thread reply goes through
a-novel core bot-commentso it attributes to<app-slug>[bot]. Baregh pr comment/gh api … commentsposts as your user account — only reads use plaingh. The one write that runs as the operator is a review you perform (reviewing a pull request). - Posting a review as comments. A review is one
POST …/pulls/<n>/reviewscarrying inline comments, never a top-level comment that linksfile:line, nor a series of comments. - Leaving clear-cut threads open. Resolve a thread you have decisively answered; reserve the open state for genuinely-pending decisions (rule 1).
- Amending or force-pushing to address review. Review comments are anchored to the SHA that was reviewed. Rewriting strands them. New commits, every time.
- Re-requesting review too early. Wait for all pushes + green CI + posted declines.
- Acting while unsure. A specific question is the only correct first move. A best-guess fix explained afterwards on the thread wastes a round.
- Mixing types in one commit to bundle a batch of review fixes. Each review-driven commit is
still subject to
git-conventions— atestand adocsfix are two commits, even from the same review.
Hand-offs
- From
open-pull-request— once a PR is open and reviewers start commenting, the push-and-open flow hands off here to assess CI, review threads, and reviewer status, then work the feedback. - With
plan-feature—plan-featureowns the planning-issue body (the agreed plan); this skill owns the comment loop around it (posting open questions, answering the human's replies, folding decisions back into the body). See Issue discussions. - To
monitor-ci— for failing checks that need flake-vs-real classification or a retry loop. When CI agrees with a reviewer (same root cause), fold the fix into the thread response rather than pushing twice. - To
git-conventions— every review-driven commit. No exceptions. - To the layer-specific skills —
write-go,write-go-service(orwrite-go-kitfor a-novel-kit repos),write-go-tests,write-openapi,write-js-package, etc. Phase 4 writes code; those skills govern how. - Close with the session recap table (memory
session-recap-table) — after working a PR's feedback, end the turn with a table linking every PR/issue still outstanding this session (this PR's remaining threads, its CI, anything else in flight), so the operator can jump to each.
Quick reference
| Situation | Command |
| PR envelope | gh pr view <n> --json number,title,state,isDraft,mergeable,reviewDecision,baseRefName,headRefName,reviews,commits |
| Inline review comments | gh api repos/<o>/<r>/pulls/<n>/comments |
| Top-level PR comments | gh api repos/<o>/<r>/issues/<n>/comments |
| Review envelopes | gh api repos/<o>/<r>/pulls/<n>/reviews |
| Thread resolution state (node IDs) | GraphQL reviewThreads query (Phase 1.3) |
| CI status | gh pr checks <n> |
| Reply on a review thread (bot) | a-novel core bot-comment <o> <r> <n> --reply-to <cid> --body "..." |
| Resolve a thread | GraphQL resolveReviewThread mutation (Phase 5.2) |
| Post a review (new inline threads) | gh api …/pulls/<n>/reviews --method POST --input review.json as the operator (review) |
| Comment on a PR or issue (bot) | a-novel core bot-comment <o> <r> <n> --body "..." |
| Re-request review | gh api .../pulls/<n>/requested_reviewers -X POST -F 'reviewers[]=<login>' |
| Issue envelope | gh issue view <n> --repo <o>/<r> --json number,state,title,labels,assignees,body,comments |
| Issue comment stream | gh api repos/<o>/<r>/issues/<n>/comments |
| Comment on an issue (bot) | a-novel core bot-comment <o> <r> <n> --body "..." (flat — no --reply-to) |
| Edit the plan body (operator) | gh issue edit <n> --repo <o>/<r> --body-file <file> |
| Close an issue | gh issue close <n> --repo <o>/<r> --reason "not planned" (or completed) |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

