I've got a multichannel design where each channel is defined in a sheet made up of three subsheets. The three subsheets are tightly integrated in the layout, so having one room per subsheet doesn't help me. Having one room for each channel would be great, but as far as I can tell there's no way to convince Altium to do this automatically. The room created by the channel sheet only contains the components defined on that sheet, NOT any components defined on subsheets. This makes some amount of sense because rooms are not hierarchical in any sense.
If there's a way to make Altium automatically generate a room that contains the components in the subsheets as well as the top level sheet I would love to know about it. In the meantime, I've worked around it by manually editing the room design rules by changing them from a simple 'Component Class' definition to a custom query like this (repeated for each channel):
InComponentClass('10.1') OR InComponentClass('11.1') OR InComponentClass('12.1') OR InComponentClass('13.1')
That works fine, except whenever I push an update from schematic, it wants to revert the room rule to just the normal component class for the main sheet. Even if I rename the room, or even if i create a new room from scratch, the comparator appears to look for a room definition that contains the component class from the main channel sheet and attempts to revert it. I can disable room definition checks in the Comparator tab under Project Options, but that's an all-or-nothing thing. It works for this design because I don't need to change rooms any more, but in other cases I may very well want to only preserve certain rooms against change. Is there any way to lock the definition of a specific room? Locking the room itself does not protect it against design updates, and it doesn't appear that there's any way to otherwise lock the specific design rule itself either.