Description
Full codebase review (500K+ chars) exceeds default max_diff_size (50K). Users must manually split diffs into batches.
Code References
| File |
Line |
Current State |
src/commands/review.rs |
88-113 |
Size check — max_diff_size enforced, no chunking |
src/engine/llm.rs |
261-270 |
review_diff() — single LLM call for entire diff |
src/config/schema.rs |
default |
max_diff_size: 50_000 (50KB) |
No chunking logic exists. If diff > max → error or blocked (depends on on_violation setting).
Fix Plan
Architecture
review.rs
├── diff > max_diff_size && auto_chunk enabled?
│ ├── chunk_diff(diff, max_size) → Vec<DiffChunk>
│ │ ├── Parse diff into per-file hunks
│ │ ├── Group by directory (related files together)
│ │ └── Each chunk ≤ max_diff_size
│ ├── for chunk in chunks:
│ │ ├── review_diff_with_cache(chunk)
│ │ └── collect findings
│ └── merge + deduplicate findings
└── else: single review (current behavior)
Implementation Steps
- Add
--auto-chunk flag to cora review CLI
- New module
src/engine/chunker.rs:
- Parse unified diff into
(filename, hunk_lines) tuples
- Group by directory prefix
- Split groups until each ≤ max_diff_size
- Return
Vec<String> (each a valid unified diff)
- Update
execute_review():
- If
--auto-chunk and diff > max → call chunker
- Review each chunk separately
- Merge
ReviewIssue vectors
- Deduplicate by
(file, line, title) tuple
- Progress reporting: "Reviewing chunk 3/10 (src/config/*)…"
- Summary merge: concatenate chunk summaries
Edge Cases
- Single file > max_diff_size → warn, review truncated
- Overlapping findings across chunks → dedup
- Empty chunk → skip
- LLM failure on one chunk → partial results + warning
Target
- Minor release: v0.5.0 (new feature + new module)
- Files: new
src/engine/chunker.rs, review.rs, main.rs, progress.rs
Description
Full codebase review (500K+ chars) exceeds default
max_diff_size(50K). Users must manually split diffs into batches.Code References
src/commands/review.rsmax_diff_sizeenforced, no chunkingsrc/engine/llm.rsreview_diff()— single LLM call for entire diffsrc/config/schema.rsmax_diff_size: 50_000(50KB)No chunking logic exists. If diff > max → error or blocked (depends on
on_violationsetting).Fix Plan
Architecture
Implementation Steps
--auto-chunkflag tocora reviewCLIsrc/engine/chunker.rs:(filename, hunk_lines)tuplesVec<String>(each a valid unified diff)execute_review():--auto-chunkand diff > max → call chunkerReviewIssuevectors(file, line, title)tupleEdge Cases
Target
src/engine/chunker.rs,review.rs,main.rs,progress.rs