Claude Code repeatedly ignores agreed approaches, hacks instead of reading code, and wastes user time on trivial problems

Resolved 💬 3 comments Opened Apr 14, 2026 by flexi1791 Closed May 29, 2026

Summary

During an extended iOS development session (guided tutorial feature for a SwiftUI game), Claude Code exhibited a persistent pattern of:

  1. Guessing instead of reading code — Repeatedly reasoned about tile orientations from bit masks instead of writing a simple test. Took hours to solve what a 5-line test resolved in seconds.
  1. Ignoring agreed approaches — User and Claude would agree on an approach (e.g., "put the check in canPlace"), then Claude would implement something completely different (view model override, protocol method, closure on data model). This happened 5+ times in one session.
  1. Hacking instead of fixing — When a visual bug appeared, Claude would make the smallest possible patch, which broke something else, leading to another patch, creating a cascade of 10+ patches that accumulated into unmaintainable code. The memory rules explicitly said "NEVER panic-patch symptoms" but this was ignored repeatedly.
  1. Not following project constitution — The project has a constitution (.specify/memory/constitution.md) requiring @Observable for reactive models, async/await, reading code before modifying. Claude violated these repeatedly despite being reminded.
  1. Adding then removing the same code — The same canPlace tutorial check was added, removed, re-added, removed, and re-added across 6+ commits. Each time Claude had a different rationale. The final answer was the same as the first suggestion the user made.
  1. Not reading existing code — TrayView had a tap-to-rotate gesture with specific visual state management (tileCumulativeDegrees). Claude wrote a completely separate rotation system that didn't work, instead of reusing the existing code. The user had to point this out multiple times over ~25 minutes.
  1. Excessive commits — Despite being told not to commit frequently, Claude kept committing after every small change, making it impossible to review the diff or revert to a clean state.

Environment

  • Claude Code CLI (VS Code extension)
  • Model: claude-opus-4-6 (1M context)
  • Project: iOS SwiftUI app with local Swift package (QuGameModel)
  • Session length: ~6+ hours
  • Branch: 005-guided-tutorial

Reproduction

The pattern is consistent:

  1. User describes a problem
  2. Claude proposes a solution
  3. User agrees or corrects
  4. Claude implements something different
  5. It breaks
  6. Claude patches the symptom
  7. User catches the real bug
  8. Repeat from step 1

Impact

  • ~2 hours wasted on tile orientation (a 5-line test would have resolved it)
  • ~1 hour wasted on rotation visual (existing TrayView code already handled it)
  • ~1 hour wasted on canPlace/locationsOfPlayableTiles (went in circles)
  • Multiple constitution/memory violations despite explicit rules
  • User had to manually refactor TrayViewModel to @Observable because Claude failed to follow the project's own coding standards

Expected Behavior

  • Read existing code before writing new code
  • When an approach is agreed, implement exactly that approach
  • When a bug appears, diagnose the root cause before patching
  • Write tests to verify assumptions about model behavior
  • Follow project coding standards (constitution)
  • Don't commit unless explicitly asked

View original on GitHub ↗

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