I proposed the build directory parameter because the copytree hook made no sense to me. It is not a perfect substitute but perhaps a configurable build directory is nice on its own without having to satisfy all older arguments in favor of copytree. I think true in-place builds are the oddball (for example 2to3 or any build where sources have the same name as outputs needs a build directory to put the translated .py files, otherwise it would overwrite the source). What people think of as in-place builds in distutils are usually just builds into the default build directory.

IIRC the main reason we are worried sdist generation would fail is when you are trying to do new development from an unpacked sdist. Suggest not worrying that this use case is a perfect experience. It's good enough for quick patching, but if you need to do a new source release then you probably have time to meet the requirements of your build backend.

Surely the pluggable build systems will compete on reliability, rather than repeatedly making MANIFEST.in errors you will be able to just switch build-backend.