Skip to content

Conversation

@pull
Copy link

@pull pull bot commented Jan 28, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

timneutkens and others added 5 commits January 28, 2026 16:10
## What?

Found this argument was unused and only being passed around.
## Summary

Refactors segment cache entries to receive their stale time from the
server response rather than inheriting from the parent route cache
entry. This decouples the lifetime of segment data from the route tree,
preparing for future optimizations.

When I say "route" here, what I'm referring to is the mapping of URL ->
layout/page hierarchy. Typically this is a predictable mapping based on
the App Router's file-based routing conventions; however, it's possible
to rewrite the URL to a different internal route path.

Conceptually, the cache life of a route corresponds to how often a proxy
is expected to dynamically rewrite or redirect a URL. We don't currently
expose a way to directly control this, but if we did, you could think of
it as being equivalent to adding `use cache` (and `cacheLife`,
`cacheTag`, etc.) to the `proxy()` function.

The point, though, is that the route tree has a different lifetime than
data rendered on the page. Route trees change relatively infrequently,
like due to a logged in/out state change, or a feature flag change. So
we can/should cache them fairly aggressively by default.

This is related to an upcoming change where we'll go even further and
_predict_ routes we haven't visited yet based on structurally similar
routes we've already seen.

This PR itself, though, makes no behavioral changes; it just sets up the
subsequent steps.

## Test Plan

No behavioral changes - existing tests should pass.
Based on:

- #88834

---

Follows from the previous commits that decoupled route stale time from
segment data. Now that routes have their own lifecycle, we can simplify
the implementation: route stale times are always the static constant,
rather than being derived from server-provided values.

Route structure is essentially static — it only changes on deploy. The
exception is rewrites/redirects in middleware or proxy, which can change
routes dynamically based on request state. But we have other strategies
for handling those cases (e.g., route interception headers, cache
invalidation on auth state changes).

This simplification removes the need to thread stale time through
various call sites. The `fulfillRouteCacheEntry` function now computes
the stale time internally from a `now` timestamp parameter, following
the convention used elsewhere in the codebase.
#89176)

Specifically, the `lint` job is currently failing in CI for
`apps/bundle-analyzer/next-env.d.ts`, e.g.:

https://github.com/vercel/next.js/actions/runs/21444929031/job/61758061793?pr=89175
The warnings from `baseline-browser-mapping` about outdated data fail some tests that don't expect the CLI output. By updating the dependency we avoid showing the warning for now, and by setting the environment variable `BASELINE_BROWSER_MAPPING_IGNORE_OLD_DATA` we should silence any future warnings as well.

related:
- #86625
- #86653
@pull pull bot locked and limited conversation to collaborators Jan 28, 2026
@pull pull bot added the ⤵️ pull label Jan 28, 2026
@pull pull bot merged commit 11e2950 into code:canary Jan 28, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants