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?