Still hackish, but starting to take shape
Switched failures to a violation-set representation (previously was an ordered sequence, which assumes some evaluation order and doesn't deduplicate e.g. null issues).