I think I agree with your colleague, main should always be deployable and staging should reflect exactly what is ready to go live. And this is somewhat the standard practice, the workflow is: Feature Branch - Code Review - Main - Staging - Production. Code review catches bugs before main. If issues appear in staging, it's best to fix them in a new feature branch.