Here would be the place: https://github.com/supercollider/supercollider/blob/develop/SCClassLibrary/Common/Core/Object.sc#L713 – there’s some risk of breakage though; throwing an error here would need extensive testing.
The division between language and server is confusing for a lot of users (that you have an object in the language but the server can’t automatically use it, or a signal in the server but the language can’t immediately access it). It’s just one of the things that users eventually have to confront (no way around it), and until confronting it, it’s going to seem weird.
James McCartney did say at least once that, if he were doing it again, he would disallow SynthDef arguments and require synth inputs to be written as explicit Control UGens – for exactly the reason in this thread: the fact that they are arguments leads to an expectation that you can use them just like normal function arguments, but they aren’t normal function arguments. (Edit: related to that, see NamedControl: a better way to write SynthDef arguments – I still like and use SynthDef arguments, but if everyone used NamedControls like this, maybe the question in this thread would have been clearer.)
hjh