WIP for review

This has a bunch of ideas I'll document inline
My other option was to move the constraint setting mechanism to the rules. I'll pull that thread