There's always a version of "that good" that these have been able to meet, and there's always going to be a version of "that good" that they will never meet (in a form at all similar to what they currently look like, at least)
At the moment, my general experience with specifically Claude is that it only generates code I'm actually happy with at most about half the time, even if it may be technically correct in some form most of the time.
This is where the first problem actually comes in, though: if you're not actually reviewing every line, and able to understand exactly what it is doing and why it was written that way because you could have written the same code yourself, you don't actually have any idea if it's doing the right thing , especially in edge cases where you haven't actually thought through what behavior you would want to have. In my experience, figuring out what the best way to behave in edge cases is often the majority of the work developing: writing it down as code is at most the process though which you discover more such edge cases.
The second problem is bloat: by default AI will cause you to have between 2x and 20x more code for the same functionality: either because it's duplicating logic that already exists elsewhere instead of refactoring to make it available, making code overly robust and handing cases that can never actually happen, or simply being bad at generating elegant code. This causes it to be much harder to review, feeding the first problem, and gets you to the next problem even faster.
That third problem is that AI code is much much much better in greenfield projects <10kloc than it is in large >50kloc brownfield by default. The larger the project, the less of it any session will/can read before generating code, which causes lots of problems like the above even worse. You can attempt to fight this degradation with memory and CLAUDE.md files and custom skills and a dozen other techniques, but it's something of a losing battle, since those start to full up context too, meaning it can read even less code.
But really, the actual problem is that at the end of the day, your job as a developer isn't to write code: it's to figure out how to solve people's problems. An AI only knows what you tell it and can't provide any taste or insight beyond pattern matching the examples in it's training data.
None of this is to say these tools are useless mind you - but just like when you were grabbing code off stackoverflow before, or adding a package still, the fact you didn't type the code in yourself doesn't mean the code isn't your responsibility.
TLDR: firing developers because AI exists is really dumb
Edit: since this wasn't directly addressed:
That's actually quite likely true, but based on general vibes I suspect that any effect AI has had on that has been dwarfed by companies in general over hiring during COVID and now wanting to downsize - but take that with a gain of salt, I'm no economist.