It's fun when you find an actual new boundary and capability that you wanted to build, and the abstraction is clean, and then you materialize it into existence.
It's awful when the boundary breaks down. It might just be inherit to the loop (no mind readers) but I will walk away from an AI task for 30 minutes and all too frequently there will be insane code smells.
I've been doing a thing where I will have "integration" projects between many different subsystems to demonstrate some capability, test it, then destroy the integration folder, folding back what we learned into the subsystems themselves. So far this has been OK for learning and it incentivizes the AI to not throw garbage everywhere. Of course, this assumes you get subsystems right but it prevents direct reaching into them and modifying excessively - try to do the most you can with fixed interfaces, etc.