anchor.diff:  
   start_worker(Node, NodeMon, T) ->
       event_server:event(T#task.jobname, "~s:~B assigned to ~s",
  -        [T#task.mode, T#task.taskid, Node], []),
  +                       [T#task.mode, T#task.taskid, Node], []),
       spawn_link(disco_worker, start_link_remote,
  -        [self(), whereis(event_server), Node, NodeMon, T]).
  -
  -% callback stubs
  -terminate(Reason, _State) ->
  -    error_logger:warning_report({"Disco server dies", Reason}).
  -
  -code_change(_OldVsn, State, _Extra) -> {ok, State}.
  -
  +               [self(), whereis(event_server), Node, NodeMon, T]).
  +
  +process_exit(Pid, Msg, Code, S) ->
  +    process_exit1(gb_trees:lookup(Pid, S#state.workers), Pid, Msg, Code, S).
  +
  +process_exit1(none, _, _, _, S) -> {noreply, S};
  +process_exit1({_, {Node, T}}, Pid, Msg, Code, S) ->
  +    P = io_lib:fwrite("WARN: [~s:~B] ", [T#task.mode, T#task.taskid]),
  +    event_server:event(Node, T#task.jobname, lists:flatten(P, Msg), [],
  +                       {task_failed, T#task.mode}),
  +    gen_server:cast(self(), {exit_worker, Pid, {data_error, Code}}),
  +    {noreply, S}.
  
positive.code: 
  -export([start_link/0, stop/0]).
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
      terminate/2, code_change/3]).
  
  -include("disco.hrl").
  
  
negative.code:     {ok, #state{workers = gb_trees:empty(),
                  nodes = gb_trees:empty(),
                  purged = gb_trees:empty()}}.
  
  handle_cast({update_config_table, Config}, S) ->
      error_logger:info_report([{"Config table update"}]),
  