Half of #369 — the auto-poll piece. Inbox deferred (separate task).
Both /requests (user) and /admin/requests (admin, 'approved' tab only)
now refetch every 12s while at least one row has status='approved'.
Stops automatically when all rows settle to pending/completed/rejected.
TanStack Query's default refetchIntervalInBackground=false handles
the visibility behavior — polling pauses when the tab is hidden and
resumes on focus.
Predicate hasInFlightRequest() is exported + tested so the polling
logic is auditable independent of TanStack Query's internals.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>