I'm pretty sure I ran it from my user account via sudo.
In testing, the error sure does seem consistent with what would happen if I had forgotten the sudo. I don't *think* I'm that absent-minded, but I guess I'm getting older and that must be it.
Does "Transaction couldn't start (no root?)" mean "not running as root"? That didn't even occur to me, as it seems to be saying that the _transaction_ has no root, whatever that might be. (An unfortunate effect of "root" having multiple meanings.)
How about "Transaction couldn't start (required root privileges not available)" or something?
It would also be nice to have the error _before_ the packages are all downloaded.

Improved the error message in 963bbe6, it is now going to say:
Failed to obtain the transaction lock (logged in as: akozumpl).
The 'noroot' plugin does exactly what you suggest, i.e. it stops DNF before any download happens and explains it nicely. 'dnf install dnf-plugins-core' should get you set.