You definitely don't want all upgrades to be transactional, at least not without being able to reuse partial results. E.g. having to rebuild an llvm update because some other package failed to build would suck.
Presumably one wouldn't throw away the built packages if some other build fails just because we're delaying installing the packages to `/` until later.