Can the server send s_new messages to itself?

Yeah, apparently what happens is that they hardcode the strings as ASCII floats in the graph, prepended by the string length. (That’s Pascal format, apparently.) E.g. “Hello world” is [11, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100].

/*
d = SynthDef(\asdf, { Poll.kr(0, 0, "Hello world") })
d.dumpUGens

[ 0_Impulse, control, [ 0, 0 ] ]
[ 1_Poll, control, [ 0_Impulse, 0, -1, 11, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 ] ]
 */

The stranger thing is that if I turn on debugOSC, I don’t see any strings sent at all,
so I’m guessing there’s some kind of refencing used later

-> Synth('asdf' : 1031)
[ 9, "asdf", 1031, 0, 1, 0 ]
Hello world: 0

Could you briefly explain that that stage3 means or where can I read about those stages?

That’s a fair point but there was a discussion here about local buffers created on the server that apparently have conflicting numbers. So it’s not like the server doesn’t create any of those “by itself” at all.