Skip to content

Report and cause ​

The iPhone recording shows previously displayed thumbnails turning into placeholders on an upward scroll. A second recording from Cardzia clarifies the desired experience: artwork stays present when revisiting rows within a series, while entering another series may load progressively.

SetDetailScreen used the price/detail-prefetch visibility window to pass loadImage=false to mounted CardTile components. That explicitly removed their native Image even when its URL was cached. The next visibility callback mounted it again. This client-side behavior is distinct from the transient HTTP 429 recovery documented in the previous image fix.

Correction ​

Remove that display gate. FlatList remains virtualized with a bounded render window; mounted tiles keep their backend image URL until the tile is unmounted, its source changes or a real image error occurs. Full artwork prefetch and visible-price scheduling remain bounded and unchanged. Native memory/disk caching is retained; no cache purge or URL cache-busting is introduced. Native memory eviction and cold entry can still require image decoding/loading; this is not a promise to retain the entire catalogue in RAM.

Verification ​

The screen/component regression renders an image, moves visibility to later rows and renders the old row before the return callback. Before the fix its image source disappears; after the fix it remains identical. Four focused suites (18 tests) pass, including error recovery and prefetch limits. Full gate results are recorded in the linked mobile PR.

.maestro/set-artwork-scroll-return.yaml provides an account-preserving scroll-and-return flow with before/after screenshots for review. It does not automatically prove absence of native flicker. No iPhone or Maestro is available on the development VPS; device validation remains required. No account, collection, production service or database is changed.

Delivery ​

Targets staging and requires a new mobile build for TestFlight. No API deployment or migration is needed. Revert the mobile commit if necessary; cached resources and personal data need no restoration.