I've posted a few times looking for advice on how to handle DS15 and taken on board the helpful suggestions and things have definitely improved day-to-day but needing help again with the latest fallout 
So, ds has been given a LOT more freedom and we've spoken at length about me letting him find his independence, recognise he's growing up etc. I did make it clear however that occasionally I may say no to something & whilst he can discuss & question it, there will be the odd time he can't do what he wants & will needs to compromise. I promised not to do it too often or without good reason. All has been fine until yesterday - he told me on Monday he was meeting his girlfriend & she's suggested going to London. Said I'm not wild about the idea given covid rates but ok just not to be late as we're all going to friends that night and expected around 5/5:30pm (our friends and his so definitely something he'd usually be up for). He doesn't leave earlier as suggested and still goes down to London. Irritating but not something I comment on. Then at 5pm he calls and is still in town (despite me saying be home for 5) so I calmly remind him of our plans and to start heading home now please. He says he won't make it and will be nearer 8/9pm and hangs up! Next time we hear from him (phone was off/dead) is 9:45pm when he calls from his gf phone to say they're on the train & will be back at 10:30pm (he finally gets in at 10:45pm). I was seriously pissed off but just said I'm cross and we will discuss this tomorrow to avoid a major argument in front of our friends.
I really feel he's taking the piss now and has no respect for our compromise and the leniency we're offering him. It felt like a massive "fuck you I'll do what I want" (which of course it is as once he's out there's nothing we can do!) I've never grounded him before but this really feels like the most appropriate/only action. But then what about NYE? Would that be too harsh making him stay at home (not to mention painful for everyone else as there's no way he's holding a party staying in on his own). Or if I've got this whole punishment thing wrong again, what is the alternative to grounding?