anchor.diff:                  job = Job#pushy_job{job_nodes = undefined},
                   job_nodes = JobNodes
               },
  -            % If there are no nodes, the job finishes immediately.
  -            case dict:size(JobNodes) of
  -                0 ->
  -                    {next_state, complete, State2} = finish_job(complete, State),
  -                    {ok, complete, State2};
  -                _ ->
  -                    listen_for_down_nodes(dict:fetch_keys(JobNodes)),
  -                    start_voting(State)
  -            end;
  +            listen_for_down_nodes(dict:fetch_keys(JobNodes)),
  +
  +            % Start voting--if there are no nodes, the job finishes immediately.
  +            start_voting(State);
           false ->
               {stop, shutdown, undefined}
       end.
  
positive.code:     Job2 = Job#pushy_job{status = voting},
      State2 = State#state{job = Job2},
      send_command_to_all(<<"job_command">>, State2),
      {ok, voting, State2}.
  
  start_running(#state{job = Job} = State) ->
      lager:info("Job ~p -> running", [Job#pushy_job.id]),
      Job2 = Job#pushy_job{status = running},
      State2 = State#state{job = Job2},
      send_command_to_all(<<"job_execute">>, State2),
      {next_state, running, State2}.
  
  finish_job(Reason, #state{job = Job} = State) ->
      lager:info("Job ~p -> ~p", [Job#pushy_job.id, Reason]),
  
negative.code:             new -> OldNodeState#pushy_job_node{status = faulty};
              ready -> OldNodeState#pushy_job_node{status = faulty};
              running -> OldNodeState#pushy_job_node{status = aborted}; % TODO better status?
              % Once a node has reached a terminal state, we don't change its status
              _ -> OldNodeState
          end
      end, JobNodes),
  