anchor.diff:  
   %% ===================================================================
   %% Callback implementations.
  +-spec do_start([task_output()], state()) -> state().
  +do_start(Inputs, S) ->
  +    % We need to convert any dir:// urls into pipeline form, which
  +    % involves retrieving and parsing the dir files.  We hence do this
  +    % in a separate process.
  +    Coord = self(),
  +    InputPid = spawn_link(fun() -> preprocess_inputs(Coord, Inputs) end),
  +    S#state{input_pid = InputPid}.
   
   -spec do_use_inputs([task_output()], state()) -> state().
   do_use_inputs(Inputs, #state{jobinfo = JobInfo} = S) ->
  
positive.code: 
  -spec init({pid(), binary()}) -> gs_init() | {stop, term()}.
  init({Starter, JobPack}) ->
      try  {JobInfo, Hosts} = setup_job(JobPack, self()),
           Starter ! {job_started, JobInfo#jobinfo.jobname},
           {ok, init_state(JobInfo, Hosts)}
  
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}).
  
  