refactor error recovery to always back out a mini-transaction
simplify variant reparenting.  turns out I just screwed up the test