James Anderson
8b122744ef
fix(pages): align middleware data prefetch caching ( #2451 )
...
* fix(pages): align middleware data prefetch caching
* fix(pages): guard middleware prefetch data kind
* fix(dev): lazily classify pages data kind
* fix(pages): preserve legacy prefetch fallback
* fix(pages): reject unknown prefetch data kind
2026-07-02 21:33:32 +01:00
James Anderson
6bd1ee0153
fix(app-router): expose app rewrites to pages data clients ( #2468 )
2026-07-02 21:03:05 +01:00
James Anderson
e453928dda
fix(app-router): publish committed no-prefetch navigations ( #2469 )
...
* fix(app-router): publish committed no-prefetch navigations
* fix(app-router): remove unreachable visited-cache fallback
* fix(app-router): replay committed no-prefetch cache payloads
* fix(app-router): remove dead committed cache guard
2026-07-02 20:58:48 +01:00
James Anderson
239595e69e
fix(app-router): reuse metadata rewrite prefetches ( #2455 )
...
* fix(app-router): reuse metadata rewrite prefetches
* fix(app-router): normalize rsc reference validation ids
* Revert "fix(app-router): normalize rsc reference validation ids"
This reverts commit bbff1eb13a .
* chore: format link shim
2026-07-01 17:02:35 +00:00
James Anderson
ebf8e59289
fix(app-router): avoid runtime route-tree prefetch sizing ( #2467 )
...
* fix(app-router): start optimistic prefetches immediately
* fix(app-router): support route tree prefetch inlining
* fix(app-router): dedupe max prefetch inlining requests
* fix(app-router): cap route-tree prefetch size reads
* fix(app-router): avoid runtime route-tree prefetch sizing
* Fixed CI type error, flagged parity gap
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
* fix(app-router): preserve negative prefetch inlining thresholds
* fix(app-router): normalize rsc reference validation ids
* Revert "fix(app-router): normalize rsc reference validation ids"
This reverts commit 68b96b596c .
* fix(app-router): keep route-tree prefetch metadata scoped
---------
Co-authored-by: ask-bonk[bot] <ask-bonk[bot]@users.noreply.github.com>
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
2026-07-01 17:47:08 +01:00
James Anderson
b0367f1448
fix(link): avoid reusing dynamic app route prefetches ( #2450 )
...
* fix(link): avoid reusing dynamic app route prefetches
* fix(link): preserve static dynamic app prefetches
* test(e2e): scope segment cache client params to prod
2026-07-01 11:14:11 +01:00
James Anderson
de733ce4aa
fix(app-router): revalidate dynamic intercepted actions ( #2443 )
2026-07-01 11:02:53 +01:00
James Anderson
e0cb913922
fix(app-router): preserve rewritten route identity ( #2358 )
...
* fix(app-router): preserve rewritten route identity
* test(app-router): isolate rewrite prefetch regression
* test(app-router): cover rewritten element keys
* test(app-router): remove orphaned rewrite fixture
* fix(prerender): avoid reloading RSC entry after path injection
2026-06-30 21:14:04 +01:00
James Anderson
49945a9e05
fix(link): reuse full prefetch loading shells ( #2332 )
...
* fix(link): reuse full prefetch loading shells
* fix(link): share loading shell prefetch ownership
2026-06-30 19:34:50 +01:00
James Anderson
b0de1af028
fix(cloudflare): support Sentry request errors on Workers ( #2425 )
...
* fix(cloudflare): support sentry request errors on workers
* fix(cloudflare): avoid worker conditions in node pages builds
* test(cloudflare): run sentry worker e2es in ci
* test(cloudflare): cover sentry render errors
* test(cloudflare): mirror sentry next setup in fixtures
* update lockfile
* update lockfile
* test(cloudflare): cover sentry client instrumentation
2026-06-30 10:58:04 +01:00
James Anderson
a3910e7aa9
feat(cloudflare): add unified worker entry ( #2416 )
...
* feat(cloudflare): add default pages router worker entry
* feat(cloudflare): add unified worker entry
* chore(web): use unified worker entry
* chore(examples): use built-in workers-cache entry
* chore(examples): keep hackernews on app router entry
* chore(cloudflare): rename unified entry to fetch handler
* chore(cloudflare): keep pages entry source helper test-local
2026-06-29 17:33:51 +00:00
Nathan Nguyen
25f3d09332
test(e2e): wait for hydration before dev overlay recovery click ( #2410 )
...
The dev overlay recovery spec armed its reload canary after only confirming that the navigation runtime existed. That was not enough to prove the app-router client tree had hydrated the Link handler, so CI could occasionally follow the anchor as a hard navigation before the soft-nav path was ready.
Reuse the shared app-router hydration helper before setting the canary and clicking the recovery link. The test still exercises the real browser click path, but no longer races client hydration.
2026-06-29 17:44:28 +01:00
Nathan Nguyen
23ed801656
fix(e2e): stabilize nav regression suspense window ( #2408 )
...
* fix(e2e): stabilize nav regression suspense window
* test(e2e): strengthen nav regression flake guard
2026-06-29 16:57:29 +01:00
James Anderson
31e87439df
fix(pages-router): retain prefetched SSG data ( #2366 )
...
* fix(pages-router): retain prefetched SSG data
* fix(pages-router): align SSG export detection
* fix(pages-router): skip data prefetch for non-SSG routes
* fix(pages-router): align data navigation with Next.js
* chore: avoid exporting middleware matcher helper type
* fix(pages-router): preserve client navigation effects
* fix(pages-router): preserve query rewrite history timing
* fix(pages-router): keep data fetch startup synchronous
* fix(pages-router): keep superseded data fetches alive
* fix(pages-router): skip nonmatching redirect matcher awaits
* fix(pages-router): reuse middleware SSR prefetch data
* Fix pages data prefetch CI regressions
* fix(pages-router): evict middleware prefetch cache
2026-06-29 14:52:35 +01:00
James Anderson
0ea90fdbaa
fix(app-router): preserve layouts across soft navigation ( #2316 )
...
* test(app-router): reproduce server layout identity reset
* fix(app-router): preserve soft navigation layout identity
* test(app-router): model bfcache identities in reducer fixtures
* fix(app-router): refresh layouts after revalidating actions
* fix(navigation): balance history restore snapshots
* fix(app-router): refresh layout elements during HMR commits
2026-06-28 23:07:55 +00:00
James Anderson
18e618c53e
fix(app-router): preserve primary parallel route slot ( #2347 )
...
* fix(app-router): preserve primary parallel route slot
* test(app-router): match parallel default layout parity
* fix(app-router): prefer nearest parallel children owner
* fix(app-router): preserve mounted slot state after HMR
* test(app-router): wait for selected parallel slot before HMR
2026-06-28 22:59:48 +00:00
James Anderson
f67f872b88
fix(app-router): preserve named parallel slot state ( #2246 )
...
* fix(app-router): preserve named layout segments
* fix(app-router): preserve named slots on replace
* fix(app-router): preserve named slots through hmr
* fix(app-router): settle named slot review races
* fix(app-router): reject superseded hmr payloads
* fix(app-router): preserve committed named segments
* fix(app-router): resolve intercepted named slot segments
* fix(app-router): preserve unmatched named segments
* fix(app-router): prioritize navigation over pending hmr
* fix(app-router): keep navigation authority over hmr
* fix(app-router): preserve hmr authority for stale lanes
* fix(app-router): preserve page segment marker
2026-06-28 22:35:23 +00:00
James Anderson
f0ba7b4afe
fix(app-router): reuse committed client cache payloads ( #2251 )
...
* fix(app-router): seed client navigation cache
* fix(cache): parse prerender cache metadata marker
* test(cache): cover prerender metadata done marker
* fix(cache): preserve static committed stale time
* fix(link): honor dynamic stale time for auto prefetches
* fix(router): retain committed client cache state
* fix(router): publish client cache after commit
* fix(router): gate hydration cache publication
* fix(router): guard late client cache publication
* fix(router): isolate client cache parity coverage
* fix(router): preserve authoritative navigation commits
* fix(router): preserve committed navigation streams
2026-06-28 22:01:58 +00:00
MaxtuneLee
c602026b6d
fix(app-router): normalize trailing slash in implicit cache tags ( #2390 )
...
* fix(app-router): normalize trailing slash in implicit cache tags for revalidatePath
* docs: remove unnecessary comments
* style: format files
2026-06-28 20:50:18 +01:00
James Anderson
da086c0d65
Revert flaky "fix(link): start viewport prefetches immediately" ( #2386 )
...
This reverts commit 06775d3694 .
2026-06-27 00:23:40 +01:00
James Anderson
13c093926c
fix(test): stop autoscroll fixture servers correctly ( #2384 )
2026-06-26 23:03:46 +01:00
James Anderson
1593d4ce93
fix(app-router): scroll past existing hoisted styles ( #2356 )
...
* fix(app-router): scroll past existing hoisted styles
* test(app-router): restore document descriptor
2026-06-26 21:46:01 +01:00
James Anderson
9faa43e148
fix(app-router): include page segment in flight state ( #2359 )
...
* fix(app-router): include page segment in flight state
* fix(app-router): keep page marker internal
2026-06-26 21:44:20 +01:00
James Anderson
a21667fd09
fix(app-router): discover nested leaf slot routes ( #2350 )
...
* fix(app-router): discover nested leaf slot routes
* test(routing): align nested leaf slot expectation
* test(routing): assert nested leaf route match
* fix(app-router): scope nested leaf slot discovery
2026-06-26 21:42:15 +01:00
James Anderson
cab6622ce8
fix(app-router): restore intercepted history slots ( #2363 )
...
* fix(app-router): restore intercepted history slots
* fix(app-router): scope interception restore proof
2026-06-26 21:41:12 +01:00
James Anderson
06775d3694
fix(link): start viewport prefetches immediately ( #2229 )
...
* fix(link): start viewport prefetches immediately
* fix(navigation): skip client prefetches for bots
2026-06-26 20:38:28 +00:00
James Anderson
737532aaa8
fix(app-router): preserve interception across middleware rewrites ( #2342 )
2026-06-26 21:36:48 +01:00
James Anderson
5c1e870ace
fix(router): honor middleware app rewrites for page links ( #2339 )
...
* fix(router): honor middleware app rewrites for page links
* fix(router): preserve masked page data targets
* fix(router): keep non-middleware data fetch timing
* docs(router): explain middleware data handoff invariants
2026-06-26 21:33:23 +01:00
James Anderson
859a0aac15
fix(app-router): bind layout-only children defaults ( #2335 )
...
* fix(app-router): bind layout-only children defaults
* fix(app-router): preserve standalone slot owners
* fix(app-router): ghost fallback catch-all owners
2026-06-26 21:31:02 +01:00
James Anderson
50e2385986
fix(form): match Next.js navigation parity ( #2245 )
...
* fix(form): match Next.js navigation parity
* fix(form): block dangerous navigation schemes
* fix(form): address Pages navigation review
* fix(form): preserve native and hard navigation fallbacks
2026-06-26 19:56:06 +00:00
James Anderson
70c500bf65
fix(app-router): scope static params across parallel routes ( #2317 )
...
* fix(app-router): scope static params across parallel routes
* fix(app-router): collect static params from parallel layouts
* style(app-router): format parallel route fixtures
* fix(app-router): scope parallel segment params
2026-06-26 20:52:20 +01:00
James Anderson
feb27e8422
fix(client): isolate Pages Router module graph ( #2380 )
...
* fix(client): isolate Pages Router module graph
* fix(client): trim hybrid route ownership graph
* fix(router): preserve document-only hard navigation
2026-06-26 20:52:13 +01:00
James Anderson
c5bd7b33c2
fix(app-router): skip prefetches for bots ( #2323 )
...
* fix(app-router): skip prefetches for bots
* fix(link): scope bot suppression to app prefetch
* fix(app-router): skip form prefetches for bots
2026-06-26 19:59:29 +01:00
James Anderson
77d67a98c4
fix(cache): bypass unstable cache in draft mode ( #2319 )
...
* fix(cache): bypass unstable cache in draft mode
* fix(cache): preserve draft state during action rerenders
2026-06-26 19:58:36 +01:00
James Anderson
89036154cc
fix(pages-router): unify client asset bootstrap ( #2378 )
...
* fix(pages-router): hydrate worker-backed dev pages
* refactor(pages-router): unify client asset bootstrap
* fix(app): preinitialize bootstrap dependencies
* test(app): distinguish preinit scripts from bootstrap
* fix(app): root-anchor bootstrap preinit modules
* test(app): cover bootstrap preinitialization in browsers
* fix(app): share client assets with nested SSR modules
* test(app): verify bootstrap preinit CSP nonces
* test(app): serve CSP nonce in worker fixture
* fix(test): read CSP script nonce property
* fix(cloudflare): emit client assets beside final workers
* fix(build): resolve pages client assets from source
* fix(app): register client assets in ssr graph
* fix(pages-router): harden client bootstrap resolution
* fix(build): emit client assets for node outputs
* fix(build): package client assets in standalone output
* test(app): reference worker nonce fixture explicitly
* fix(build): preserve client assets across environments
* refactor(build): unify client asset outputs
* fix(build): stabilize custom client asset outputs
* fix(build): finalize client assets after app builds
* fix(build): reuse client assets in hybrid builds
* fix(build): scope hybrid client assets metadata
* test(e2e): colocate Cloudflare worker fixture
2026-06-26 19:48:26 +01:00
James Anderson
25a3c26f7a
feat(init): scaffold for cloudflare and node ( #2279 )
...
* feat(init): select deployment platform
* refactor(init): AST-update deployment config
* feat(init): configure Cloudflare cache and images
* fix(init): avoid backtracking in config updates
* fix(init): cover packaged Cloudflare setup
* ci: allow Cloudflare init smoke builds
* ci: fix packaged Cloudflare dependency install
* test(e2e): isolate browser fixture servers
* chore: allow Windows taskkill binary
* fix(init): configure Cloudflare image adapter
* fix(init): address platform setup review
* fix(init): address cache setup review
* fix(init): hide workers cache option
* fix(init): align generated config indentation
* fix(init): validate cloudflare setup before mutation
* fix(init): preserve additive config syntax
* fix(init): tidy interactive prompt spacing
* fix(images): rename Cloudflare optimizer builder
* refactor(images): remove draft name migration
* fix(init): install dependencies after setup
* fix(init): clarify setup recovery steps
* fix(init): ignore Wrangler state for Cloudflare
* fix lockfile
2026-06-26 17:09:19 +01:00
James Anderson
da179857dc
fix(app-router): render templates with children only ( #2322 )
...
* fix(app-router): render templates with children only
* test(app-router): correct server template navigation parity
* LGTM: template fix matches Next.js
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
* chore(test): remove fixture symlink noise
* LGTM: template fix matches Next.js
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
* fix(app-router): preserve template children-only fix
---------
Co-authored-by: ask-bonk[bot] <ask-bonk[bot]@users.noreply.github.com>
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
2026-06-26 14:51:46 +01:00
James Anderson
640e971ec5
fix(pages): match optional catch-all prerender paths ( #2238 )
...
* fix(pages): match empty optional catch-all static paths
* fix(pages): validate static path route params
* fix(pages): share static path matching in dev
2026-06-23 20:00:43 +01:00
James Anderson
e00687a0f6
fix(middleware): match Pages data request metadata ( #2239 )
...
* fix(middleware): preserve Pages data routing metadata
* fix(middleware): preserve matched path on data misses
* test(pages): align middleware data miss assertions
* fix(pages): align dev middleware data misses
* fix(pages): gate data misses on real middleware
* fix(middleware): address data redirect review
* Reviewed PR #2239 : fixes confirmed
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
* chore(tests): remove stray node_modules symlinks
---------
Co-authored-by: ask-bonk[bot] <ask-bonk[bot]@users.noreply.github.com>
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
2026-06-23 19:39:59 +01:00
James Anderson
2cbd2a0356
fix(build): apply default server externals ( #2257 )
...
* fix(build): externalize Next.js default server packages
* test(node): cover externalized shiki in standalone output
2026-06-23 10:20:55 +00:00
James Anderson
a34c083e88
fix(app-router): match interception route precedence ( #2231 )
...
* fix(app-router): prioritize specific interception routes
* fix(app-router): match interception route precedence
* Reviewed PR #2231 : LGTM, minor notes
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
* fix(app-router): align interception route tiebreaks
---------
Co-authored-by: ask-bonk[bot] <ask-bonk[bot]@users.noreply.github.com>
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
2026-06-22 23:37:34 +01:00
James Anderson
d65dd4c601
fix(router): ignore stale initial popstate with i18n ( #2230 )
...
* fix(router): ignore stale initial popstate with i18n
* Review done: no issues found
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
* test(router): run i18n popstate coverage in existing project
---------
Co-authored-by: ask-bonk[bot] <ask-bonk[bot]@users.noreply.github.com>
Co-authored-by: james-elicx <james-elicx@users.noreply.github.com >
2026-06-22 22:36:52 +00:00
James Anderson
6e998ec114
fix(middleware): run on missing build assets ( #2242 )
...
* fix(middleware): run on missing build assets
* fix(middleware): preserve missing asset rewrites on workers
2026-06-22 23:36:49 +01:00
James Anderson
7b21c429c0
fix(app-router): preserve global error details ( #2249 )
...
* fix(app-router): preserve global error details
* fix(app-router): preserve default global error semantics
2026-06-22 23:29:40 +01:00
James Anderson
fbf68d588e
fix(app-router): restore cache and parallel route parity ( #2261 )
...
* fix(app-router): preserve searchParams cache variants
* test(app-router): cover RSC metadata cache variants
* fix(app-router): isolate metadata searchParams observation
* fix(app-router): preserve static ISR cache proofs
* fix(app-router): limit queryless cache probes
* fix(app-router): skip redundant cache proof probes
* fix(app-router): harden incomplete cache proofs
* fix(app-router): observe loading page execution
* fix(app-router): preserve exotic page exports
* fix(app-router): preserve client page ISR
* fix(app-router): avoid duplicate queryless page execution
* fix(app-router): observe viewport search params
* fix(app-router): clear force-static search params
* fix(app-router): isolate intercept static context
* fix(app-router): preserve intercept request context
* fix(app-router): isolate action static context
* fix(app-router): match static request API semantics
* fix(app-router): preserve dynamic segment constraints
* fix(app-router): apply slot-only segment config
* fix(app-router): preserve draft mode reads in static errors
* fix(app-router): include nested slot constraints
* fix(app-router): refresh slot layout constraints
* fix(app-router): render nested slot layouts
* fix(app-router): preserve nested slot params
* fix(app-router): preserve intercepted slot head
* fix(app-router): scope parallel layout params
* fix(app-router): preserve intercept layout parity
* fix(app-router): preserve intercept ancestor params
* fix(app-router): scope intercept source params
* fix(app-router): preserve intercept source route params
* test(app-router): stabilize parity validation
2026-06-22 23:17:41 +01:00
James Anderson
65f9531d00
fix(app-router): canonicalize initial history URL ( #2250 )
2026-06-22 14:50:06 +01:00
Alexander Lichter
4fa904e10e
test(e2e): stabilize app router history navigation ( #2207 )
...
* test(e2e): stabilize app router history navigation
* test(e2e): isolate temporary Vite caches
2026-06-20 13:37:21 +01:00
James Anderson
656a381de9
fix(og): constrain inlined assets to trusted roots ( #2172 )
...
* fix(og): constrain inlined assets to trusted roots
* fix(og): canonicalize asset package boundaries
* test(og): cover canonical boundary intersections
* fix(og): support file-symlinked dependency modules
* docs(og): clarify logical asset boundary resolution
* fix(og): pin symlinked modules to matching packages
* fix(og): keep linked package boundaries narrow
* fix(og): reject workspace-root asset boundaries
* fix(og): name-pin external package boundaries
* fix(og): validate linked package ownership
* fix(og): track linked package ownership
* fix(og): harden linked package provenance
* fix(og): confine captured alias packages
* fix(og): pin captured directory aliases
* fix(og): require alias package ownership
* fix(og): support single-segment aliases
* perf(og): preserve alias lookup precedence
* refactor(og): extract asset ownership policy
* test(og): cover linked package fonts in e2e
* fix(og): recognize resolved package aliases
* fix(og): support regex package aliases
* test(og): isolate linked font fixture
* docs(test): clarify linked font coverage
2026-06-19 16:08:46 +01:00
MaxtuneLee
42f8700f15
fix(router): enhance navigation with as mask for URL handling ( #2076 )
...
* fix(router): enhance navigation with `as` mask for URL handling
* fix(router): implement bracket-pattern interpolation for dynamic routes in Pages Router
* fix(router): preserve masked state in beforePopState
* fix(router): cover basepath navigation in ci
* docs(router): clarify navigation state invariants
* refactor(router): require complete history state
* refactor(router): share dynamic href interpolation
* test(router): cover localized masked navigation
* fix(router): keep interpolation internals private
---------
Co-authored-by: James <james@eli.cx >
2026-06-19 00:07:03 +01:00
James Anderson
12f04d6d63
fix(app-router): block dangerous RSC redirect URLs ( #2154 )
...
* fix(app-router): block dangerous RSC redirect URLs
* refactor(app-router): reuse blocked navigation reporter
* style(app-router): format redirect guard import
2026-06-18 17:51:07 +00:00