anchor.diff:  -module(disco_worker).
   -behaviour(gen_server).
   
  --export([start_link_remote/4]).
  +-export([start_link_remote/3, start_link/1]).
   -export([init/1,
            handle_call/3,
            handle_cast/2,
  
positive.code:     {ok, State}.
  
  jobhome(JobName) ->
      disco:jobhome(JobName, disco_node:home()).
  
  make_jobhome(JobName, Master) ->
      JobHome = jobhome(JobName),
  
negative.code: 
  start_link({Parent, Master, Task}) ->
      process_flag(trap_exit, true),
      _Worker = case catch gen_server:start_link(disco_worker, {Master, Task}, []) of
                  {ok, Server} ->
                       Server;
                   Reason ->
                       Msg = io_lib:fwrite("Worker initialization failed: ~p",
                                           [Reason]),
                       exit({error, Msg})
               end,
      Parent ! ok,
      % NB: start_worker call is known to timeout if the node is really
      % busy - it should not be a fatal problem
      %case catch gen_server:call(Worker, start_worker, 30000) of
      %    ok ->
      %        Parent ! ok;
      %    Reason1 ->
      %        exit({worker_dies, {"Worker startup failed: ~p",
      %            [Reason1]}})
      %end,
      wait_for_exit().
  
  init({Master, Task}) ->
  