Route inventory
Every probe, its expected pool, and the invariant it protects.
Filter by route family, protocol or surface. Pages open in place; endpoints open in the inspector, where a request can be sent without leaving the console.
Adapter route pools
- web
app-router-pages - App Router pages plus /api/metrics/web. Scales 2–8 on 65% CPU.
- api
app-route-handlers - App Router route handlers. Scales 2–6 on 65% CPU.
- legacy
pages-router - Pages Router pages and Pages API, including the Edge handler. Scales 1–4 on 70% CPU.
- heavy
cpu-and-streaming - CPU-isolated lane for /api/heavy and /api/metrics/heavy. Scales 1–3 on 60% CPU.
The control deployment answers every route from one monolith pool, so a pool badge describes the adapter expectation across all 10 families.
58 of 58 probes
App Router rendering
Server Components, HTML streaming and request-time rendering inside the web pool.
- P05Streaming + Suspense
/en/lab/streamingThree Suspense chunks resolving at 150 ms, 700 ms and 1600 ms.
ExpectedEnvoy and Cloudflare forward each reveal without coalescing the response.
- P27MDX compilation
/en/lab/mdxAn .mdx route compiled by @next/mdx under the internationalised App Router.
ExpectedLoader resolution and traced assets survive both the control and adapter image builds.
RSC navigation
Prefetching, persistent layouts, parallel and intercepting routes, instant transitions.
- P07Instant navigation
/en/lab/dynamicRequest-time cookies, headers and a configurable artificial delay behind a loading boundary.
ExpectedThe shared layout stays mounted and interactive while the payload arrives.
- P13Parallel routes
/en/lab/parallelA cached `@activity` slot and a dynamic `@inspector` slot resolved independently.
ExpectedBoth slots render from one URL without one blocking the other.
- P14Intercepting routes
/en/lab/photosClient navigation opens a modal; a direct request renders the full page.
ExpectedThe interception only applies to the client transition, not to a cold request.
Cache Components / ISR
PPR, `use cache` profiles, remote cache coherence and tag invalidation across replicas.
- P01Cache Components + PPR
/en/lab/cacheShared `use cache` clock, `use cache: remote` Prisma read and a `use cache: private` cookie read.
ExpectedOne mutation invalidates every replica; the cache nonce is identical whichever pod answers.
- P02Partial-prefetch ISR
/en/lab/catalogOne prerendered slug and two unlisted parameters resolved below the App Shell boundary.
ExpectedPrefetching an unknown slug warms the shared cache without blocking the shell.
Reads a `use cache: remote` article; PUT upserts it and invalidates three tags.
ExpectedConcurrent reads after a write return exactly one title and one version.
- P24Prerendered catalog entry
/en/lab/catalog/prerenderedThe one slug returned by generateStaticParams.
ExpectedServed from the build output without a request-time render.
- P25Unlisted catalog parameter
/en/lab/catalog/on-demandA fallback parameter resolved below the App Shell boundary.
ExpectedThe shell streams first, then the entry, and the result is written to the shared cache.
GET returns the tagged clock for a scope; POST revalidates a tag or path.
ExpectedRepeated GETs across pods return one nonce until a POST invalidates the tag.
Data & mutations
Prisma/PostgreSQL, Redis, Server Actions, forms and Draft Mode.
- P03Prisma 7 + PostgreSQL
/en/lab/dataDriver-adapter counts and the ten most recent probe writes, rendered at request time.
ExpectedEvery pod reaches the same database with a healthy connection pool.
Scoped counter incremented on every read, deletable per scope.
ExpectedTwo consecutive reads increment by one regardless of which pod answered.
- P08Server Actions
/en/lab/actionsEncrypted action IDs, a progressively enhanced form and tag expiry after the write.
ExpectedAn action submitted to one replica stays decryptable and revalidates every other replica.
- P12Draft Mode
/en/lab/draftPreview cookie state plus enable and disable links.
ExpectedThe Secure preview cookie survives the proxy and the redirect back into the app.
GET returns row counts; POST records a probe run with runtime identity.
ExpectedWrites from any pod are visible to every other pod.
Enables or disables the preview cookie, then redirects into the draft page.
ExpectedThe forwarded host and protocol are honoured so the redirect stays on the same origin.
Route handlers
App Router `route.ts` methods, bodies, uploads and lifecycle work.
POST schedules post-response work; GET polls the resulting token.
ExpectedWork scheduled with `after()` completes even though the response already finished.
Echoes the method, repeated query parameters and body shape.
ExpectedEvery method reaches the handler with its verb, headers and repeated params intact.
A route handler that throws deliberately.
ExpectedReturns 500 without leaking a stack trace, and the pod stays healthy.
Accepts a multipart body and validates size and media type.
ExpectedByte counts match the upload and a disallowed media type returns 415.
Realtime & streaming
SSE, byte-observable streams, cancellation and signed webhook delivery.
Subscribes to a Redis channel and relays published events to an already-open response.
ExpectedA POST from any pod reaches a stream held open by a different pod.
HMAC-verified raw body with a shared idempotency key.
ExpectedBytes survive the proxy unchanged and a replayed delivery is recognised by any pod.
Emits a tick event on an interval until the duration elapses or the client aborts.
ExpectedTicks arrive individually and an aborted request releases its slot immediately.
Images, metadata & assets
next/image optimisation, generated metadata, icons, OG images and static files.
- P15Metadata + OG
/en/lab/metadataDynamic head output with canonical alternates for both locales.
ExpectedGenerated metadata matches on both deployments, including language alternates.
- P17Image optimizer
/en/lab/imagesA local SVG, a generated raster route and a remote pattern, all through next/image.
ExpectedFormats, ETags and cache headers match; unlisted remote hosts are rejected.
The PNG that the optimizer probe consumes.
ExpectedAvailable to the optimizer regardless of which pool holds it.
The topology diagram served from /public.
ExpectedCache-Control includes max-age=3600 on both deployments.
The file-convention Open Graph image.
ExpectedReturns image/png from the build output.
The file-convention app icon.
ExpectedReturns image/png and is excluded from the proxy matcher.
Generated from the sitemap file convention.
Expectedapplication/xml with both locales listed.
Generated from the robots file convention.
Expectedtext/plain from the build output.
Generated from the manifest file convention.
Expectedapplication/manifest+json from the build output.
Proxy & routing rules
proxy.ts, rewrites, redirects, header matching, auth and error boundaries.
The target of the `Accept: text/markdown` rewrite on /:locale/lab.
ExpectedHeader matching happens before the request reaches a route pool, and `Vary: Accept` is set.
- P28Romanian locale tree
/ro/labThe same inventory served through the `ro` locale prefix.
Expectedproxy.ts rewrites the locale before the cached application path.
- P29Session creation
/en/lab/authA Server Action that sets an HTTP-only cookie and redirects.
ExpectedThe Set-Cookie survives the proxy and the redirect target is preserved.
- P30Proxy-guarded route
/en/lab/protectedRedirects to the auth route unless a lab-session cookie is present.
Expectedproxy.ts runs before the cached application path on every deployment shape.
- P31Error boundaries
/en/lab/errorsTriggers the segment error boundary, forbidden() and unauthorized().
ExpectedEach boundary renders its own output and the digest is stable across pods.
Reports the routing headers the handler actually received.
ExpectedA public `next-resume` header is stripped to null before Next.js sees it.
A beforeFiles rewrite that keeps the /status URL.
ExpectedThe rewrite resolves without a client-visible redirect.
A rewrite that crosses from an App Router URL into a Pages API handler.
ExpectedRouting metadata sends the rewritten path to the Pages Router pool.
An afterFiles rewrite that injects `item=one&item=two`.
ExpectedBoth values of the repeated parameter reach the handler.
A non-permanent redirect to the default locale.
Expected307, not 308, and the locale prefix is applied.
A permanent redirect to the health probe.
Expected308 with the Location header intact through Envoy.
Pages Router
getStaticProps/getServerSideProps, Pages API and the Edge runtime handler.
- P18Pages Router ISR
/legacy/isr/shared-cachegetStaticProps with `fallback: 'blocking'` and a 15 second revalidate.
ExpectedThe regenerated page is shared, not regenerated once per replica.
- P19Pages Router SSR
/legacy/ssrgetServerSideProps echoing pod, pool, query and user agent.
ExpectedPages Router traffic lands in the legacy pool, never in the App Router pools.
A Pages API handler declaring `runtime: 'edge'`.
ExpectedReports `runtime: "edge"` while still being served by the Pages Router pool.
- P50Pages Router index
/legacygetStaticProps with a 30 second revalidate.
ExpectedRegenerates once for the whole pool, not once per replica.
Echoes router, method, query, pool and pod.
ExpectedReports the legacy pool, proving Pages API is routed separately.
Runtime & operations
Health probes, Prometheus metrics, pool-isolated load and runtime identity.
- P22Pool-isolated load
/en/lab/loadSHA-256 iterations executed inside the App Router page pool.
ExpectedRender CPU pressure scales the web pool without touching the API pool.
Process and request metrics for the pod that answered.
ExpectedEach pool exposes its own series so scaling behaviour is attributable.
Synthetic CPU work executed by the Pages Router pool.
ExpectedLoad here scales the legacy pool alone.
Synthetic CPU work routed to the dedicated heavy pool.
ExpectedOnly the heavy pool's HPA responds; web and api stay flat.
Synthetic CPU work executed inside the route-handler pool.
ExpectedLoad here scales the api pool without disturbing page rendering.
`?mode=liveness` checks the process; the default readiness mode checks Postgres and Redis.
ExpectedLiveness never depends on shared services; readiness does.
Prometheus exposition pinned to the web pool.
ExpectedAnswered by an App Router page pod, not a route-handler pod.
Prometheus exposition pinned to the heavy pool.
ExpectedAnswered by a heavy pod, confirming the CPU lane is reachable.
Prometheus exposition served by the Pages API handler.
ExpectedAnswered by a legacy pod so all four pools are observable.