My interpretation of what’s happening here is that we’re sending to
the server a ‘tell object 2 about all your global objects’ message,
followed by a ‘tell object 3 done when you’re finished doing stuff’
message, and as you can see from the output, the reply is a bunch of
ids for global objects sent to object 2, a done event sent to object
3, and then a delete_id event for object 3 sent to object 1. I’m
actually not sure why that last one triggers, as I don’t think I asked
it to. Perhaps it’s just tidying up for me.

I’m also handwaving – if not actually handdrowning – a litle bit,
because really … are these :global messages sent to object 2 or
from object 2? For the moment, I am using the two directions
interchangeably, which is probably not a recipe for an easier future
life, but in the meantime I can continue to tread water.

It’s instructive, or at least reassuring, to compare this stuff with
what weston-info says:

Top Wayland tip for today: it appears to be the case that you can make
the C library clients log protocol exchanges to stderr by putting
WAYLAND_DEBUG=client in the environment. When doing that it’s clear
to see that weston-info is making a couple of additional requests
that we’re not. We could add them, but I think the more pressing
concern is to make it do something with the events we’re getting
already – if it’s sending us details of global objects that we might
need to know about, we should at a minimum be storing those details
somewhere instead of throwing them away …