anchor.diff:  % nodes getting added/removed, and gossiping about config
   % information.
   %
  --record(config, {dynamic = [], % List of TupleList's.  TupleList is {K, V}.
  -                 static = []   % List of TupleList's.  TupleList is {K, V}.
  +-record(config, {static = [], % List of TupleList's.  TupleList is {K, V}.
  +                 dynamic = [] % List of TupleList's.  TupleList is {K, V}.
                   }).
   
   %% gen_server callbacks
  
positive.code:         false          -> search(SL, Key)
      end.
  
  %% gen_server callbacks
  
  init(undefined) ->
      {ok, #config{static = [config_default:default()]}};
  
  init({config, D}) ->
      {ok, #config{dynamic = [D], static = [config_default:default()]}};
  
  init(ConfigPath) ->
      Config = read_file_config(ConfigPath),
      Merged = pick_node_and_merge(Config, nodes([visible])),
      % TODO: Should save the merged dynamic file config.
      {ok, Merged}.
  
  terminate(_Reason, _State)          -> ok.
  code_change(_OldVsn, State, _Extra) -> {ok, State}.
  
  handle_info(_Info, State)                 -> {noreply, State}.
  handle_call(get, _From, State)            -> {reply, State, State};
  handle_call({set, Config}, _From, _State) -> {reply, ok, Config}.
  handle_cast(stop, State)                  -> {stop, shutdown, State}.
  
  %%--------------------------------------------------------------------
  
  read_file(ConfigPath) -> file:consult(ConfigPath).
  
  read_file_config(ConfigPath) ->
      DefaultConfig = config_default:default(),
      % Static config file.
      {ok, S} = read_file(ConfigPath),
      % Dynamic data directory.
      {value, DirPath} = search([S, DefaultConfig], directory),
      ok = filelib:ensure_dir(DirPath),
      % Dynamic config file.
      D = case read_file(filename:join(DirPath, "dynamic.cfg")) of
              {ok, DRead} -> DRead;
              _           -> []
          end,
      #config{dynamic = [D],
              static  = [S, DefaultConfig]}.
  
  pick_node_and_merge(Local, Nodes) when length(Nodes) == 0 -> Local;
  pick_node_and_merge(Local, Nodes) ->
  
negative.code: 
  merge_configs(Remote, Local) ->
      % we need to merge in any cluster invariants
      merge_configs(mergable(), Remote, Local, []).
  
  merge_configs([], _Remote, Local, Acc) ->
      Local#config{dynamic = [Acc]};
  