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:

  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.poster returning a non-optional Image with generic placeholder broke the service-branded fallback (Constitution VII - UX regression)
  • Missed dead servicePlaceholder code after making poster non-optional
  • Missed _large.jpg suffix 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:

  1. Check every changed line against the project's rules/constitution
  2. Verify all claims before stating them (e.g., check if a dependency exists on a platform before saying a guard is unnecessary)
  3. Not claim completeness until actually complete
  4. 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

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗