LLMs still produce bugs, but those bugs are different than what they used to be. It's less off-by-ones and more about system design, ui usability, missing broader context. Some kinds of coding has been solved, but not all.
While models continue to improve, adversarial code review has been an incredibly powerful tool to catch many of these kinds of bugs.
It can be as simple as a one line prompt - "use a dynamic workflow to adversarial test every edge case in an iOS simulator", or use Claude's built in /code-review (or /code-review low, /code-review medium, etc.)