sha256convert: don't delete a pre-created target dir on failure cleanup
Commit

From PR review: ensureEmptyTarget accepts a directory that already exists as long as it's empty, but the failure-cleanup defer called os.RemoveAll(req.TargetDir), removing the directory itself. If a user pre-created the target -- a mountpoint, or a dir with ownership/ACLs they set up -- any error after PlainInit destroyed the whole directory, contradicting the comment's claim that cleanup "only ever removes content this run created."
ensureEmptyTarget now reports whether it created the directory. cleanupConvertedTarget uses that: remove the tree outright when the run created it, but only strip the contents (leaving the directory) when the user pre-created it. Either way the pre-run state is restored exactly.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com Entire-Checkpoint: 940c36562004