Serve ISR fallback shells in response to prefetch requests (#94534)
Previously, a static segment prefetch that hit a route with an
unresolved ISR entry could not be served a fallback shell, so the
prefetch cache was left cold until the entry regenerated. This enables
prefetch requests to be served the ISR fallback shell immediately, so
the prefetch cache can be warmed right away instead of waiting.
Because the shell is only a partial response, the client retries the
prefetch a bounded number of times so it eventually warms the cache with
the full (concrete) response once the server finishes regenerating in
the background. Only shells that can actually be upgraded are retried —
a route with no generateStaticParams never upgrades, so its shell isn't
flagged and the client doesn't waste retries on it.
The new serving behavior is gated behind the experimental `appShells`
flag, so existing behavior is unchanged when it's off.
<!-- NEXT_JS_LLM_PR -->