anchor.diff:      {Done, lists:reverse(RevEvs)}.
   
   add_event(State = #state{next_event_id = Id, rev_events = RevEvents}, EventName, PropList) ->
  -    IdStr = iolist_to_binary(io_lib:format("job-~B", [Id])), 
  +    IdStr = iolist_to_binary(io_lib:format("job-~B", [Id])),
       Ev = pushy_event:make_event(EventName, IdStr, PropList),
       JobId = State#state.job#pushy_job.id,
       post_to_subscribers(State, {job_ev, JobId, Ev}),
  
positive.code:     {_, NodeName} = NodeRef,
      State2 = add_run_complete_event(State1, NodeName, Status),
      maybe_finished_running(State2);
  running({_Failure,NodeRef}, State) ->
      {State1, Status} = case get_node_state(NodeRef, State) of
          ready    -> {send_to_rehab(NodeRef, crashed, State), crashed};
          running  -> {set_node_state(NodeRef, crashed, State), failure};
          terminal -> {send_to_rehab(NodeRef, State), client_died_while_running}
      end,
      {_, NodeName} = NodeRef,
      State2 = add_run_complete_event(State1, NodeName, Status),
      maybe_finished_running(State2).
  
  -spec handle_event(any(), job_status(), #state{}) ->
          {'next_state', job_status(), #state{}}.
  handle_event(Event, StateName, State) ->
      lager:error("Unknown message handle_event(~p)", [Event]),
      {next_state, StateName, State}.
  
  -spec handle_sync_event(any(), any(), job_status(), #state{}) ->
  
negative.code: finish_job(Reason, #state{job = Job} = State) ->
      % All nodes are guaranteed to be in terminal state by this point, so no
      % nodes need to be sent to rehab.
      lager:info([{job_id,Job#pushy_job.id}],
                  "Job ~p completed with state ~p", [Job#pushy_job.id, Reason]),
      State1 = add_job_complete_event(State, Reason),
      post_to_subscribers(State1, done),
      Job2 = Job#pushy_job{status = Reason},
  