Each active hold gets an Export... action for people with
sysLegalHoldExport: pick some of the people it covers, or none for all
of them, and give a reason for the audit log. The server collects the
ZIP in the background (inbuxa:HoldExport, LH-12); the hold's card lists
its exports, newest first, polls while one is collecting, and shows the
item count, size and SHA-256 once it's ready.
Download follows the audit log export: the session's downloadUrl, for
the signed-in person's own account, since the file is the blob of
whoever started it. It's a temporary upload, so the list says only
that person can download it and that the file goes after the upload
time-to-live while the record stays.
Tested: unit tests for the client (status mapping, the create call,
refusals, file names); typecheck and lint; and end to end in headless
Chrome against a local server on the export branch: a hold over a demo
domain exported 173 items, and the downloaded file was a 178,798-byte
ZIP whose SHA-256 matched the one shown.