ab7022e118
The get_tag_cloud cache key was built by loading and hashing every embedding blob for the scope *before* checking the cache, so even a cache hit re-read hundreds of MB on large libraries and stalled Explore for several seconds. Validate the cache from a lightweight image-ID-set signature plus the embedding revision instead, so a hit never loads embeddings. The ID-set hash keeps the key membership-sensitive (add/remove/move between folders) and the revision covers an image being re-embedded in place. Cache write failures are now logged rather than silently ignored. On the frontend, switching folders (or re-entering Explore) no longer leaves the previous folder's clusters/tags on screen with no loading indicator: loadTagCloud/loadExploreTags clear stale entries on a real folder switch. The displayed folder is tracked separately (exploreTagsShownFolderId) from the cache-dirty marker so a same-folder invalidation (tag edits, new AI tags) does not masquerade as a switch and wipe the visible list mid-refresh.