Opus 4.6 cannot reliably self-review code
Resolved 💬 3 comments Opened Mar 21, 2026 by flexi1791 Closed Mar 25, 2026
Problem
Opus 4.6 cannot perform reliable code reviews on its own output. When asked to review, it:
- Misses obvious violations — UIKit in the model layer, dead code, meaningless filename suffixes, unnecessary platform guards — all missed on first review, only found when the user pointed them out.
- Flip-flops on correctness — In one instance, stated a
#if os(iOS)guard was "pointless and should be removed," then immediately reversed to "actually it IS needed because PhoneSessionManager is iOS-only." A proper review would check the dependency before making a claim.
- Claims completeness prematurely — Presented a list of "all violations found" that missed multiple issues the user then identified. This gives false confidence that the code is ready.
- Reviews superficially — Catches trivial issues (double disk read, trailing whitespace) but misses architectural violations (UIKit in model layer, UX regressions, dead code paths). The review checks syntax, not design.
- Does not review against project rules — The project has a detailed constitution with 9 principles. The model should check each changed file against each principle. Instead it skims the diff and declares it clean.
Specific examples from this session
- Missed UIKit import in model layer (Constitution IV violation)
- Missed that
show.posterreturning a non-optional Image with generic placeholder broke the service-branded fallback (Constitution VII - UX regression) - Missed dead
servicePlaceholdercode after makingposternon-optional - Missed
_large.jpgsuffix that no longer had meaning - Missed silent
try?without DEBUG prints (Constitution IX violation) - Stated
#if os(iOS)was pointless, then reversed when challenged - Claimed review was complete 3 times before user found more issues each time
Expected behavior
A self-review should:
- Check every changed line against the project's rules/constitution
- Verify all claims before stating them (e.g., check if a dependency exists on a platform before saying a guard is unnecessary)
- Not claim completeness until actually complete
- Catch architectural issues, not just syntax
Context
- Related issues: #37168, #37174, #37178, #37179
- Model: Claude Opus 4.6 (1M context)
- 5+ hour session where the user caught more bugs than the model in every single review pass
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗