
Receiving Code Review
- 81 installs
- 31 repo stars
- Updated August 4, 2026
- iliaal/ai-skills
Process code review feedback critically: verify correctness before acting, push back on incorrect suggestions, and avoid performative agreement.
About
The receiving-code-review skill provides a response pattern for review feedback that verifies technical correctness before implementing any suggestion. A developer uses it when responding to PR/MR comments or implementing reviewer suggestions from others.
- Verify-before-implement; a reviewer can be wrong
- Re-review check that prior feedback was addressed first
Receiving Code Review by the numbers
- 81 all-time installs (skills.sh)
- +5 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #483 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/iliaal/ai-skills --skill receiving-code-reviewAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 81 |
|---|---|
| repo stars | ★ 31 |
| Last updated | August 4, 2026 |
| Repository | iliaal/ai-skills ↗ |
What it does
Process code review feedback critically: verify correctness before acting, push back on incorrect suggestions, and avoid performative agreement.
Files
Receiving Code Review
Core Principle
Verify before implementing. Technical correctness matters more than social comfort. A reviewer can be wrong -- blindly implementing bad suggestions creates bugs.
Response Pattern
For each piece of feedback, follow this sequence:
0. Prior feedback check (re-reviews only) -- if this is not the first review round, check whether previously flagged issues were addressed before processing new comments. Compare the current diff against prior review threads (gh api repos/{owner}/{repo}/pulls/{pr}/comments). Surface any that were ignored or only partially fixed -- these take priority over new feedback.
1. Read -- Understand what's being suggested and why 2. Verify -- Is the suggestion technically correct for THIS codebase? 3. Evaluate -- Does it improve the code, or is it preference/style? 4. Respond -- Agree with evidence, disagree with evidence, or ask for clarification 5. Implement -- Only after verification confirms the suggestion is correct
Triage all feedback first (see Implementation Order below), then implement one item at a time. Don't batch-implement everything at once.
Handling Unclear Feedback
When feedback is ambiguous or incomplete:
- Stop -- do not implement anything unclear
- Clarify ALL unclear items before implementing ANY of them (they may be related)
- Ask specific questions: "Are you suggesting X or Y?" not "Can you elaborate?"
- If the reviewer's intent is clear but the technical approach is wrong, say so
Batched clarification for critical-path ambiguity: When multiple ambiguous findings land on critical-path code (auth, payments, data migrations, permission checks) AND the AskUserQuestion tool is available, batch up to 4 of them into a single call rather than asking one at a time. Each question's header is the truncated filename and line, and the options are Valid / False positive / Defer. Skip the batched ask entirely when ambiguous findings are only on non-critical paths — just auto-triage those and move on. If AskUserQuestion is not available, fall back to a single prose block listing all ambiguous items numbered, asking for Valid/False-positive/Defer decisions. The batching limit is 4 because it caps cleanly at that size; asking more becomes noise rather than judgment.
Source-Specific Handling
From the user (project owner)
- Trusted context -- they know the codebase and business requirements
- Implement after understanding, but still verify technical correctness
- Ask clarifying questions when the intent is clear but the approach seems risky
- No performative agreement -- just acknowledge and implement
From automated review agents
- Skeptical by default -- agents lack full context
- Verify every suggestion against the actual codebase
- Check for YAGNI violations (agents love adding "just in case" code)
- Discard suggestions that contradict project conventions (check CLAUDE.md)
- Agents may flag things that are intentional design decisions -- check before changing
From external reviewers (PR comments, open source)
- Verify technical correctness for THIS stack and codebase
- Check if the suggestion applies to this version of the framework/library
- Push back if the reviewer lacks context about architectural decisions
- Distinguish between "this is wrong" and "I would do it differently"
When to Push Back
Push back (with evidence) when a suggestion:
- Breaks existing functionality -- "This would break X because Y depends on Z"
- Violates project conventions -- "Our CLAUDE.md specifies we do it this way because..."
- Is technically incorrect -- "This API was deprecated in v3. We're on v4 which uses..."
- Adds unnecessary complexity -- "This handles a case that can't occur because..."
- Is unused (YAGNI) -- when a reviewer suggests "implementing properly", grep the codebase for actual usage FIRST. Zero callers? Suggest removal: "This endpoint isn't called. Remove it (YAGNI)?" If used, implement properly.
- Conflicts with architectural decisions -- "We chose X over Y in the brainstorm because..."
Valid evidence: code references (file:line), test output, git blame/log, framework docs, reproduction steps, grep results showing usage patterns. Not evidence: "I think", "it should work", "it's fine", appeals to convention without citing the convention, or restating the original code as justification.
False-Positive Taxonomy (for dismissed suggestions)
When dismissing a suggestion (AUTO-DECLINE, manual push-back), tag the dismissal with one of four categories so the reviewer sees structured reasoning, not a bare "no":
| Category | Reviewer's response cited | Evidence required | Maps to "When to Push Back" |
|---|---|---|---|
| FP-ASSUMPTION | Reviewer assumed behavior that doesn't match the code | Quote the specific line that contradicts the assumption | "Is technically incorrect" |
| FP-CONVENTION | Suggestion conflicts with this project's conventions | Cite the CLAUDE.md rule, ADR, or the established pattern in file:line | "Violates project conventions" |
| FP-ALREADY-HANDLED | The concern is handled elsewhere (parent function, middleware, framework) | Show the existing handler in file:line | "Adds unnecessary complexity" |
| FP-OUT-OF-SCOPE | Valid concern but belongs in a separate change | State where it will be tracked (issue, todo, next PR) | YAGNI / scope creep |
Use the tag in the reply: "FP-ALREADY-HANDLED: null check happens in auth/middleware.ts:42 before this handler runs. Keeping as-is." Structured tags prevent the "you're wrong because reasons" reply pattern and make future triage faster (if the same comment class keeps hitting FP-CONVENTION, the convention needs better documentation).
When NOT to Push Back
Accept feedback when:
- The suggestion is correct and you missed something
- It catches a genuine bug or edge case
- It improves readability without changing behavior
- It aligns with project conventions you overlooked
- The reviewer has domain expertise you lack
Common Mistakes
| Mistake | Fix |
|---|---|
| Agreeing before verifying | Verify first, then state what you found |
| Implementing without understanding impact | Trace the change through callers before editing |
| Apologizing instead of fixing | State the correction factually, then implement |
| Thanking the reviewer instead of responding technically | Delete "Thanks" -- state the fix instead |
| Pushing back without evidence | Include the specific code path or test that proves your point |
| Batch-implementing then testing | Test after each individual fix |
| Can't verify the suggestion | Say so: "Can't verify this without [X]. Should I [investigate/ask/proceed]?" -- don't guess or implement blind |
| Treating your own fix as already-correct | A fix is new code -- re-review it adversarially, not just "does it address the finding?". Three shapes recur and the suite usually misses all three: a shared-helper default that violates an invariant you set elsewhere in the batch; a loosened guard now admitting bad input; a tightened matcher now dropping good values. Name one concrete bad/missed case for each shape the fix touches before claiming done |
Approved Response Templates
When feedback IS correct: "Verified -- [specific issue]. Implementing [specific fix]." When feedback is partially correct: "The [X part] is right because [reason]. The [Y part] doesn't apply here because [evidence]." When you need clarification: "Can you clarify [specific ambiguity]? The comment could mean [A] or [B], which changes the fix."
Implementation Order
After triaging all feedback:
1. Clarify -- resolve all unclear items first 2. Blocking issues -- fix things that break functionality 3. Simple fixes -- quick wins that are clearly correct 4. Complex fixes -- changes that need careful implementation
Test after each individual fix, not after implementing everything.
When Your Pushback Was Wrong
State the correction factually: "Checked this, you're correct because [reason]. Implementing." No extended apology, no self-deprecation -- just acknowledge and move on.
GitHub PR Reviews
- Reply in the inline comment thread, not as top-level PR comments:
gh api repos/{owner}/{repo}/pulls/{pr}/comments -f body="..." -f in_reply_to={comment_id} - Reference specific lines when explaining why you disagree
- Mark conversations as resolved only after the fix is verified
- If a suggestion spawns a larger discussion, suggest moving it to an issue
Headless Mode
When invoked programmatically (by another skill or command with mode:headless), skip interactive prompts and return structured triage results. See headless-mode.md for the classification table (AUTO-FIX / AUTO-DECLINE / ESCALATE), output format, and constraints.
Scope vs ia-pr-comment-resolver Agent
This skill and the ia-pr-comment-resolver agent handle different situations:
| This skill (interactive) | This skill (headless) | ia-pr-comment-resolver agent | |
|---|---|---|---|
| When | Interactive review requiring judgment | Programmatic triage by another skill/command | Implementing a single pre-triaged comment |
| Approach | Verify, evaluate, potentially push back | Auto-classify and return triage results | Implement a single pre-classified change |
| Skepticism | High -- check correctness first | High -- same rules, automated classification | Low -- comments are pre-triaged |
| Use for | Unclear suggestions, architectural feedback | Batch triage before dispatching resolvers | Clear-cut fixes, style nits, typos |
When the ia-pr-comment-resolver agent encounters feedback that requires judgment (architectural decisions, debatable trade-offs), it should escalate rather than implement.
Examples
Bad -- performative agreement:
Reviewer: "This should use a Map instead of an object for better performance."
Response: "Great catch! Switching to Map now."
Good -- verify first:
Reviewer: "This should use a Map instead of an object for better performance."
Response: "Checked this -- the object has at most 5 keys (bounded by the enum). Map overhead isn't justified here. Keeping as-is."
Bad -- blind implementation:
Reviewer: "Add null checks for the user parameter."
Response: "Done, added null checks."
Good -- verify the premise:
Reviewer: "Add null checks for the user parameter."
Response: "Traced the call chain -- user comes from the auth middleware which guarantees non-null (throws 401 otherwise). Adding a null check here would be dead code. Should I add it anyway for defense-in-depth?"Good -- unclear item:
Reviewer: "This logic seems off."
Response: "Can you clarify which part? The filter predicate, the sort order, or the pagination logic?"
Verify
- All feedback items triaged (classified as correct, incorrect, or unclear)
- Ambiguous items clarified before any implementation
- Each fix verified individually (test after each, not batch)
- No performative agreement phrases in responses ("Great catch!", "Absolutely right")
Integration
This skill pairs with:
ia-code-review-- the outbound side (requesting reviews). Their action-routing tiers (safe_auto/gated_auto/manual/advisory) roughly map to this skill's AUTO-FIX / ESCALATE-for-approval / ESCALATE / FYI.ia-pr-comment-resolveragent -- for mechanical PR comment resolution (see scope table above)ia-verification-before-completion-- verify each fix before marking resolved
Headless Mode
When invoked programmatically (by another skill or command with mode:headless), skip interactive prompts and return structured triage results.
Triage Process
1. Collect -- gather all unresolved review comments from the PR 2. Check prior feedback -- if prior review comments exist (re-review), flag previously ignored or partially addressed items. Skip on first-time reviews. 3. Classify each comment using the same verification logic as interactive mode:
| Classification | Criteria | Action |
|---|---|---|
| AUTO-FIX | Clearly correct, matches project conventions, mechanical change (<10 lines), passes source-specific checks | Classify for ia-pr-comment-resolver dispatch |
| AUTO-DECLINE | Technically incorrect (provable with code evidence), contradicts project conventions, YAGNI (zero callers via grep) | Draft push-back response with evidence |
| ESCALATE | Ambiguous intent, architectural decision, reasonable engineers could disagree, changes user-visible behavior | Surface to user with context summary |
4. Return structured output:
TRIAGE RESULTS:
- AUTO-FIX (N items): [list with one-line summaries]
- AUTO-DECLINE (N items): [list with evidence for each]
- ESCALATE (N items): [list with why each needs human judgment]
- PRIOR FEEDBACK: [addressed|partially addressed|ignored] with specificsConstraints
- Never auto-fix security-related suggestions -- always escalate
- Never auto-decline feedback from the project owner -- escalate instead
- Apply the same skepticism levels from Source-Specific Handling (agents: skeptical, external: verify, owner: trusted)
- If >50% of comments classify as ESCALATE, abort headless mode and recommend interactive review
ia-receiving-code-review Specification
Intent
ia-receiving-code-review is a discipline-class skill (an engineering practice not tied to one stack). Process code review feedback critically: check correctness before acting, push back on incorrect suggestions, no performative agreement. Use when responding to PR/MR review comments or implementing reviewer suggestions received from others.
Scope
In scope:
- Behaviors described in
SKILL.mdand routed via the should_trigger phrasings indistillery/tests/fixtures/triggers/ia-receiving-code-review.jsonl. - Updates to runtime behavior, structure, trigger precision, references, and validation.
Out of scope:
- Acting as the runtime instructions themselves (those live in
SKILL.md). - Trigger phrasings already covered by adjacent
ia-*skills (validate-pluginflags >70% description overlap as DUPLICATE_TRIGGER). - <!-- to fill in: domain-specific exclusions when the skill drifts -->
Trigger Context
- Class:
discipline - Hook regex:
plugins/whetstone/hooks/skill-patterns.sh->SKILL_PATTERNS[ia-receiving-code-review] - Common requests (from fixture should_trigger):
- "the reviewer suggested we use a factory pattern instead"
- "address the review comments on the PR"
- "respond to the reviewer comments on my PR"
- Should not trigger for (from fixture should_not_trigger):
- "deploy the staging environment to AWS"
- "create a new database migration for orders"
- "review someone else's PR"
Source And Evidence Model
Authoritative sources:
SKILL.md-- runtime instructions and reference routing.references/*.md-- bundled supplementary content (1 file(s)).distillery/tests/fixtures/triggers/ia-receiving-code-review.jsonl-- positive and negative trigger phrasings under regression test.plugins/whetstone/hooks/skill-patterns.sh-- regex pattern that fires this skill.distillery/.eval-data/ia-receiving-code-review/-- harvested session examples (when present).
Data that must not be stored in this skill or its references:
- Secrets, credentials, tokens.
- Machine-specific filesystem paths (
/home/...,/Users/...,~/ai/...). The validator (MACHINE_PATH_LEAK) flags these as HIGH. - Private URLs, customer data, or unredacted personal information.
Coverage matrix
| Dimension | Status | Evidence |
|---|---|---|
| Trigger fixtures | complete | distillery/tests/fixtures/triggers/ia-receiving-code-review.jsonl (>=5 should_trigger, >=5 should_not_trigger) |
| Hook regex pattern | complete | plugins/whetstone/hooks/skill-patterns.sh (SKILL_PATTERNS[ia-receiving-code-review]) |
| Reference architecture | complete | 1 file(s) under references/ |
| Real-usage signal | <!-- populated by harvest-sessions when sessions exist --> | distillery/.eval-data/ia-receiving-code-review/ (created by harvest-sessions) |
Evaluation
Lightweight (run on every change):
python3 distillery/scripts/distiller.py validate-plugin --component ia-receiving-code-review
python3 distillery/scripts/distiller.py test-triggers --skill ia-receiving-code-reviewDeeper (when behavior risk warrants):
python3 distillery/scripts/distiller.py dspy-eval ia-receiving-code-review
python3 distillery/scripts/distiller.py diagnose-negatives ia-receiving-code-reviewAcceptance gates:
validate-plugin --component ia-receiving-code-reviewreturns 0 HIGH findings.test-triggers --skill ia-receiving-code-reviewreturns F1 = 1.0 with floors of 5 should_trigger and 5 should_not_trigger.- For dspy-eval, the composite score does not regress against the most recent saved baseline (see
distillery/.eval-data/ia-receiving-code-review/history.json).
Known Limitations
<!-- to fill in over time as drift surfaces. Default rule: any time diagnose-negatives surfaces a recurring failure pattern, document it here so future maintainers understand the trade-off the current implementation accepts. -->
Maintenance Notes
- Update
SKILL.mdwhen the runtime workflow, branch conditions, or output contract changes. - Update this
SPEC.mdwhen intent, scope, evidence model, evaluation gates, or maintenance expectations change. - Update the trigger fixture when adding new positive phrasings, removing stale ones, or expanding scope (the 5/5 floor is a hard validator gate).
- Update the hook regex in
skill-patterns.shwhenever fixture positives expose a missed phrasing; verify F1 = 1.0 witheval-triggersbefore committing. - Run the full release pipeline via
/release-- never bump versions or update CHANGELOG.md from a per-skill edit.