Rules Project: Rules Compiler

In thinking about stuff in RulesProjectPlan, specifically RulesProjPromotion, myself (Justin) and Daniel quickly got bogged down in thinking about how to deal with the following categories of rules in the ruleset:

namely the following problems arise:

Given those problems, I suggest that we may be better off using a compiler. In other words, I propose

The compiler runs recursively through the "source" tree, picking out rules. If the rule is listed as "manually promoted" with the relevant directive, it'll be promoted; otherwise that's up to the auto-promotion criteria noted previously.

When a rule is promoted, it's output to a file in the output directory:

The current core ruleset becomes source files for the compiler. All the current rules are tagged as "manually promoted", right off the bat. We can gradually "demote" them to require decent performance, instead, as time goes on.

The major win? We get to preserve revision history.

Finally, an important point – the "source" files are still rules files, in other words they can be used as rules files for a mass-check or for the "spamassassin" script.