The face pass set the status to "checking faces…" once and then said nothing
until it was finished. On a library whose first export after a re-index is 9,849
photographs and 85 MB of shards, that is eight minutes of a progress bar sitting
still — which is indistinguishable from a hang, and was reported as one twice.
Nothing was wrong with the sync. The only fault was that it was silent.
Three places now report, which are the three that take real time:
- **Preparing**, per image with a count, since this is the long one and the only
one whose length the user cannot guess from anything on screen.
- **Sending**, per shard with its size, because a face shard carries crops and
runs to tens of megabytes — one of them is a visible wait on any connection.
Announced before the upload rather than after, since the wait *is* the upload.
- **Taking in** a peer's shard, which is a download and then a row-by-row merge.
The export reports every 25 images rather than every one, so the channel behind
it stays lost in the write it accompanies. `export_to_shards` keeps its old
signature and delegates, so the callers that do not want progress do not grow a
parameter for it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>