snap() captured the instant a screen appeared. Three call sites snapped
with nothing waited on at all — dashboard, explore and feed — and the
iPad dashboard duly came out as a bare spinner on a white field, which is
what I handed over for the App Store.
It now waits out any activity indicator (30s) and for the first row to exist before capturing, so the guarantee lives in the helper rather than in remembering to assert before every call.
All four sets re-shot and checked: 20 screenshots, iPhone 1320x2868 and iPad 2064x2752, light and dark.