anchor.diff:  %%     interesting_install_edge(X).
   
   calc_configs(Commit, CommitObj, #cstate{re=RE, table=Cache, storage=StoreMod}=State) ->
  -    Tree = wallaroo_commit:get_tree(CommitObj, StoreMod),
  -    {Entities, Relationships} = wallaby_graph:extract_graph(Tree, StoreMod),
  -    Installs = digraph:new([private]),
  -    [digraph:add_vertex(Installs, Ent) || Ent <- Entities, interesting_install_vertex(Ent)],
  -    [digraph:add_edge(Installs, E1, E2, Kind) || F={Kind, E1, E2} <- Relationships, interesting_install_edge(F)],
  -    Order = lists:reverse(digraph_utils:topsort(Installs)),
  -    [calc_one_config(Entity, Tree, Commit, State) || Entity <- Order].
  +    case seen(Commit, State) of 
  +	true ->
  +	    ok;
  +	false ->
  +	    Tree = wallaroo_commit:get_tree(CommitObj, StoreMod),
  +	    {Entities, Relationships} = wallaby_graph:extract_graph(Tree, StoreMod),
  +	    Installs = digraph:new([private]),
  +	    [digraph:add_vertex(Installs, Ent) || Ent <- Entities, interesting_install_vertex(Ent)],
  +	    [digraph:add_edge(Installs, E1, E2, Kind) || F={Kind, E1, E2} <- Relationships, interesting_install_edge(F)],
  +	    Order = lists:reverse(digraph_utils:topsort(Installs)),
  +	    [calc_one_config(Entity, Tree, Commit, State) || Entity <- Order],
  +	    see(Commit, State)
  +    end.
   
   path_for_kind(feature) ->
       <<"features">>;
  
positive.code: handle_call({reset}, _From, #cstate{table=C}=State) ->
      {reply, ets:delete_all_objects(C), State};
  handle_call({has_config, Kind, Name, Commit}, _From, #cstate{storage=StoreMod}=State) ->
      Result = generic_lookup(Kind, Name, Commit, State, false),
      case Result of
  	{value, Config} when is_list(Config) ->
  	    {reply, true, State};
  	_ ->
  	    {reply, Result, State}
      end;
  handle_call({config_for, Kind, Name, Commit}, _From, #cstate{re=RE, table=Cache, storage=StoreMod}=State) ->
      {value, Config} = generic_lookup(Kind, Name, Commit, State, []),
      {reply, Config, State}.
  
  handle_info(_X, State) ->
  
negative.code:   when Kind =:= 'node' ->
      %% get node object from tree
      {value, EntityObj} = wallaroo_tree:get_path([path_for_kind(Kind), Name], Tree, StoreMod),
      Config = {wallaby_lw_config, Commit, wallaby_node:all_memberships(EntityObj)},
      cache_store(Kind, Name, Commit, Config, State).
      
  reconstitute_config({wallaby_lw_config, Commit, Memberships}, State) ->
      lists:foldl(apply_factory(false, State), [], [cache_fetch(group, Membership, Commit, State) || Membership <- lists:reverse(Memberships)]);
  reconstitute_config(Val, _) ->
      Val.
  
  join_factory(Bin) when is_binary(Bin) ->
      fun(Old, New) ->
  