Why not do this way: new things and fixes -> experimental *stop adding new things* experimental -> testing only fixes -> testing *all is working, release it* testing -> master I think this is more logical.
But we are not a linux kernel, we just developing small sandbox game. We should do it assembly line like, first add new things, then debug them, then release. And btw, I thing you shouldn't commit if it don't compiles.