# Hodios paste pack: Code review

Everything in Code review from Hodios, the open prompt library by Hermes IDE: 10 entries, catalog 2026.1003.0.

Every entry is dedicated to the public domain under CC0 1.0. Copy, change and share them freely, no attribution needed.

Browse and search the library at https://hermes-ide.com/prompts

## How to use

Find an entry below and copy the text inside its block into ChatGPT, claude.ai or any chat. Replace each [PLACEHOLDER] with your own material. Personas, rules and styles work best as custom instructions or project instructions.

## Contents

- Code review
  - [Code reviewer](#code-reviewer) (persona)
  - [Respond to code review comments](#respond-to-review-comments) (prompt)
  - [Review a diff for shipping risks](#review-diff-for-risks) (prompt)
  - [Review a pull request](#review-pull-request) (prompt)
  - [Review AI-generated code](#review-ai-generated-code) (prompt)
  - [Review an API change for breaking changes](#review-api-breaking-changes) (prompt)
  - [Review error handling](#review-error-handling) (prompt)
  - [Self-review a branch before opening a PR](#self-review-before-pr) (prompt)
  - [Walk a reviewer through a pull request](#walk-through-pull-request) (prompt)
  - [Write code review guidelines](#write-code-review-guidelines) (prompt)

---

<a id="code-reviewer"></a>

## Code reviewer

`code-reviewer` · persona · Code review · https://hermes-ide.com/prompts/code-reviewer

Reviews changes like a senior engineer who blocks only on real defects, backs every finding with a triggering input, and keeps style opinions out. Use as a reviewer persona or subagent.

````markdown
From now on, work as this persona: Code reviewer.

You are a senior engineer reviewing someone else's change. Your job is to stop defects from merging and to leave the author better informed, not to make the code look the way you would have written it.

How you work:
- You read the whole change before commenting on any part of it, then you read the surrounding code the change depends on: callers, the types it uses, and the tests that cover it.
- You state what the change is meant to do, in one sentence, and judge every hunk against that.
- For each suspected defect you construct the input or the sequence of events that triggers it. If you cannot, you drop it or ask it as a question.
- You check that changed behaviour has a test that would fail without the change, and that the test asserts the behaviour rather than the implementation.
- You look past the diff when it matters: a changed function signature means you check its callers; a new field in a serialized type means you check who else reads it.

What you flag:
- Wrong results: inverted or off-by-one conditions, missing cases, incorrect error handling, null and empty inputs, time zones, integer overflow, floating-point money.
- Broken contracts: changed public APIs, schemas, formats or defaults that other code or older versions depend on.
- Concurrency and state: races, shared mutable state, missing idempotency, transactions that do not cover the whole operation.
- Resource problems: leaks, unbounded growth, work inside loops that should be outside them.
- Missing or weak tests for the behaviour that changed.
- Security issues you notice in passing. You name them and recommend a dedicated security review rather than auditing the whole change yourself.

Your habits:
- You cite `path:line` for every finding and give the fix in one sentence.
- You rank findings by severity and label each one: blocking, should fix, or question.
- You never block on formatting, naming or personal style. A linter or formatter owns those.
- You say plainly when a change is good and what makes it safe. An approval with no findings is a valid review.
- When you are unsure, you ask a question instead of asserting.
````

---

<a id="respond-to-review-comments"></a>

## Respond to code review comments

`respond-to-review-comments` · prompt · Code review · https://hermes-ide.com/prompts/respond-to-review-comments

Triages each review comment as fix, discuss or decline with a reason, drafts the replies, and applies the agreed fixes. Use when a pull request comes back with reviewer feedback.

````markdown
<context>
Review feedback is a mix of real defects, preferences, questions and misunderstandings. Accepting everything bloats the change and sometimes makes it worse; arguing with everything burns trust. Each comment deserves a decision with a reason the reviewer can accept.
</context>

<task>
Work through these review comments:
[COMMENTS]

Mode: plan.
1. For each comment, read the code it points at, as it is now, before deciding anything.
2. Classify it:
   - **fix**: the reviewer is right, or the change is cheap and harmless.
   - **discuss**: it is a trade-off, a question, or you need information the reviewer has.
   - **decline**: it is wrong, out of scope for this change, or conflicts with another requirement. Give the concrete reason, and offer a follow-up issue when it is out of scope.
3. When two comments conflict, say so and propose one resolution.
4. In `apply` mode, make every **fix** change as the smallest edit that addresses the comment, and nothing else. In `plan` mode, change no files.
5. Draft a short reply for each comment.
</task>

<constraints>
- Be honest about reviewer mistakes, but polite. Show the evidence (code, docs, a test) instead of asserting.
- Never make an unrequested change while applying a fix.
- If a comment is ambiguous, classify it **discuss** and ask one precise question rather than guessing what the reviewer meant.
- Replies are plain and specific: what you changed and where, or why not. No thanking boilerplate, no apologies.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
- Do only what was asked. If you notice something else worth changing, mention it in one line at the end instead of changing it.
- Keep the change as small as it can be while still being correct.
</constraints>

<output_format>
## Triage
A table: # | Comment (short) | Decision (fix, discuss, decline) | Reason.
## Changes
In `apply` mode: the diff, grouped by comment number, plus the result of any test you ran. In `plan` mode: "None (plan mode)".
## Replies
For each comment number, the reply text, ready to paste.
</output_format>
````

---

<a id="review-diff-for-risks"></a>

## Review a diff for shipping risks

`review-diff-for-risks` · prompt · Code review · https://hermes-ide.com/prompts/review-diff-for-risks

Assesses what can go wrong when a change reaches production, such as broken contracts, unsafe migrations, rollout order and rollback, and proposes mitigations. Use before deploying a risky change.

````markdown
<context>
A change can be correct line by line and still cause an outage. Most bad deploys come from a broken contract, a migration that locks a large table, a deploy order nobody planned, or a failure path nobody watched. This review asks one question: what happens when this change meets production, existing data, older clients and the other services around it? It is not a style review and not a full correctness pass.
</context>

<task>
Assess the risk of shipping [DIFF]. If it is a PR URL or branch name, fetch the diff with the tools you have; if you cannot, ask for the diff once and stop.
1. Read the whole diff, then state in one sentence what behaviour changes.
2. Check each risk class below and keep only those the diff actually touches:
   - Contracts: public API, wire or serialization formats, events, CLI flags, config keys, environment variables, database schema. Anything that another component, or an older version of this one, reads or writes.
   - Data: migrations (locks, run time on large tables, reversibility), backfills, destructive writes, defaults applied to existing rows.
   - Rollout order: does the change need a specific deploy order between app and migration, or server and client? What breaks while old and new versions run side by side?
   - Failure paths: new network calls, timeouts, retries, idempotency, concurrency, resource limits, error handling.
   - Security surface: permission checks moved or removed, new untrusted input, secrets. Flag these and recommend a dedicated security review instead of doing one here.
   - Blast radius and reversibility: who is affected if it breaks, whether it sits behind a flag, whether rollback loses data.
   - Observability: will anyone know the new path is failing? Logs, metrics, alerts.
3. For each risk, describe the concrete scenario that triggers it: the input, the data state or the deploy step. Drop any risk you cannot tie to a line in the diff.
4. Propose the cheapest mitigation that closes each risk: a flag, an expand-then-contract migration, a guard, a test, a metric.
</task>

<constraints>
- Every risk cites `path:line` from the diff.
- When a risk depends on something outside the diff (callers, other services, table sizes, traffic), name what must be checked instead of assuming the answer.
- Do not comment on style, naming or formatting.
- If the diff is empty or unreadable, say so and stop. Do not invent a change to review.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
- Separate what you verified from what you inferred. Mark inferences as such.
- When you do not know, say "I don't know" once and state what would settle it.
</constraints>

<output_format>
## Risk level
`low`, `medium` or `high`, then one sentence saying why.
## Risks
A table with the columns # | Risk | Where | Scenario | Likelihood | Impact | Mitigation. Highest risk first, at most 8 rows. Write "None found" when there are none.
## Rollout
Numbered steps to ship safely (deploy order, flags, migration phases) and how to roll back. Two lines are enough for a low-risk change.
## Open questions
Questions for the author about what the diff alone cannot answer, or "None".
</output_format>
````

---

<a id="review-pull-request"></a>

## Review a pull request

`review-pull-request` · prompt · Code review · https://hermes-ide.com/prompts/review-pull-request

Reviews a pull request diff for correctness bugs, risky changes and missing tests, and returns ranked findings. Use before merging a PR, branch or diff.

````markdown
<context>
You are reviewing a change before it merges. The goal is to catch defects a careful senior reviewer would block on, not to restyle the code. Reviewers lose trust fast when findings are speculative, so every finding must point to a concrete line and a concrete failure.
</context>

<task>
Review [DIFF]. If it is a PR URL or branch name, fetch the diff with the tools you have; if you cannot, ask for the diff once and stop.
Weight your attention toward: all.
1. Read the whole diff once before judging any hunk.
2. For each suspected defect, trace the input that triggers it. Drop it if you cannot construct one.
3. Check that changed behaviour has a test that would fail without the change.
</task>

<constraints>
- Report at most 10 findings, ranked by severity.
- Do not comment on formatting, naming or style unless it causes a bug.
- Do only what was asked. If you notice something else worth changing, mention it in one line at the end instead of changing it.
- Keep the change as small as it can be while still being correct.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
</constraints>

<output_format>
## Verdict
One line: approve | approve-with-nits | request-changes.
## Findings
Numbered. Each: `path:line` — the defect — the triggering input — the fix in one sentence.
## Missing tests
Bullets, or "None".
</output_format>

<examples>
<example>
Input: a diff that changes `applyDiscount(order)` in `src/pricing.ts` from `if (order.total > 100)` to `if (order.total >= 100)` with no test change.

Output:

## Verdict
request-changes

## Findings
1. `src/pricing.ts:42` — orders of exactly 100.00 now get the discount, which changes revenue for the most common basket size — input: `{ total: 100 }` — confirm the business rule, then add a boundary test either way.

## Missing tests
- A test for `total: 100` that pins the intended boundary.
</example>
</examples>
````

---

<a id="review-ai-generated-code"></a>

## Review AI-generated code

`review-ai-generated-code` · prompt · Code review · https://hermes-ide.com/prompts/review-ai-generated-code

Reviews code written by an AI assistant for hallucinated APIs, over-engineering, swallowed errors, weakened tests and copy-paste drift. Use before merging a change an agent produced.

````markdown
<context>
Code from an AI assistant fails differently from code a colleague wrote. It compiles and reads fluently, so reviewers skim it, but it often calls functions or options that do not exist in the installed library version, adds layers and configuration nobody asked for, catches and discards errors so the happy path "works", edits or deletes tests until they pass, and repeats a pattern across files with small inconsistencies. It also changes files outside the task. This review looks for those failure modes specifically, on top of normal correctness.
</context>

<task>
Review this change:
<diff>
[DIFF]
</diff>

Check, in this order:
1. **Scope.** Compare the files and behaviour changed with the task. List changes the task did not call for (renames, reformatting, new dependencies, unrelated refactors, edited config). If no task description was given, say scope could not be checked.
2. **Hallucinated or misused APIs.** For every imported symbol, method, option, flag, environment variable and config key that the diff introduces, check that it exists in the code base or in the dependency version the project pins. If you can read the repository, look in lockfiles, vendored types or the dependency source. If you cannot verify one, list it as "unverified" rather than calling it wrong.
3. **Tests.** Flag deleted or skipped tests, loosened assertions (exact value replaced by "not null", snapshot regenerated wholesale), mocks that replace the unit under test, tests that assert the implementation instead of the behaviour, and special cases in production code that only exist to satisfy a test.
4. **Error handling.** Flag catch-all handlers that log and continue, empty catch blocks, default values that hide failures, retries without limits, and errors converted to success responses.
5. **Over-engineering.** Flag abstractions with one implementation, factories, strategy patterns and options objects for a single call site, speculative configuration, and new dependencies for a few lines of standard library code. Propose the simpler shape.
6. **Copy-paste drift.** Where similar blocks appear more than once, compare them line by line and flag the ones that differ in ways that look accidental (a different field name, a missing await, an off-by-one in one copy).
7. **Normal correctness and security** issues you find along the way: trace the input that triggers each one.
</task>

<constraints>
- Every finding cites `path:line` and names the concrete failure or cost. Drop anything you cannot tie to a line.
- Do not object to code just because an AI wrote it, and do not comment on formatting or naming unless it causes a defect.
- Report at most 12 findings, ranked by severity: blocker, major, minor.
- Mark each API finding "confirmed missing", "wrong signature" or "unverified", and say how you checked.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
- Separate what you verified from what you inferred. Mark inferences as such.
- When you do not know, say "I don't know" once and state what would settle it.
</constraints>

<output_format>
## Verdict
One line: approve | approve-with-changes | request-changes, and the single most important reason.
## Findings
A table: severity, `path:line`, category (scope, api, tests, errors, over-engineering, drift, correctness, security), the problem, the fix.
## Scope check
Bullets of out-of-scope changes to revert or split out, or "Within scope" or "Not checked: no task description".
## Questions for the author
Up to 5 questions the human who ran the assistant must answer before merge.
</output_format>
````

---

<a id="review-api-breaking-changes"></a>

## Review an API change for breaking changes

`review-api-breaking-changes` · prompt · Code review · https://hermes-ide.com/prompts/review-api-breaking-changes

Reviews an API diff or spec for changes that break existing clients, such as removed fields, changed semantics, new defaults, error changes and versioning gaps. Use before releasing.

````markdown
<context>
Schema diff tools catch removed fields and renamed operations. They miss the changes that break clients quietly: a field that is still there but now nullable, a default that changed, a new required request field, an enum value older clients cannot parse, a list that is now paginated, an error code that moved from 404 to 403, a stricter validation rule, or a different ordering that a client relied on. Whether a change breaks depends on the clients: an old mobile app version in the field cannot be upgraded, while internal services deployed in lockstep can absorb more.
</context>

<task>
Review this API change for client compatibility:
<diff_or_spec>
[DIFF_OR_SPEC]
</diff_or_spec>

Go through every change and classify it as breaking, risky (breaks some reasonable clients) or safe. Check at least:
1. **Removed or renamed:** operations, endpoints, fields, query parameters, enum values, headers, GraphQL types and fields, proto fields (and whether removed proto field numbers are marked `reserved`).
2. **Type and shape:** type changes, int to string ids, number precision, nullable or optional changes in either direction (response field becoming optional breaks readers; request field becoming required breaks writers), object to array, wrapping in an envelope, pagination added.
3. **Semantics:** a changed default, units, time zone, rounding, sort order, idempotency, side effects, or meaning of an existing field.
4. **Validation:** stricter formats, lengths, ranges, or newly rejected values.
5. **Errors:** changed status codes, error body shape or error codes clients branch on; new error cases on existing operations.
6. **Enums:** new values in responses (break clients that switch exhaustively unless they were told to expect unknown values).
7. **Auth and limits:** new scopes or permissions required, lower rate limits, smaller maximum page or payload sizes.
8. **Versioning:** whether the change is shipped behind a new version, a feature flag or a header, and whether the deprecation of the old behaviour is signalled.
For each breaking or risky change, give the specific client code that would fail and a compatible alternative (add a new field instead of changing one, accept both forms during a transition, version the operation, keep the old error code).
</task>

<constraints>
- Cite the exact location (path, operation, field or line) for every change you classify.
- Judge tolerance from the clients given; if none are given, assume external clients that cannot be upgraded in lockstep and say so.
- Do not call a change safe because a diff tool would; reason about semantics.
- Do not flag pure additions of optional request fields or new operations as breaking.
- Separate what you verified from what you inferred. Mark inferences as such.
- When you do not know, say "I don't know" once and state what would settle it.
</constraints>

<output_format>
## Verdict
One line: compatible | compatible with risks | breaking, and whether a version bump is required.
## Breaking changes
A table: location, change, which clients break and how, compatible alternative.
## Risky changes
Same columns.
## Safe changes
Bullets.
## Recommended path
Numbered steps to ship the intent without breaking clients, or the versioning and deprecation plan if a break is unavoidable.
## Tests to add
Contract or compatibility tests that would catch these in CI next time.
</output_format>
````

---

<a id="review-error-handling"></a>

## Review error handling

`review-error-handling` · prompt · Code review · https://hermes-ide.com/prompts/review-error-handling

Reviews failure paths for swallowed errors, lost context, unsafe retries, missing timeouts and internal details leaking to users, with ranked fixes. Use on code that calls I/O or external services.

````markdown
<context>
Error-handling defects stay invisible until production: an empty catch turns an outage into silent data loss, a retry loop around a non-idempotent call charges a customer twice, a missing timeout lets one slow dependency exhaust every worker, and a raw exception message shows a SQL query to an end user. General code review tends to skim these paths because the happy path is where the change is. This review reads only the failure paths, and reports each finding with the concrete failure it causes.
</context>

<task>
Review the error handling in:
[CODE]


For every call that can fail (I/O, network, database, parsing, external services, user input), follow what happens on failure and check:
1. **Swallowed errors:** empty catch or except blocks, ignored return values or error results, promises without a rejection handler, `catch` that logs and continues where the caller needs to know, fallbacks that hide failure (returning an empty list on error).
2. **Overly broad handling:** catching the base exception type or all errors where a specific one was meant, catching programming errors (null dereference, type errors) along with expected ones.
3. **Lost context:** rethrowing without the cause, replacing an error with a vaguer one, messages without the identifiers needed to debug (which order, which file), logging an error and also rethrowing it so it is logged twice.
4. **Leaks to users:** stack traces, SQL, file paths, hostnames or internal error text in responses or UI; inconsistent error formats or status codes for the same failure.
5. **Unsafe retries:** retrying non-idempotent operations without an idempotency key, no cap, no exponential backoff with jitter, retrying errors that are not transient (4xx, validation), retries nested at several layers.
6. **Timeouts and cancellation:** outbound calls without timeouts, timeouts longer than the caller's, cancellation not propagated.
7. **Cleanup and consistency:** resources not released on the error path (files, connections, locks), partial writes left behind, a multi-step operation that fails halfway with no rollback or compensation.
8. **Crash versus continue:** continuing after a failure that leaves the process in an invalid state, or crashing on a recoverable, expected error.

Rank findings by impact: data loss or corruption, then money or security, then outage, then debuggability.
</task>

<constraints>
- Each finding needs a location and a concrete failure scenario. If you cannot describe the input or condition that triggers it, drop it.
- Report at most 12 findings. Do not comment on style, naming or the happy path.
- Fixes must follow the language's idioms (wrapping with a cause, `errors.Is`/`%w` in Go, `raise … from` in Python, `Result` in Rust, `cause` in JavaScript) and the project's existing error types if visible.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
</constraints>

<output_format>
## Summary
One or two sentences: overall state and the most serious risk.
## Findings
Numbered, most severe first. Each: `location` — category from the list above — what happens on failure (the scenario) — impact.
## Fixes
For the top findings, a short code snippet of the corrected handling.
## What is done well
Bullets, or "Nothing notable".
</output_format>
````

---

<a id="self-review-before-pr"></a>

## Self-review a branch before opening a PR

`self-review-before-pr` · prompt · Code review · https://hermes-ide.com/prompts/self-review-before-pr

Reviews your own branch the way a strict reviewer would, catches debug leftovers, unrelated changes, missing tests and leaked secrets, and runs the checks. Use before requesting review.

````markdown
<context>
Reviewers spend most of their time on problems the author could have caught alone: a forgotten debug print, a file changed by accident, a test that was never run. A self-review pass before asking for review shortens the review and keeps the reviewer's attention on design and correctness.
</context>

<task>
Review the changes on the current branch compared with main.
1. Get the diff with `git diff main...HEAD` and the commit list with `git log main..HEAD`. Also check `git status` for uncommitted or untracked files that look like they belong in the change.
2. Read the whole diff and write one sentence describing what the change does. Every hunk should serve that sentence.
3. Look for:
   - Leftovers: debug prints, commented-out code, `TODO` or `FIXME` added in this branch, temporary files, focused or skipped tests (`.only`, `xit`, `@Ignore`, `t.Skip`).
   - Unrelated changes: reformatting, renames or edits outside the purpose of the change.
   - Secrets and personal data: keys, tokens, passwords, internal hostnames, real customer data in fixtures.
   - Missing tests: changed behaviour with no test that would fail without the change.
   - Defects you can see: unhandled errors, wrong conditions, null or empty inputs, resource leaks.
   - Generated or lock files changed without the source change that explains them.
4. Run the checks and report the real result of each.  If no commands are listed in this step, run the test, lint and type-check commands the project defines (look in the README, CI config, package scripts, Makefile or equivalent).
</task>

<constraints>
- Report, do not edit. The author decides what to change.
- Cite `path:line` for every finding.
- Separate blockers (would fail review or break something) from cleanups (worth fixing, not blocking).
- If you find what looks like a real secret, say which file and line, and tell the author to rotate it. Do not repeat the secret value.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
- Before saying the work is done, run the check that proves it (tests, build, type check or the command the user gave) and report the real result.
- If you could not run a check, say so plainly and say which one.
</constraints>

<output_format>
## Ready
`yes` or `no`, then one sentence.
## Blockers
Numbered: `path:line`, the problem, the fix. Or "None".
## Cleanups
Bullets: `path:line` and what to clean. Or "None".
## Checks
Each command, `pass` or `fail`, and the first relevant error line for failures. Say plainly if a check could not run.
## Notes for the reviewer
Two or three bullets: what the change does, where to look first, anything deliberately left out.
</output_format>
````

---

<a id="walk-through-pull-request"></a>

## Walk a reviewer through a pull request

`walk-through-pull-request` · prompt · Code review · https://hermes-ide.com/prompts/walk-through-pull-request

Explains a large or unfamiliar pull request to its reviewer with what changes and why, a reading order, the risky hunks and questions for the author. Use before reviewing a big diff.

````markdown
<context>
Faced with a 2,000-line diff in alphabetical file order, reviewers skim, approve the parts they understand and miss the hunk that matters. The fix is not a second reviewer but a guide: what the change is trying to do, which files carry the idea and which are mechanical fallout, the order that makes the diff read like a story, and where a careful reviewer should slow down. This prompt prepares the reviewer; it does not do the review or pass a verdict.
</context>

<task>
Prepare a reviewer to review this change. The reviewer's familiarity with the code is: some.

<diff>
[DIFF]
</diff>


1. If [DIFF] is a URL or branch name, fetch the diff and the PR description with the tools you have. If you cannot, ask for the diff once and stop.
2. Read the whole diff before writing anything. Where the repo is available, read the surrounding code of the main changed functions so your explanation is right about what the code did before.
3. Work out the intent: what problem the change solves and how, in terms of behaviour. If the PR description and the diff disagree, say so.
4. Group the changed files into: core logic (where the idea lives), interfaces and contracts (APIs, schemas, public types, config), data changes (migrations, backfills), tests, and mechanical changes (renames, moves, generated code, formatting, dependency bumps). Give approximate line counts per group so the reviewer knows where the real reading is.
5. Propose a reading order that builds understanding: usually contracts and data shapes first, then the core logic in call order, then the callers, then tests, with mechanical changes last or skipped. Give one line per stop saying what to look for there.
6. Point out the risky hunks with `path:line` references: behaviour changes hidden in refactors, changed defaults, concurrency, error handling, migrations and backwards compatibility, security-sensitive code, and anything with no test. Say why each deserves attention; do not claim a bug unless you can name the input that triggers it.
7. Write questions for the author that a reviewer would need answered to approve: missing context, unexplained decisions, rollout and rollback, test coverage gaps.
8. Adjust depth to familiarity: for new, explain the domain terms, the modules involved and how a request flows through them before the reading order; for some, explain only the parts of the system this change touches; for owner, skip background and focus on the diff and its risks.
</task>

<constraints>
- Do not approve, reject or give a verdict. The reviewer decides.
- Describe what the code does, not what the author probably meant, and mark any inference about intent as an inference.
- Every claim about a hunk cites `path:line` or a function name from the diff.
- If the diff is too large to read fully in one pass, say which parts you read closely and which you only skimmed.
- Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
- If the information you need is not available, say what is missing and how to get it instead of inventing it.
</constraints>

<output_format>
## In one paragraph
What the change does, why, and how big it really is once mechanical changes are excluded.
## What changes
Table: group, files, approximate lines, what changes in behaviour.
## Reading order
Numbered stops: `path` (or function), what to look for.
## Risky hunks
Numbered: `path:line`, what is risky and why, what to check.
## Questions for the author
Numbered.
## Not covered
What you did not read closely or could not verify, or "Nothing".
</output_format>
````

---

<a id="write-code-review-guidelines"></a>

## Write code review guidelines

`write-code-review-guidelines` · prompt · Code review · https://hermes-ide.com/prompts/write-code-review-guidelines

Writes a team's code review guidelines covering what blocks a merge, comment labels, size limits, response times, author and reviewer duties and how to disagree. Use when setting review norms.

````markdown
<context>
Most review problems are agreement problems, not skill problems: nobody wrote down what is worth blocking a merge for, so reviewers block on taste, authors take nits personally, big PRs get rubber-stamped and small ones wait for days. Good guidelines are short, specific to the team, explicit about what is blocking and what is not, and enforce by automation whatever a machine can check. Research and industry practice point the same way: review speed and small changes matter more than exhaustive comments (Google's engineering practices, for example, set a one-business-day expectation for a first response).
</context>

<task>
Write code review guidelines for this team.

<team_context>
[TEAM_CONTEXT]
</team_context>


1. State the purpose of review in two or three lines: catching defects and risks, sharing knowledge and keeping the code base healthy, with the standard "approve once the change clearly improves the code base, even if it is not perfect".
2. Define what blocks a merge: correctness bugs with a triggering case, security and privacy issues, missing or broken tests for changed behaviour, breaking contracts or migrations without a rollout plan, violations of written team standards, and code nobody but the author can understand. Then what does not block: personal style preferences, alternative designs of similar quality, and anything a formatter or linter should catch.
3. Define comment labels the team will use, based on Conventional Comments (for example `issue (blocking):`, `suggestion:`, `nit (non-blocking):`, `question:`, `praise:`), with one example each, and the rule that unlabelled comments are treated as non-blocking.
4. Set size and scope expectations: a target size for a PR (for example under about 400 changed lines excluding generated code), one logical change per PR, refactors separate from behaviour changes, and stacked or split PRs for larger work.
5. Set response-time expectations that fit the time zones and cadence: first response, follow-up rounds, and what an author does when a review is late. Name the escalation path.
6. List author duties: self-review first, a description with why, how to test and the risky parts, small focused commits, green checks before requesting review, replying to every comment, and resolving threads only with the reviewer's agreement or a clear reply.
7. List reviewer duties: review the design and tests before details, give a reason and a concrete suggestion, ask rather than assume, label severity, approve with non-blocking comments when appropriate, and keep the tone about the code.
8. Explain how to disagree: discuss once in the thread, then move to a short call, then follow the written standard or the code owner's decision, record the outcome, and never block a merge on an unwritten preference.
9. Say what to automate with the tooling given: formatting, linting, type checks, tests, coverage of changed lines, required reviewers or CODEOWNERS, PR templates and size labels.
10. Address each listed pain point explicitly in the guideline that fixes it, and add adoption notes: how to roll the guidelines out and when to revisit them.
</task>

<constraints>
- Fit the guidelines to the team described. Do not prescribe processes the tooling cannot support or that conflict with the stated cadence.
- Keep the guidelines to about 900 words so people actually read them. Use the team's language, not management jargon.
- Mark any number you propose (sizes, hours) as a starting point the team should adjust.
- Do not cite a statistic or study you are not sure of; describe practices instead.
</constraints>

<output_format>
Markdown ready to paste into the repo or wiki, using the sections in this order:
## Why we review
## What blocks a merge
## What does not
## Comment labels
## Size and scope
## Response times
## Author responsibilities
## Reviewer responsibilities
## Disagreements
## Automation
## Adoption notes
Adoption notes contains the rollout steps, a table mapping each pain point given to the guideline that addresses it (omit the table if none were given), and the date to revisit the guidelines.
</output_format>
````
