Files
Wyatt JohnsonandGitHub 291aefd985 Fix 404 responses for interception routes with missing children slots (#85779)
### What?

Introduces a null-rendering default component for interception routes to
prevent 404 responses when children slots are missing.

### Why?

When rendering interception routes like `(.)[id]`, there's a segment
mismatch where the interception route lacks a children slot that the
base `[id]` route has.

**The Bug:**
Previously, the framework injected a 404 page into the missing default
slot for the children route. On platforms like Vercel, this caused full
404 RSC responses because the HTTP status code has semantic meaning for
route behavior when using cache components. This resulted in the
"unknown segment value fallback page" issue.

**Impact:**
- RSC requests for interception routes would return 404 status codes
- Platform routing behavior was incorrectly triggered by these 404
responses
- Only affects pages rendering with cache components

### How?

- Created new `default-null.tsx` builtin component that renders `null`
- Updated Rust code (`app_structure.rs`) to detect interception routes
and use the null default
- Updated webpack loader (`next-app-loader/index.ts`) to check
`isInterceptionRouteAppPath()` and inject the null default
- Removed test-specific default component that was working around this
bug
- The old `page.tsx` is still used during client navigation, so there's
no visible change to users

This ensures minimal RSC payload changes and prevents 404 status codes
while maintaining existing client-side behavior.

NAR-483
2025-11-12 18:57:32 -07:00

19 lines
689 B
TypeScript

/**
* TEST CASE 5: Regular route (NO interception) WITH parallel routes but NO page.tsx
*
* Expected: REQUIRES default.tsx at regular-route level OR will 404
* Reason: This is NOT an interception route, so missing children should 404
* Currently uses PARALLEL_ROUTE_DEFAULT_PATH (calls notFound())
* This is the CORRECT behavior for non-interception routes
*/
export default function Page() {
return (
<div>
<h3>❌ TEST CASE 5: Regular route without default.tsx</h3>
<p>This is deeper/page.tsx</p>
<p>Parent has @sidebar but no page.tsx or default.tsx</p>
<p>Should 404 when navigating directly to /regular-route!</p>
</div>
)
}