* fix(desktop): output-directory admission agrees with SafeOutputTree for #9291
* fix(desktop): admit build export and witness folders through planOutputTree
Main now owns new-or-empty folder admission in planOutputTree, so the
separate admitNewOrEmptyOutputDirectory check is superseded. Keep the
remaining parts of #9291 on that owner:
- export_build_environment plans the caller's directory before running
export-desktop-application in the build computer.
- planOutputTree refuses a folder, or the nearest existing ancestor of an
absent one, that the host cannot write, so check_build_task refuses it at
the seed instead of after the recording ends.
- writeOutputTree creates missing parents through SafeOutputTree's
createParents, which maps a file or denied parent to a destination
refusal, instead of a raw mkdir before admission.
Restore main's withheld-copy test, which this design leaves unchanged.
* fix(desktop): require a readable parent where publication syncs it
SafeOutputTree.commit opens the output folder's parent read-only to sync
it, so a write-only parent passed admission and failed only at
publication. planOutputTree now also requires read access on that parent
when it already exists.
---------
Co-authored-by: Phon <twilyt1@proton.me>