anchor.diff:  
   -spec start_job(pid(), binary()) -> ok | {error, term()}.
   start_job(Starter, JobPack) ->
  -    case gen_server:start_link(?MODULE, {Starter, JobPack}, []) of
  +    case gen_server:start(?MODULE, {Starter, JobPack}, []) of
           {ok, _Pid} -> ok;
           {error, _E} = E -> E
       end.
  
positive.code: 
  -spec init({pid(), binary()}) -> gs_init() | {stop, term()}.
  init({Starter, JobPack}) ->
      % Note: we cannot set trap_exit here, due to an implementation bug
      % (IMHO) in Erlang.  If we do set it, we will get our terminate
      % callback called when the inner spawned helper function in new()
      % above terminates (normally or not).  The bug is that our
      % terminate should get called _only_ when the helper does _not_
      % terminate normally.
      try  {#jobinfo{jobname = Name} = Info, Hosts} = setup_job(JobPack, self()),
           Starter ! {job_started, Name},
           event_server:event(Name, "Created job ~p", [Name], {job_data, Info}),
  
negative.code: 
  -spec handle_info(term(), state()) -> gs_noreply() | gs_stop(tuple()).
  handle_info({'EXIT', Pid, Reason}, #state{input_pid = Pid} = S) ->
      lager:warning("stopping due to input_pid (~p) failure: ~p (self ~p)",
                    [Pid, Reason, self()]),
      {stop, {"input_processor exited", Reason}, S#state{input_pid = none}};
  handle_info({'EXIT', _Pid, normal}, S) ->
      {noreply, S};
  handle_info(M, S) ->
      lager:warning("Ignoring unexpected info event: ~p (self ~p)", [M, self()]),
      {noreply, S}.
  