80% of AI code review comments are noise.
Tools try to fix this by merging, deduplicating, and summarizing.
That treats the symptom, not the cause.
The real problem: AI reviews code without knowing why it exists.
Here's how to fix that—in 5 steps.
The Mistake: Treating Review as Text Analysis
Most AI reviews assume this model:
review = analyze(changed code)
But real code review is not about judging new code in isolation.
It is about checking whether a change is compatible with:
- the previous design,
- accepted constraints,
- known trade-offs,
- and the original intent of the implementation.
In practice, review looks like this:
review = compare(before, after, intent)
When intent is missing, the AI can only apply generic rules.
And generic rules always produce generic warnings.
That is what becomes noise.
A Concrete Example: Swallowing General Exceptions
AI often flags patterns like this:
try {
DoWork();
}
catch (Exception) {
// ignored
}
It says:
- "You should not swallow general exceptions."
- "This hides errors."
- "This makes debugging impossible."
From a textbook perspective, that is correct.
But in real systems, this pattern is sometimes intentional:
- transient failures are expected,
- retries happen at another layer,
- monitoring is handled elsewhere,
- the process must continue even on failure.
The problem is not that AI notices this pattern.
The problem is that AI does not know why it exists.
Without intent, every design decision looks like a defect.
That is structural noise.
Why Services Cannot Solve This
A service can see:
- diffs,
- static structure,
- AI-generated comments.
But it cannot see:
- why this structure exists,
- which problems are known and tolerated,
- which compromises are intentional,
- what constraints shaped the code.
Those live in:
- design history,
- undocumented decisions,
- developer memory.
So the service must assume:
"If it looks suspicious, it must be wrong."
That assumption guarantees noisy output.
No amount of deduplication can fix missing intent.
The Fix: 5 Steps to Intent-Based Code Review
Instead of cleaning noisy output, change the process.
Step 1: Analyze the Code Before the Change
Ask the AI to analyze the current codebase and identify:
- responsibilities,
- dependencies,
- fragile points,
- known issues.
This creates a baseline.
Step 2: Narrow the Scope If Needed
If the AI produces unfocused or irrelevant issues:
- limit the review to affected modules,
- focus on relevant quality attributes (e.g. reliability, maintainability),
- explicitly state what is out of scope.
Noise comes from undefined scope.
Step 3: Separate Known Issues from Blocking Issues
Not all problems matter for this change.
Distinguish:
- known but accepted issues (technical debt),
- issues that block this change.
Without this, every review becomes "fix everything."
Step 4: Explain Intent and Make It Part of the Review Criteria
This is the critical step.
For example:
- "This exception is swallowed because retries happen upstream."
- "This coupling exists due to legacy protocol constraints."
Once stated, these become review rules.
They should not be flagged again.
Step 5: Review the Change Against That Baseline
Now the AI reviews:
- whether the change breaks accepted constraints,
- whether it introduces new risks,
- whether it improves or worsens known problems.
The review shifts from:
"This looks wrong."
to:
"This change violates or preserves the agreed intent."
That is no longer noise.
That is design validation.
Why This Works
Noise appears when:
- intent is missing,
- scope is undefined,
- judgment criteria are implicit.
This method makes them explicit.
Instead of asking:
"What is wrong with this code?"
you ask:
"Does this change respect existing design decisions?"
That is a different problem.
And one AI can actually solve.
Conclusion
AI code reviews are not noisy because AI is bad at reasoning.
They are noisy because we treat review as text analysis instead of intent reconciliation.
No tool can infer intent reliably.
It must be declared.
Until that happens, deduplication tools and summarizers will exist—and noise will continue.
The solution is not better post-processing.
The solution is: define what the code means before judging how it changes.
Top comments (0)