Commit Graph

16 Commits

Author SHA1 Message Date
James 729f0f5cb6 feat(cache): add Workers Response Store POC 2026-09-08 16:50:23 +01:00
James Anderson 86afc11051 refactor(cache): delegate response policy to CDN adapters (#3191)
* refactor(cache): delegate response policy to CDN adapters

* fix(cache): keep adapter policy fail closed
2026-09-08 10:35:02 +01:00
James Anderson 35af79106e fix(cloudflare): reduce staged CDN probe work (#3168)
* fix(cloudflare): reduce staged cacheability probes

* fix(cloudflare): isolate uncached response renders

* test(cloudflare): cover uncached entrypoint collisions

* fix(cloudflare): preserve i18n middleware probe scope

* fix(cloudflare): preserve purge routing in uncached renders

* fix(cloudflare): match runtime middleware probe paths

* fix(cloudflare): keep probe concurrency saturated

* fix(cloudflare): preserve encoded middleware probe paths

* fix(cloudflare): preserve websocket upgrade responses

* fix(cloudflare): preserve deferred probe route ownership

* fix(cache): preserve warmed responses on browser reload

* fix(cloudflare): preserve warmed cache on reload

* fix(cache): preserve App responses on browser reload

* test(cache): preserve full-stage coverage after reload parity
2026-09-07 21:48:30 +01:00
James Anderson 91880b2e6d fix(build): preserve staged prerender routing (#3151)
* fix(build): preserve staged prerender routing

* fix(build): prerender the emitted application entry

* fix(build): preserve application entry across prerender workers

* fix(build): preserve nested prerender artifact roots

* fix(build): preserve nested server artifact roots

* fix(build): honor configured prerender output roots

* fix(build): keep staged prerender artifacts canonical
2026-09-07 21:48:27 +01:00
James Anderson 2a08fb7913 fix(cloudflare): classify CDN cacheability per concrete route (#3115)
* fix(cloudflare): scale cacheability probing

* fix(cloudflare): preserve cache policy probe identities

* test(cache): cover conditional response vetoes

* fix(cache): match header policy sources exactly

* perf(cache): compute probe safety per pattern

* fix(build): omit empty route ownership metadata

* fix(cloudflare): classify cacheability per concrete path

* fix(cloudflare): retain zero-path static fallbacks

* test(cloudflare): cover on-demand static fallbacks

* fix(cloudflare): admit custom vary cache variants

* fix(cloudflare): keep wildcard vary private

* fix(cloudflare): reject wildcard vary during probing

* fix(cloudflare): reject empty Cache Components params

* fix(cloudflare): scope empty params validation to pages

* fix(cloudflare): remove cacheability response size limits

* fix(cloudflare): bound completed cache admission

* fix(cloudflare): release failed admission captures

* fix(cloudflare): honor staged readiness retries

* fix(cloudflare): retain probed manifest in dist

* fix(cloudflare): probe staged readiness without rendering

* fix(cloudflare): verify staged readiness response

* fix(cloudflare): reserve staged readiness endpoint

* fix(cloudflare): relax cacheability manifest bounds

* perf(cloudflare): avoid duplicate deployment status check
2026-09-01 21:25:26 +01:00
James Anderson c8bea6bccf feat(cache): classify and warm static Route Handlers (#3113)
* feat(cache): classify and warm static Route Handlers

* fix(cache): identify Route Handler probe responses

* test(cache): assert Route Handler probe identity

* fix(cache): prove final Route Handler responses

* fix(cache): admit explicit Route Handler policies safely

* fix(cache): close Route Handler admission fallbacks

* fix(cache): honor explicit dynamic handler policies

* fix(cache): reject unsafe Route Handler probe responses

* fix(cache): preserve Route Handler CDN policy ownership
2026-09-01 21:25:26 +01:00
James Anderson 09969d951a feat(cache): probe Pages Router cacheability (#3098)
* feat(cache): probe Pages Router cacheability

* test(cache): prove Pages prewarm reuse

* fix(cache): fail closed for Pages request variants

* test(cache): assert Pages response finalization

* fix(cache): transfer hybrid Pages admission ownership

* fix(cloudflare): warm Pages Router data routes

* fix(cache): align Pages cacheability ownership

* test(cache): preserve Pages ownership order

* fix(cache): enforce Pages response admission without manifest

* fix(cache): align Pages request-time cache policy

* test(cache): expect completed Pages request-time probes

* fix(cache): preserve routing vetoes during probing

* fix(cache): preserve final routing cache policy

* fix(cache): retain middleware cache policy precedence
2026-09-01 21:25:25 +01:00
James Anderson c2377c6b23 feat(cache): deploy probed manifests in two stages (#3093)
* feat(cache): deploy probed manifests in two stages

* fix(cache): isolate App Page cacheability probes

* fix(cache): preserve hybrid route ownership in probes

* fix(cache): isolate staged probe retries

* fix(cache): fail closed for unprobed request identities

* fix(cache): bound and filter staged cacheability manifests

* fix(cloudflare): validate cacheability manifest imports

* fix(cloudflare): bound staged cacheability probes

* fix(cloudflare): isolate cacheability probe budgets

* fix(cloudflare): bound staged probe envelopes

* test(cache): import manifest limit from owner

* fix(cloudflare): fail closed during staged warming

* fix(cloudflare): guard final staged traffic

* fix(cloudflare): deploy empty cacheability manifests

* fix(cloudflare): reconcile staged deployment failures
2026-09-01 21:25:24 +01:00
James Anderson 56b6be06d6 fix(cloudflare): discover prewarm paths from staged worker (#3090)
* fix(cloudflare): discover prewarm paths from staged worker

* fix(cloudflare): hide prerender capability from user code

* perf(cloudflare): skip discovery URL parsing on ordinary requests

* fix(cloudflare): bound staged discovery phases

* perf(pages): lazy-load staged discovery runtime

* fix(cloudflare): use the full staged discovery deadline

* fix(cloudflare): distinguish staged discovery failures

* test(cloudflare): preserve deadline-bounded discovery

* test(cloudflare): avoid wall-clock retry count

* test(cloudflare): stabilize discovery deadline coverage
2026-09-01 21:25:22 +01:00
James Anderson 8759b65c86 fix(build): validate CDN warm discovery and deploy inputs (#3057)
* fix(build): validate CDN warm path params

* fix(build): exclude handlers from CDN warm paths

* fix(build): resolve all CDN warm path owners

* fix(build): preserve exact CDN warm path identity

* fix(build): preserve encoded Pages warm paths

* test(cloudflare): preserve encoded warm request URLs

* fix(build): reject unsafe Pages warm paths

* fix(router): match localized warm paths case-insensitively

* fix(cache): honor build identity adapter capability

* fix(build): reject normalized CDN warm paths

* fix(build): discover dynamic MDX warm paths

* fix(build): skip routes without static param generators

* fix(cloudflare): validate warmup promotion delay
2026-08-24 23:03:15 +01:00
James Anderson e2e2b177eb fix(cloudflare): complete warmup response and promotion contracts (#3046)
* test(cloudflare): prove deployed Pages CDN warmup

* fix(cloudflare): reject incomplete no-promote warmup

* fix(cloudflare): keep warm discovery fail-closed

* test(cloudflare): prove prewarmed App HTML reuse

* fix(cloudflare): enforce no-promote warmup contract

* fix(cloudflare): warm terminal ISR responses
2026-08-24 23:03:14 +01:00
James Anderson f1efcc1e60 fix(cloudflare): harden canonical RSC warmup end to end (#3040)
* fix(cloudflare): validate reusable warm responses

* fix(cloudflare): retry staged warmup failures safely

* fix(cloudflare): extend staged propagation retries

* fix(build): filter Pages-owned RSC warm paths

* fix(cloudflare): keep CDN warmup correct with custom adapters and i18n

* fix(cloudflare): reject unusable CDN warm responses

* fix(cloudflare): keep CDN warmup bound to the deployed build

* fix(router): reuse warmed RSC on locale-prefixed hybrid routes

* fix(cloudflare): verify exact build and variant during CDN warmup

* fix(router): keep warmed RSC ownership rewrite-safe

* test(cloudflare): prove browser reuse of warmed RSC variants

* test(cloudflare): bind RSC warm proof to each deploy attempt

* fix(rsc): keep deferred loading shells contextual

* fix(build): keep CDN warm discovery route-correct

* fix(cache): preserve valid CDN policy during RSC warmup

* fix(cloudflare): warm the deployed Worker route host

* fix(cloudflare): preserve staged warmup guarantees

* fix(build): discover localized Pages warmup paths

* fix(cloudflare): wait for staged Worker before CDN warmup

* fix(cloudflare): preserve strict warmup deploy invariants

* fix(build): fail closed during CDN warm discovery
2026-08-24 23:03:14 +01:00
James Anderson 8bb09481d6 feat(cloudflare): prewarm canonical ISR RSC requests (#3002)
* feat(cloudflare): prewarm canonical ISR RSC requests

* fix(cloudflare): forward preview deploy options

* fix(cloudflare): harden canonical RSC prewarming

* fix(test): wait for preview alias propagation

* fix(cloudflare): guarantee exact RSC prewarm reuse

* fix(cloudflare): harden canonical RSC prewarming

* fix(cloudflare): preserve definitive RSC warm identity

* fix(cloudflare): warm immutable worker versions

* test(form): expect Next-compatible absolute navigation

* fix(cloudflare): harden RSC prewarm deployment

* test(cloudflare): stabilize deployed RSC proof

* test(cloudflare): await RSC prefetch completion

* test(cloudflare): isolate RSC readiness probes

* fix(cloudflare): warm RSC through version overrides

* fix(cloudflare): parse labeled Worker version IDs

* fix(cloudflare): warm document requests as HTML

* fix(cloudflare): retry staged version propagation

* test(cloudflare): seed prewarm proof with prior Worker

* fix(cloudflare): await version override propagation

* fix(cloudflare): serialize staged cache warming

* fix(cloudflare): verify warmed RSC build identity

* fix(cloudflare): harden staged RSC cache warming

* fix(cache): keep RSC prewarm identity build-scoped

* fix(cloudflare): gate warmup on uploaded build

* fix(cache): certify canonical RSC warmup responses

* fix(cache): harden canonical RSC warmup propagation

* fix(cache): close RSC warmup review gaps

* fix(cache): preserve explicit response cache policies

* feat(cloudflare): prewarm canonical RSC variants without prerendering

* fix(cloudflare): forward deploy config from CLI

* fix(cache): close RSC prewarm reuse gaps

* fix(cloudflare): parse labeled Worker version IDs

* fix(router): preserve canonical prefetch invalidation

* test(cloudflare): align RSC seed Worker bindings

* fix(cloudflare): scope warmup deadlines per request

* test(cloudflare): avoid caching stale warmup seed

* fix(cloudflare): fail permanent warmup errors promptly

* fix(router): keep contextual RSC requests hashed

* test(cloudflare): await promoted warmup Worker

* test(cloudflare): retry browser warmup source

* revert: restore focused warmup deadline fix

* fix(cloudflare): remove warmup propagation deadline

* fix(cloudflare): allow slower warmup responses

* fix(cloudflare): confirm warmed cache hits

* fix(cloudflare): confirm cache hits without backoff

* fix(cloudflare): avoid duplicate cache warm requests

* test(cloudflare): allow prewarm propagation

* test(cloudflare): isolate loading prewarm propagation

* test(cloudflare): await promoted prewarm worker

* fix(cloudflare): wait for warm cache propagation before promotion

* test(cloudflare): allow promoted warm cache to settle

* test(cloudflare): wait after promoted build is reachable

* test(cloudflare): poll deployed version before warm cache checks

* test(cloudflare): trace warm cache identity

* test(cloudflare): trace prewarm verification location

* test(cloudflare): compare warm cache clients

* test(cloudflare): trace bypassed response identity

* fix(cloudflare): serialize warm cache variants

* test(cloudflare): report prewarm cache miss context

* test(cloudflare): await target RSC deployment readiness

* test(cloudflare): await stable worker promotion

* test(cloudflare): isolate RSC prewarm target

* fix(cloudflare): defer CDN warmup retries

* fix(cloudflare): verify warmed RSC variants

* test(cloudflare): trace RSC warm cache paths

* fix(cloudflare): separate loading-shell warm cache key

* test(cloudflare): make RSC warm reuse proof deterministic

* test(cloudflare): tolerate stale promoted Worker routing

* fix(rsc): enforce definitive loading-shell cache key
2026-08-24 23:03:12 +01:00
Jerry Zhao 1860632d87 refactor: migrate path handling from node:path to pathslash (#2502)
* refactor: migrate the CLI cluster path handling to pathslash

* refactor(routing): migrate the routing cluster path handling to pathslash

* refactor(plugins): migrate the plugins cluster path handling to pathslash

* refactor(server): migrate the server cluster path handling to pathslash

* refactor(build): migrate the build cluster path handling to pathslash

* refactor(core): migrate entries, config, and shared utils to pathslash

* refactor(plugin): migrate index.ts path handling to pathslash

* refactor: finish the pathslash migration — test sweep, stragglers, lint guard

* refactor: address final-review findings on the pathslash migration

* docs(agents): document the pathslash path-handling convention

* fix(build): emit inlined dependencies outside dist/node_modules

* fix: normalize wire- and bundler-shaped ids unconditionally

* docs(agents): document the unconditional-normalization exception

* fix: gate Windows-shaped path fixtures to Windows

* docs(agents): gate Windows-shaped fixtures with runIf

* refactor: migrate upstream prerender path discovery to pathslash

* fix(create-vinext-app): bundle pathslash into the scaffolder dist

---------

Co-authored-by: James <james@eli.cx>
2026-07-06 23:49:04 +01:00
James Anderson 753c229ef8 fix(build): honor inline next config for static export (#2543)
* fix(build): honor inline next config for static export

* fix(build): reuse resolved config during prerender

* fix(config): resolve promised plugin metadata

* refactor(config): share plugin option flattening

* test(deploy): codify eager config loading

* refactor(deploy): use resolved cache metadata

* refactor(config): remove unused inline loader

* test(config): preserve internal metadata loaders

* refactor(build): keep hybrid plugin extraction unchanged

* refactor(prerender): use resolved next config
2026-07-06 23:15:29 +01:00
James Anderson eba70463d4 feat(cloudflare): warm prerendered paths before deploy (#2481)
* feat(cloudflare): warm prerendered paths before deploy

* fix(cloudflare): warm production CDN for uploaded versions

* fix(cloudflare): resolve Worker names for CDN warmup

* fix(cloudflare): harden CDN warmup diagnostics

* fix(cloudflare): harden CDN warmup deploy flow

* fix(cloudflare): clarify CDN warmup trigger failures

* feat(cloudflare): warm cdn from build path manifest

* fix(cloudflare): emit warm paths for skip-build deploys

* fix(cloudflare): avoid stale skip-build path manifests

* test(cloudflare): lock skip-build prerender manifest gate

* fix(cloudflare): warm fallback deploy URL from triggers

* fix(cloudflare): clarify CDN warmup deploy logs

* feat(init): offer CDN warmup deploy script

* update wrangler configs

* fix(init): default CDN warmup to yes

* fix(cloudflare): explain first warm deploy failure

* fix(cloudflare): keep deploy errors concise

* fix(init): make generated home page cacheable
2026-07-04 16:09:55 +00:00