ReceivePollWorker
Doze-aware background poll for incoming UNSHIELDED NIGHT (#271). Scheduled by WalletForegroundService.attach — periodically (~15 min) and as an expedited one-shot when the app backgrounds — so a receipt is noticed even while the app is backgrounded / the device is locked, when the live observer isn't running.
Flow: read the poll target (ReceiveTargetStore) → seed-free one-shot catch-up (BackgroundReceiveChecker.newReceipts) that returns per-transaction inbound NIGHT receipts classified by UTXO-set provenance (#284 — our own change is never a receipt) → announce each one not yet seen (ReceiveCheckpointStore tx-id cursor, shared with the live observer). Skipped when the wallet UI is foreground (the live observer covers that, and there's no point summoning someone who's already here).
Shielded receipts are out of scope here — they need the seed-derived viewing key (#280).