I think this is possible to do, without rewriting eventing from the scratch.
We will have two syntax that are allowed for list items.
Current one without any change:
list: [A, B, C, D]
and new one:
list: #equal [C, D, E, F, G]
add: [E, F, G]
sub: [A, B]
Yaml can easy recognize between list and map and we can exploit it. For code perspective change will be very small form current version:
_list = node["list"].as<std::vector<std::string> >(_list);
we will have
Ruleset::uniqueList(_list, node["list"]); https://if it's list, work old way, if map it's adding/removing unique values.
When everyone adds only, then this will work fine without worrying about load order to much. But with use of delete this could be problematic in theory.
Biggest problem I see is that will be very hard to debug, because you will never see final list, and load order will be very important.
And now question for Warboy and moddes, this will be worth its cost?