Positional returns (daemon → client), GIR order.
Empty list is omitted on the bin socket. The C return uses retval, not this list. This list is OUT / INOUT only. 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.args.add(n);