My preference would be for a) pass tests locally b) send a PR to a branch (the two can be flipped if the tests are run based on PRs) then c) initial light code review/revisions then d) merge to development/beta/testing/staging branch e) bleeding edge people can try it out and offer more code review then e) push to production.
Step d) should pretty much happen as long as the code is not nefarious and fixes more than it is known to break and does not make a huge mess -- not all contributers to a project will have the patience to get code "perfect" so the standard should be "good enough." Even such people are more likely to return with refinements if they see their work accepted, but if they don't, if their patch is an improvement even if not thorough, the users win, and other developers will have less to fix.
But, all this requires a certain minimum number of active developers.