You're getting there. The most valuable change is using software (like Cursor) that runs the models in agentic mode so they:
1. find the context themselves (with a basic document with context to point them in the right general direction for the current task).
2. can run commands and specifically tests.
3. iterate on their own output and changes to ensure you don't need to point out what they did wrong manually each time. Just let it find out itself, correct and keep moving until it is a good solution.
Think about how any human developer would approach an issue. For a lot of the 'moderately complex code bases', a developer new to it would also need a lot of pointing in the right direction, a lot of trying stuff out and then correcting themselves. Forget treating LLMs like one-shot magic solution givers, but instead as junior devs that you have to provide with all kinds of things to be successful.