Claude produces output that looks correct but may not run. If you have no way to check its work, every bug requires you to catch it and loop back manually. There are patterns for closing this loop.
Test criteria: instead of "implement email validation", say "write validateEmail and test: user@example.com=true, invalid=false. Run the tests."
For visual comparisons, paste a screenshot and ask Claude to compare it to the result. Root cause: paste an error and ask Claude to verify the build succeeds after fixing.
You can automate all of this. Add lint commands to CLAUDE.md so Claude runs them without being asked, and use PostToolUse hooks to run a linter after every file edit.