fix: prevent infinite scroll from looping by guarding on fetch state
The IntersectionObserver callback now checks !isFetching before calling
fetchNextPage, preventing repeated requests while a fetch is in progress.
Sentinel stays mounted; no unmount/remount tricks needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>