anchor.diff:    @java.lang.Override
     protected boolean bulkCollectDataForSubscriptionUpdate( @javax.annotation.Nonnull final org.realityforge.replicant.server.transport.ReplicantSession session, @javax.annotation.Nonnull final java.util.List<org.realityforge.replicant.server.ChannelAddress> addresses, @javax.annotation.Nullable final Object originalFilter, @javax.annotation.Nullable final Object filter )
     {
  -    final org.realityforge.replicant.server.ChannelAddress address = addresses.get( 0 );
   <% bulk_subscription_update_graphs.each do |graph| -%>
  -    if ( <%= repository.imit.qualified_subscription_constants_name %>.<%= Reality::Naming.uppercase_constantize(graph.name) %> == address.getChannelId() )
  -    {
  +    if ( <%= repository.imit.qualified_subscription_constants_name %>.<%= Reality::Naming.uppercase_constantize(graph.name) %> == addresses.get( 0 ).getChannelId() )
  +    {
  +      assert null != filter;
         _context.bulkCollectDataFor<%= graph.name %>Update( session, addresses, (<%= Domgen::Java.java_type(graph.filter_parameter, :ee, :default) %>) originalFilter, (<%= Domgen::Java.java_type(graph.filter_parameter, :ee, :default) %>) filter );
  +<%
  +  processed = []
  +  graph.outward_graph_links.select{|graph_link| graph_link.auto?}.each do |graph_link|
  +     target_graph = repository.imit.graph_by_name(graph_link.target_graph)
  +     next unless target_graph.filtered?
  +     key = "#{graph_link.source_graph}=>#{graph_link.target_graph}"
  +     next if processed.include?(key)
  +     processed << key
  +-%>
  +      for ( final org.realityforge.replicant.server.ChannelAddress address : addresses )
  +      {
  +        propagateFilterFrom<%= graph.name %>To<%= target_graph.name %>( session, <% if graph.instance_root? %>address.getSubChannelId(), <% end %>(<%= Domgen::Java.java_type(graph.filter_parameter, :ee, :default) %>) filter, org.realityforge.replicant.server.ee.EntityMessageCacheUtil.getSessionChanges() );
  +      }
  +<% end -%>
         return true;
       }
   <% end -%>
  -    return super.bulkCollectDataForSubscriptionUpdate( session, address, originalFilter, filter );
  +    return super.bulkCollectDataForSubscriptionUpdate( session, addresses, originalFilter, filter );
     }
   <% end -%>
   <% updateable_graphs = repository.imit.graphs.select{|graph| graph.filter_parameter && !graph.filter_parameter.immutable?} -%>
  
positive.code: <% bulk_subscribe_graphs.each do |graph| -%>
      if ( <%= repository.imit.qualified_subscription_constants_name %>.<%= Reality::Naming.uppercase_constantize(graph.name) %> == address.getChannelId() )
      {
        _context.bulkCollectDataFor<%= graph.name %>( session, addresses<% if graph.filter_parameter -%>, (<%= Domgen::Java.java_type(graph.filter_parameter, :ee, :default) %>) filter<% end %> );
        return true;
      }
  <% end -%>
  
negative.code:     if( <%= repository.imit.qualified_subscription_constants_name %>.<%= Reality::Naming.uppercase_constantize(graph.name) %> == address.getChannelId() )
      {
        assert null != filter;
        propagateFilterFrom<%= graph.name %>To<%= target_graph.name %>( session, <% if graph.instance_root? %>address.getSubChannelId(), <% end %>(<%= Domgen::Java.java_type(graph.filter_parameter, :ee, :default) %>) filter, changeSet );
      }
  <% end -%>
  <% end -%>
  