Rules
Rules are just a tool the module developer can use. They are used for core features like permissions, look and feel, help messages, and the developer can create new ones for any purpose. You look up the card like this:
rule = card.rule_card(:code)
And access the card's type and content to implement a feature. Rule lookup will match the most specific rule, the lowest one on the list above. Generally only one rule will apply to any card, but the developer could combine all matching rules by using a different lookup method. In code rules, we often use ruby class overloading to combine rules; by loading the most specific pattern's rule last, any redefinition will override one from a less specific set.