.changelog/3280.md
UIImage(contentsOfFile:) was called with the path-component of an HTTPS URL when artwork wasn't cached locally; now guarded with isFileURL so inline thumbnailData is only set from real local files while thumbnailURL still allows Spotlight to fetch the remote imageIndexRequestHandler.fileURL(for:) could return a remote HTTPS URL after the artwork fallback change, causing Data(contentsOf:) to block the extension with a synchronous network request; it now only returns local file URLsData(contentsOf:) for save-state Spotlight indexing now guards behind isFileURL to prevent accidental synchronous network requests when the game artwork URL is remoteoriginalArtworkFile?.url only, which is nil for games imported before the originalArtworkFile field existed; now also checks PVMediaCache via trueArtworkURL so pre-existing OpenVGDB-cached artwork is displayedpathOfCachedImage was looking up url.lastPathComponent in PVMediaCache (double-hash), and fetchArtworkFromCache() used the full local path as a key; both now resolve directly from the file URL since PVImageFile already stores the local pathoriginalArtworkFile.pathOfCachedImage, fall back to PVMediaCache keyed by trueArtworkURL) into ArtworkLoader.resolveLocalArtworkFileURL(forGameId:) with a process-wide memo cache; clearLocalURLCache() / clearLocalURLCache(forGameId:) are provided for invalidation after re-import