anchor.diff:      end.
   
   do_map_change(NewMap, DontSendList, MembersDict,
  -              #state{my_flu_name=MyFluName, pending_map=OldMap}=S) ->
  +              #state{my_flu_name=_MyFluName, pending_map=OldMap}=S) ->
       send_spam(NewMap, DontSendList, MembersDict, S),
       ChangedServers = find_changed_servers(OldMap, NewMap),
  -    _OldMapV = map_value(OldMap),
  -    _MapV = map_value(NewMap),
  -    io:format(user, "TODO: ~w async tick trigger/scheduling... ~w for:\n"
  -              "    ~p\n    ~p\n", [MyFluName, ChangedServers, _OldMapV, _MapV]),
  +    DelayTimeMS = 300,                          % TODO make configurable!
  +    [erlang:send_after(DelayTimeMS, self(), {adjust_down_list, FLU}) ||
  +        FLU <- ChangedServers],
  +    %% _OldMapV = map_value(OldMap),
  +    %% _MapV = map_value(NewMap),
  +    %% io:format(user, "TODO: ~w async tick trigger/scheduling... ~w for:\n"
  +    %%           "    ~p\n    ~p\n",[_MyFluName,ChangedServers,_OldMapV,_MapV]),
       S#state{pending_map=NewMap, members_dict=MembersDict}.
   
   find_changed_servers(OldMap, NewMap) ->
  
positive.code:     register(RegName, self()),
      {ok, #state{my_flu_name=MyFluName, reg_name=RegName}}.
  
  handle_call({get_unfit_list}, _From, S) ->
      _Unfit = make_unfit_list(S),
      IncompleteAnswer = S#state.local_down,
      io:format(user, "Unfit incomplete answer @ ~w: ~p\n", [S#state.my_flu_name, IncompleteAnswer]),
      {reply, IncompleteAnswer, S};
  handle_call({update_local_down_list, Down, MembersDict}, _From,
              #state{my_flu_name=MyFluName, pending_map=OldMap,
                     local_down=OldDown, members_dict=OldMembersDict}=S) ->
  
negative.code:     io:format(user, "send_spam: ~w: sent to ~w\n", [MyFluName, Sent]),
      ok.
  
  calc_unfit(All_list, HosedAnnotations) ->
      G = digraph:new(),
      [digraph:add_vertex(G, V) || V <- All_list],
      [digraph:add_edge(G, V1, V2) || {V1, problem_with, V2} <- HosedAnnotations],
      calc_unfit2(lists:sort(digraph:vertices(G)), G).
  
  calc_unfit2([], G) ->
      digraph:delete(G),
      [];
  calc_unfit2([H|T], G) ->
      case digraph:in_degree(G, H) of
          0 ->
              calc_unfit2(T, G);
          1 ->
              Neighbors = digraph:in_neighbours(G, H),
              case [V || V <- Neighbors, digraph:in_degree(G, V) == 1] of
                  [AlsoOne|_] ->
                      %% TODO: be smarter here about the choice of which is down.
                      [H|calc_unfit2(T -- [AlsoOne], G)];
                  [] ->
                      %% H is "on the end", e.g. 1-2-1, so it's OK.
                      calc_unfit2(T, G)
              end;
          N when N > 1 ->
              [H|calc_unfit2(T, G)]
      end.
  
  do_incoming_spam(Author, Map,
  