Because the shell substitutes the return code before passing to jo, jo sees 'success@1'. How do you expect jo to know where the 1 came from to change its interpretation?
Edit: or you're saying jo should always consider 0 true and 1 false to match shell return code conventions?
> It was merely an observation... jo looked as though it was for use in the shell though, so I was curious as to the design decision here.
I think it makes sense how it is, since if I typed "success@1" I wouldn't expect that to output "{success: false}" but I definitely appreciate your point about a case like "success@$?".
> Of course, one can simply negate the value before passing it to jo.
Edit: or you're saying jo should always consider 0 true and 1 false to match shell return code conventions?