iTerm ZSH - Missing Right Prompt
Try wrapping your RPROMPT in single quotes. I've seen double quotes cause issues for others with their prompts before.

I would also ditch the precmd > setprompt process for the moment and just set RPROMPT directly to simplify for testing. Start with something like

precmd() {
  ...
}
PROMPT=$'\n$(rb_prompt) in $(directory_name) $(git_dirty)$(need_push)\n› '
RPROMPT='%{$fg_bold[cyan]%}$(todo)%{$reset_color%}'


and refine from there.