i agree that an ability to treat the entire cookbooks
upload (along with databags and roles) will be awesome,
and simplify lot of tooling, i am not sure how much effort
it will take to do something like that ..
we currently follow pretty much the same workflow as you
have described, but we do use a staging chef server. we also
do a cleanse before the upload (remove all cookbooks,
databags etc), this ensures we are not carrying over any
artifacts, and that we can completely restore an older state
(including the clients). This is pretty much like
implementing the transaction logic at your end.
also we use jenkins , along with the ghprb plugin (github
pull request builder), which test individual PRs . We dont
test all the feature branches, only the PRs. the ghprb
plugin lets you retest, bypass PRs using comments to.
till now this is working, and solving the problem we wanted to
address, but its time consuming (chef zero might be helpful on
this), but it also opened up a can of other issues related to
jenkins automation.. but thats different