Autoupdate API supports definitions of features:
http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-autoupdate-services/org/netbeans/spi/autoupdate/UpdateItem.html#createFeature(java.lang.String, java.lang.String, java.util.Set, java.lang.String, java.lang.String, java.lang.String)
and ergonomics module reuses that heavily. Basically there is a single feature per cluster (lists all its AU visible modules).
The goal of the system is to always operate on cluster boundaries. A cluster (or at least all its AU visible modules) should either be turned on or off if manipulated by ergonomics.
This is hard to achieve in current system. Originally I tried to include all transitive closures into a single closure (e.g. JavaEE would contain its modules as well as all modules coming from JavaSE). This works OK, when turning modules on, but is heavily broken when disabling them (disabling JavaEE disables JavaSE too, see bug 187678).
However without having the transitive closure we get bug 177202 - e.g. not all AU visible modules in clusters were enabled. It is hard to find balance between the enabled/disable scenario.
However there seems to be a good solution: allow features to have dependencies on other features. Thus the JavaEE feature would have dependency on the JavaSE feature and the system would know that it needs to enable whole (AU visible) modules in JavaSE, but when disabling it would know that only modules from JavaEE feature (and potential features on top of it) need to be disabled (nothing from JavaSE).
Please allow dependencies between AU features.
Fixed in NB7.3 - together with issue 187678.