fix #130 by not rerunning all of `valid?` after setting the result
use change matcher instead of have
Merge branch 'do-not-duplicate-errors'