anchor.diff:  
   -spec handle_info(term(), state()) -> gs_noreply() | gs_stop(tuple()).
   handle_info({'EXIT', Pid, Reason}, #state{input_pid = Pid} = S) ->
  +    % Note: this callback clause will never get called useless, due to
  +    % the trap_exit issue mentioned above.  We leave it in here for
  +    % clarity, and in case this issue is fixed.
  +    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(_M, S) ->
  +handle_info(M, S) ->
  +    lager:warning("Ignoring unexpected info event: ~p (self ~p)", [M, self()]),
       {noreply, S}.
   
   -spec terminate(term(), state()) -> ok.
   terminate(normal, _S) ->
  -    lager:warning("job_coord terminating normally!"),
       ok;
   terminate(Reason, #state{jobinfo = #jobinfo{jobname = JobName}}) ->
       lager:warning("job coordinator for ~s dies: ~p", [JobName, Reason]).
  
positive.code:                                                outputs = Inputs}}]),
      lager:info("initialized job ~p with pipeline ~p and inputs ~p",
                 [_JobName, Pipeline, Inputs]),
      % Convert inputs into pipeline form.
      Coord = self(),
      InputPid = spawn_link(fun() -> do_preprocess_inputs(Coord, Inputs) end),
      #state{jobinfo    = JobInfo,
             pipeline   = Pipeline,
             schedule   = Schedule,
             input_pid  = InputPid,
             hosts      = gb_sets:from_list(Hosts),
             tasks      = Tasks}.
  
  %% We need to convert any dir:// urls into pipeline form, which
  %% involves reading and parsing the dir files.  We hence do this in a
  %% separate process.
  
  do_preprocess_inputs(Coord, Inputs) ->
      % TODO.
      use_inputs(Coord, Inputs).
  
  %% ===================================================================
  %% state access and update utils
  
negative.code: kill_job(Reason) ->
      gen_server:cast(self(), {kill_job, Reason}).
  
  -spec use_inputs(pid(), {ok, [task_output()]} | {error, term()}) -> ok.
  use_inputs(Coord, Inputs) ->
      gen_server:cast(Coord, {inputs, Inputs}).
  
  