transaction now handles partial failures

which was the bug I was trying to fix before. this one however, actually
works and has a test.