blob: c02a83c61e21fed28158ff5638be1f96d910cdfa [file] [view]
# Splitting Reviews
This reference document provides guidance on how to subdivide a large or complex code review into smaller, manageable chunks to maintain high quality and avoid context overload.
## When to Split a Review
Consider splitting a review when:
- The diff is large (e.g., > 500 lines or > 10 files).
- The changes span multiple distinct components or layers (e.g., frontend, backend, database).
- The PR contains multiple unrelated features or bug fixes (though ideally these should be separate PRs, sometimes they are combined).
- You notice that your review comments are becoming superficial or missing details in later files.
## Strategies for Splitting
### 1. By File or Component
The most common approach is to review files in logical groups:
- **By Directory**: Review files folder by folder if the project is well-organized by feature or component.
- **By Layer**: Review database changes first, then backend logic, then frontend UI, then tests. This helps build context sequentially.
- **By File Type**: Review core logic files (.ts, .java, .go) separately from configuration files or documentation.
### 2. By Concern or Perspective
You can also make multiple passes over the same set of changes focusing on different concerns:
- **Pass 1: Correctness and Architecture**: Focus solely on whether the code does what it is supposed to do and fits the overall design.
- **Pass 2: Style and Maintainability**: Focus on readability, naming conventions, and adherence to style guides.
- **Pass 3: Security and Performance**: Focus on potential vulnerabilities and optimization opportunities.
## Tooling Support
To assist with splitting large diffs, use the provided Python script:
`scripts/split_diff.py` (inside the directory the SKILL.md is in)
This script can:
- Read a diff from stdin or a file.
- Extract a diff from a JSON file (useful if the diff is wrapped in JSON).
- Split the diff into separate files per changed file in a specified output directory.
**Usage Example:**
```bash
python3 agents/skills/code-review/scripts/split_diff.py --output-dir scratch/diff_chunks < diff.txt
```
For JSON inputs:
```bash
python3 agents/skills/code-review/scripts/split_diff.py --json --json-key diff --output-dir scratch/diff_chunks < input.json
```
## How to Combine Subdivided Reviews
After performing subdivided reviews, use the **Synthesis** step to create the final output:
1. **Deduplicate**: Ensure that the same issue found in multiple passes or files is not reported multiple times unless it manifests differently.
2. **Prioritize**: Group comments by severity. Ensure critical and high-severity issues are highlighted at the top.
3. **Cohesiveness**: Ensure the tone and style of all comments are consistent, following the [natural writing](../../natural-writing/SKILL.md) skill.