Two issues in the fill-triggered blurhash recompute:
1. Enqueuing was gated on a cache miss (!r.Cached). On an upgraded instance the
image cache is persisted and adopted across restarts, so already-cached
artwork serves as a cache hit and never enqueued, leaving its migrated-empty
blur_hash as a synthetic value indefinitely. Enqueue on every original-size
serve instead: the worker's freshness guard turns already-hashed rows into a
cheap read and only recomputes when the hash is stale or missing.
2. Enqueue merged the gone flag with a sticky OR, so a cover restored right
after a missing-art serve kept gone=true and took the clear-and-return path,
never recomputing. A successful serve proves the artwork exists, so it now
clears any pending gone for that artwork; a gone that follows a fill still
sticks.