The very first review comment you post on any PR must begin with this exact sentence, verbatim:
I am an AI and make mistakes. If you feel that any of my review items are incorrect, please don't hesitate to push back.
This is a hard requirement. Authors should know up front that pushback is welcome and respected.
When reviewing code, refer to (do not duplicate or quote) these existing repo docs for project conventions, conventions for tool design, testing patterns, and release automation:
- AGENTS.md — conventions for AI coding agents working on this repo (sandbox rules, PR workflow, boundaries)
- CONTRIBUTING.md — human-contributor guide (local dev setup, PR template walkthrough, prefix conventions, release-notes expectations)
- README.md — project overview and feature catalog
- SKILL.md — tool reference and usage patterns
- TOOL_GUIDE.md — detailed per-tool documentation
- docs/testing.md — Spock test harness conventions, including the rule that every new MCP tool must ship with unit tests
- docs/release-automation-design.md — how the release bot consumes PR metadata
Link to these docs from your review comments when relevant; do not paste their content.
The three checks below are soft requests, not blockers. Phrase them as suggestions in your review ("Consider adding…", "Could you clarify…"). Do not mark a PR as blocked, do not use a "Request changes" review state, and do not lower the overall review verdict solely because of one of these. The author may push back; if they do, defer to them.
Every non-Dependabot PR description should contain a ## Release Notes heading followed by at least one bulleted item (- or *). The matcher is lenient: the heading match is case-insensitive ("release notes", "Release Notes", "RELEASE NOTES" all valid), an optional trailing colon is fine, and any markdown heading level (h1–h6) counts.
If the section is missing, empty, or contains only prose with no bullets, ask the author to add bulleted release notes. In your comment, explain why this matters: these bullets are what HPM users see in the update prompt when they upgrade the rule app. They should be written for end users, not developers — short, scannable, free of internal jargon. Sub-bullets are supported (nest with any leading whitespace) for grouping related details under one top-level point.
Every non-Dependabot PR title should start with one of these prefixes (lowercase, trailing colon):
feat:— new featurefix:— bug fixchore:— maintenance / non-feature workrefactor:— code restructuring with no behavior changedocs:— documentation onlytest:— tests onlyci:— CI / workflow changes only
(build: is reserved for Dependabot — contributors are instructed not to use it.)
The PR template has a "Type of change" checkbox section. The prefix the author chose for the PR title and the box they ticked must agree. If they disagree (for example, the title is feat: but the fix box is ticked), call it out as a suggestion and ask the author to correct one of them so the metadata is consistent.
Best-effort judgment: read the diff and decide whether the prefix and ticked checkbox accurately describe the change.
- If the title says
feat:but the diff is purely an internal refactor with no new user-visible capability, suggest arefactor:reclassification. - If the title says
fix:but the diff adds a new tool or new behavior, suggestfeat:. - If the title says
docs:but the diff edits Groovy logic, suggest the appropriate code prefix.
This check is judgmental and you may misread the diff. That is expected and acceptable. Raise it as a suggestion only ("This looks more like a refactor than a feature — would you consider relabeling?"), not as a hard finding. Author pushback ends the discussion.
When a PR adds or renames an MCP tool, best-effort judgement: does the tool follow the conventions in AGENTS.md § Tool design rules? Eight broad areas to look at:
- Naming —
hub_prefix present; verb from the allowed vocabulary;manage_used only for gateways (or the documented flat-multi-action exception). - Parameter names — unambiguous (e.g.
device_idnotid); semantic over wired. - Annotations — all four hints (
readOnlyHint/destructiveHint/idempotentHint/openWorldHint) set explicitly. - Description quality — concise first line; usage guidance; write-tool safety warnings present; semantic IDs over opaque UUIDs.
- Consolidation candidates — verb-pair tools (enable/disable, pause/resume, etc.) suggested for merge into a single
set_<noun>_<attribute>tool; always-called-in-sequence tools flagged. - Schema design —
enumfor fixed-set free-text params;requiredonly when applicable;outputSchemapresent for structured returns. - Error contracts — validation throws
IllegalArgumentException; runtime returns[success: false, error, note];isError: truefor tool-execution errors; error text is recovery-oriented. - Pagination — cursor support on any tool that can return a long list.
Raise mismatches as suggestions only (e.g. "Consider hub_get_room_health instead of check_room_health — check folds into get in the verb vocabulary"). Don't mark as blocking, don't lower the verdict for naming nits. Author pushback ends the discussion.