Single argument doesn't capture required/optional semantics. I think a hybrid approach is best.
Also isn't discoverable, requires reading docs or source.
Usually I try to get 1 or 2 required args, then everything optional in an object. If thing requires more than 2 args then would consider single argument object. Callbacks as last param don't come into count.
Another option is fluent APIs.
E.g.
Link(target, dest) // args
Vs.
Link({from: target, to: dest}) // named args object
Vs
Link.from(target).to(dest) // fluent
Cool idea but a language to implement this seems like super overkill, when you could implement basically the same thing with a simple fluent API, without any magic or compile step.
e.g.
clicking().on(".rsvp").addClass("open").on("#overlay")
Silly finger pointing like this over minor issues isn't really newsworthy, let alone three exclamations newsworthy.
Have you isolated this to spawn or is it an issue with streams in general?
Is it perhaps already fixed in master or 0.11?
Is this a regression i.e. does node exhibit this behaviour in previous versions or is this new?