Tests
Review test adequacy for changed code.
Scope
1. Coverage gaps
- new exported functions or modules without tests
- new branches or error paths without coverage
- changed behavior that existing tests do not exercise
2. Edge cases
- boundary conditions (empty inputs, missing files, null/undefined)
- error recovery paths (command not found, parse failures)
- configuration variants the code handles
3. Test quality
- tests asserting implementation details instead of behavior (method call sequences break on refactor)
- tests duplicating coverage without distinct scenarios
- fragile tests (timing, ordering, absolute paths)
- using the wrong test type (filesystem/process/network in unit tests) — move those to integration tests
- missing cleanup (temp files, cache state)
- mocking internals instead of testing through the real contract — mock at boundaries only
- test names that don’t read as specifications
4. Unnecessary tests
- tests covering trivial pass-through or type-only modules
- tests duplicating what the type system guarantees
- tests for code that has since changed
Evidence threshold
Only flag gaps where untested code has meaningful behavior. Do not demand 100% coverage — prioritize tests that catch real bugs.
Output
For each finding: severity, source file + test file, what is untested, why it matters, fix direction.
Then: Must-add | Should-add | Optional | Remove (if any).
Red flags
- Demanding 100% line coverage
- Flagging missing tests for trivial functions
- Suggesting tests that only verify the type system
- Broad test rewrites instead of targeted additions
- Confusing test quantity with quality