Currently, the validation engine is ad-hoc code. I'm proposing that we impose a structure on that code specifically to look like this:
validateBlock(block): Check Validation Block Jump to rules for a specific block version/height/time: For rule in rules: if not rule(block): return false return true
With possibly some post-validation step that ensures all the rules that are required ran.
This opens up to better hardfork coding practices, and validation of hardforks in the future.