name: d3hunter-pr-reviewing description: Use when reviewing behavior-changing pull requests where correctness, compatibility, failure semantics, concurrency safety, and test adequacy need a structured second-opinion check.
PR Reviewing (D3Hunter Style)
Overview
Review for correctness and operational safety first, then maintainability.
The comment style is concise and action-oriented:
- ask direct questions when intent is unclear
- propose a concrete alternative when possible
- request tests for risk-bearing behavior
- use small inline suggestion blocks for local rewrites
Use references/phrase-bank.md as a required tone source before drafting final comments.
When To Use
Use this skill when a PR likely changes behavior and needs a structured second-opinion pass.
Typical triggers:
- touches versioned metadata, bootstrap, or migration paths
- changes retry/cancel/context/lifecycle behavior
- changes concurrency, locking, or task scheduling flow
- changes compatibility behavior across upgrade/downgrade or mixed-version nodes
- modifies failure classification, logging/observability, or fallback paths
- changes tests for critical behavior, negative paths, or determinism guarantees
When Not To Use
Do not use this skill as the primary workflow when:
- the request is purely mechanical formatting/lint cleanup with no behavior impact
- the diff is fully generated code where manual style feedback adds little value
- changes are typo-only or wording-only and do not affect business semantics
In those cases, keep feedback minimal and mechanical.
Review Order (Default Sequence)
- Correctness and invariants
- Compatibility and upgrade safety
- Code structure, package boundaries, and duplication
- Failure semantics and observability
- Concurrency, context, and lifecycle
- Scope and complexity
- Performance and scaling
- API clarity and naming
- Comments and intent documentation
- Test quality and coverage
Risk-Adaptive Entry (Hotspot First)
Use this fast-path before the full checklist when the PR is large or high risk.
Hotspot activation signals:
- touches
pkg/ddl,pkg/meta,pkg/session/bootstrap,pkg/disttask,pkg/lightning - touches transaction/lock/retry/cancel behavior
- spans many files/packages and needs quick risk triage
Hotspot pass:
- Identify hotspot files/modules first.
- Prioritize checks
1, 2, 3, 4, 5, 7, 10in those hotspots. - If Blocker/Major evidence appears, report early with concrete scope and evidence.
- Then complete the full
1 -> 10default sequence for the entire diff (including hotspot files). - Before posting final output, verify each hotspot file/module has at least one pass over all
1 -> 10categories (or mark explicitN/Afor category/file pairs that truly do not apply).
Review Workflow (Execution Checklist)
Copy this checklist and track progress:
Review Progress:
- [ ] Step 1: Triage diff scope (behavioral vs mechanical-only changes) and identify hotspots
- [ ] Step 2: If hotspot-eligible, run Hotspot First pass; then run full Review Order (1 -> 10) across the entire diff (hotspots + non-hotspots) using `references/checklist-by-category.md`
- [ ] Step 3: Apply Evidence Gate and Confidence-to-Action Matrix for each non-trivial finding
- [ ] Step 4: Run D3Hunter wording pass using [references/phrase-bank.md](references/phrase-bank.md) for each drafted finding
- [ ] Step 5: Select output mode (Threaded Review Mode vs Inline Comment Mode vs Standalone Summary Mode)
- [ ] Step 6: Assign severity and include required rubric fields in posted output
- [ ] Step 7: Produce output using Review Output Contract
Stop conditions (do not proceed to prescriptive feedback until resolved):
- no objective signal for a non-trivial issue -> ask a clarifying question instead of prescribing a fix
- cannot name concrete scope (
file/line/module) -> gather more evidence first - cannot state concrete risk if unchanged -> downgrade to suggestion/question
- behavior changes are not test-backed and cannot be reasoned from diff -> require targeted validation before merge
- any required category checks in the Review Order pass are incomplete -> do not post final output
Review Output Contract
Use this contract for all final review output.
Global Rules (all output modes)
- Add this exact bold attribution line once in summary sections only:
**AI-generated review based on @D3Hunter’s standards; manual follow-up after comments are addressed.** - Do not repeat the attribution line inside per-finding items/comments (for example,
comments[]entries in a single GitHub review object). - One finding = one actionable issue.
- Sort by risk: present highest-risk findings first.
- Tone guardrail: each finding must use at least one adapted stem from references/phrase-bank.md (opener or change-request line).
- No-findings gate: do not output
No findings.unless the full Review Order pass (1 -> 10) is completed. - Non-trivial findings must include severity plus all 5 rubric fields:
Why,Scope,Risk if unchanged,Evidence,Change request. - Markdown structure is required: use section titles (
###/####) and bold field labels (**Why**,**Scope**, etc.) exactly as shown in templates. - Severity line format is required: use emoji + bold severity tag (
🚨 **[Blocker]**,⚠️ **[Major]**,🟡 **[Minor]**,ℹ️ **[Info]**,🧹 **[Nit]**). - Nit/Info findings can be shorter, but must still be explicit about scope and requested change.
Canonical templates and payload examples are in:
Shared finding structure for non-trivial findings:
Severityline (<emoji> **[Severity]** <short title>)WhyScopeRisk if unchangedEvidenceChange request
Inline Comment Mode
Use when posting direct line-level comments without a summary thread.
Requirements:
- one finding = one actionable issue
- each non-trivial finding uses severity + the full 5-field rubric above
- Nit/Info findings stay short but explicit about scope and ask
- do not prepend the attribution line in individual inline comment bodies
- template: references/output-examples.md
Threaded Review Mode (default when platform supports replies)
Top-level summary comment (exactly one)
- start with
Findings (highest risk first) - include a concise index only (
severity,title,scope,risk if unchangedin one line per finding) - do not expand the full severity + 5-field rubric in the top-level summary
- end with
Required validation before merge - template: references/output-examples.md
Sub-comments under the summary thread
- post one sub-comment per finding
- one finding = one actionable issue
- non-trivial findings must include severity + full 5-field rubric (
Why,Scope,Risk if unchanged,Evidence,Change request) - Nit/Info findings may be shorter but must keep clear scope and ask
- template: references/output-examples.md
GitHub PR submission contract (required when posting via gh api)
- create exactly one review object via
POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews - set summary content in review
body(use the top-level summary template, including the attribution line once) - put each finding in a separate item in
comments[](one finding = one inline comment object) - do not include the attribution line inside
comments[]item bodies - submit once with
event=COMMENT; do not post one review per finding - if any finding has no valid inline anchor, keep it in summary body and still submit one review object
- payload shape example: references/output-examples.md
Standalone Summary Mode (single comment fallback)
Use when reply threads/sub-comments are unavailable, or when a single-summary output is explicitly requested.
Requirements:
- start with
Findings (highest risk first) - list findings in risk order
- every non-trivial finding includes severity + the same 5 rubric fields used in Inline Comment Mode
- end with
Required validation before mergeand concrete test/verification items - template: references/output-examples.md
No-findings Mode
Required output:
- write
No findings. - include
Residual risks / verification gaps - include
Suggested validation - only use this mode after the full Review Order pass (
1 -> 10) is completed - template: references/output-examples.md
Core Checklist
Use 1 -> 10 as the default pass order for every behavior-changing review.
Detailed checks, heuristics, and phrase stems live in:
Quick category index:
- Correctness and invariants
- Compatibility and upgrade safety
- Code structure, encapsulation, and duplication
- Failure semantics and observability
- Concurrency, context, and lifecycle
- Scope and complexity
- Performance and scaling
- API clarity and naming
- Comments and intent documentation
- Tests and determinism
D3Hunter Wording Pass (Required)
Run this pass before posting any comment:
- Select one stem family in references/phrase-bank.md:
clarify intent,request change,tests and validation,comments and rationale, orcompatibility and scale. - Adapt one stem to the exact code scope and evidence from the current diff. Do not leave generic wording.
- Keep the opening short and direct (for example:
why,can we,please add,seems no need), then provide full rubric fields for non-trivial findings. - Keep one comment to one actionable issue. Split comments if there are multiple asks.
- Avoid robotic repetition: if the same stem appears in nearby comments, switch to another stem from the same family.
Finding Decision Pipeline (Single Flow)
Use this pipeline for every non-trivial finding. Do not skip steps.
Confidence-to-Action Matrix
| Confidence | Minimum evidence bar | Allowed action | Default severity band | Merge stance |
|---|---|---|---|---|
| High | clear objective evidence + concrete risk if unchanged | prescriptive change request | Blocker or Major based on risk class | blocking when risk is correctness/safety/compatibility/lifecycle/performance critical |
| Medium | partial evidence + plausible risk | request targeted validation; avoid hard prescription unless validated | Major or Minor | non-blocking until validation confirms risk |
| Low | weak/unclear evidence or risk statement | ask clarifying questions only; no prescriptive fix | Info or Nit | non-blocking |
- Scope one issue:
- one finding = one actionable issue
- if the issue is comment-related, decide first:
- non-obvious/business-decision logic -> ask for a short
whycomment - comment only restates obvious workflow -> suggest removing it
- changed branch condition/invariant with stale rationale -> request comment update
- non-obvious/business-decision logic -> ask for a short
- Apply Evidence Gate (false-positive guard):
- before prescribing a fix, confirm at least one objective signal:
- invariant mismatch
- reproducible failing scenario (test/case/path)
- contradiction between code path and expected behavior
- measurable performance or scale risk
- concrete structure/duplication smell visible in the diff
- duplicate definition in one scope (for example duplicated
select $$fixture entry) with overwrite/shadowing risk
- if no objective signal is available, ask a clarifying question first and stop escalation
- before prescribing a fix, confirm at least one objective signal:
- Assign confidence and action using the
Confidence-to-Action Matrix:- if confidence changes after new evidence, update severity and requested action
- Assign severity and merge policy:
- Blocker: invariant break, correctness regression risk, data race risk, wrong failure model
- action: must fix before merge
- Major: strong package-boundary coupling, high-scale performance risk, cancellation/lifecycle bug, critical missing test
- action: fix before merge, or document explicit justification with follow-up tracking
- Minor: naming/placement/readability or low-risk cleanup
- action: optional in current PR; may defer if acknowledged
- Info: observation or low-risk concern worth validation
- action: non-blocking; acknowledge and optionally track
- Nit: tiny style/wording preference with negligible risk
- action: fully optional; do not block merge
- Blocker: invariant break, correctness regression risk, data race risk, wrong failure model
- Format output with severity + the 5-field rubric (inline or summary):
why: why this matters (correctness, readability, testability, performance, maintainability)scope: exact change boundary (line/block/file/module)risk if unchanged: concrete consequenceevidence: observed behavior, contradiction, failing path, or measurable signalchange request: specific and actionable fix direction
- Choose output mode and render using
Review Output Contract:- Threaded Review Mode (default when reply threads exist): one top-level summary + per-finding sub-comments
- Inline Comment Mode: direct line-level finding comments without a summary thread
- Standalone Summary Mode: single-comment fallback when sub-comments/reply threads are unavailable or explicitly requested
- Final summary contract:
- list findings first, highest risk first
- every non-trivial finding must include all required fields
- end with required validation/tests before merge
Comment Decision Flow
Comment-related decisions are handled in Step 1 of Finding Decision Pipeline (Single Flow).
Do not run a separate decision path; keep one issue per finding.
Comment Writing Rules
- Keep one comment to one actionable point.
- Phrase bank is mandatory input for wording: draft each comment with one adapted stem from references/phrase-bank.md.
- Prefer frequent D3Hunter starters when they match evidence:
why,can we,please,seems,maybe. - Use stems as scaffolding, not copy-paste text; always bind wording to concrete scope/risk/evidence.
- Prefer question + direction instead of vague criticism.
- Use imperative short form for clear requests.
- For repeated issues in nearby code, comment once and include explicit repeat scope (
path:linelist or block range). - Use
suggestionblocks only for small local changes. - Extract by responsibility boundary, not line count alone.
- Avoid utility dumping; keep helpers near the dominant caller unless multi-package reuse is real.
- Prefer unexported helper methods first; export only when cross-package reuse is required.
- Add comments for non-obvious logic and business-driven branches, focusing on
why. - Avoid comments for plain workflow code that is already readable.
- Keep comments concise and durable; prefer intent/invariant over restating code.
- For Blocker/Major findings or summary output, expand shorthand into full rubric fields (
why/scope/risk/evidence/change request).
Compact Drafting Helper
Use this while drafting, then expand to full severity + 5-field rubric before posting:
Issue: one sentenceWhy: one sentenceScope: one sentenceEvidence: one sentenceAsk: one sentence (Askmaps tochange request)
Examples:
Issue: this branch is business-rule driven but has no rationale comment. Why: future changes may break compatibility silently. Change request: add a short why-comment with the decision/invariant.Issue: same validation logic appears in 3 places. Why: behavior drift and test duplication risk. Change request: extract one helper near the dominant caller and reuse it.
References
- category-level checklist and templates:
- phrase stems:
- output templates and examples: