Positional returns (daemon → client), GIR order.
Empty list is omitted on the bin socket. A returned GObject uses result, not this list. Do not put scalars in msg.
Gee.ArrayList cannot store GLib.Value (a struct). valac requires a boxed element type. That is boxing, not optional or null returns.
var n = GLib.Value(typeof(int));
n.set_int(0);
resp.values.add(n);