I know this has been mentioned in another issue, but this really tripped me up.
Any call to update! that returns a lazy sequence doesn't result in a sane cursor. This means that the first update works, but the second fails because you can't transact! a plain old fashioned list. The solution is to call vec inside of update!, which isn't a huge deal but it is confusing for new users.