The loaded albums of a multi-album share are IN-fetched without preserving
ResourceIDs order, so checking only index 0 could miss the shared album and
fall back to the never-busting bare id. Search the list instead.
Share.CoverArtID built a bare Album{ID}, so public album-share image URLs
were a constant al-<id>_0 — combined with the 10-year cache header, viewers
kept the pre-edit cover forever. Use the loaded album when available so the
URL carries the real timestamps.
Also skip copying cover_art_updated_at in CopyAttributes when the source has
no uploaded_image (a cover removal leaves the stamp set), so an album-ID
merge can't overwrite the destination's valid cover stamp with a stale one.