I have an old post here where I did something very similar (http://
groups.google.com/group/dddcqrs/browse_thread/thread/2ba20ecfdf585bd5/
b2855c957e229846). In it there is a data set that is part of the
state of the aggregate root.
Funny enough the aggregate root also has a list of rules. I
considered rules to not be their own aggregate, since we can't have a
rule without a the program existing. So you need to consider if, from
the perspective of you business domain, a rule is really its own
root.
From there it is fairly straight forward to populate the list from
events like AddNewRule, RemoveRule, etc.
Otherwise you are entering the topic of interaggregate communication.
I've seen this handled two ways:
1. Expose some state in your aggregates so you can interact with them
at the command level. This violates the tell-don't-ask approach of
CQRS though, but it may offer you a simple solution at the risk of
polluting your domain.
2. Use some form of interaggregate messaging via the domain events.
This seems to be the prefered and 'pure' approach. I know that they
are working on having something built-in for this in nCQRS but it
isn't done yet.
I will agree I have found the concepts of inter-aggregate dependencies
and communication in CQRS to be a challenge as well.
Chris