Skip to content

App Router/Pages Router: unstable_catchError / unstable_retry boundary not implemented #1448

Description

@james-elicx

This issue was created by an agent analysing CI failures from the Next.js Deploy Suite (vinext main vs Next.js v16.2.6, 2026-05-22).

Problem

The experimental unstable_catchError boundary and unstable_retry API from Next.js are not wired up in vinext. Tests time out waiting for #error-boundary-message/#pages-error-message to become visible because either the boundary does not catch the suspended error or unstable_retry does not re-render the subtree after the user requests a reset. Affects App Router (with and without React Compiler) and the Pages Router equivalent.

waiting for locator('#error-boundary-message') to be visible
waiting for locator('#pages-error-message') to be visible

Estimated Impact

~6 test failures across the deploy suite.

Affected Test Suites

  • test/e2e/app-dir/catch-error/catch-error-react-compiler.test.ts (3 failures)
  • test/e2e/app-dir/catch-error/catch-error.test.ts (3 failures)

Recommendation

  1. Reproduce first in vinext's own test suite. Add a test with a unstable_catchError boundary around a server component that throws, plus a button that calls unstable_retry. Confirm the boundary text appears and the retry re-runs the subtree.

  2. Study the Next.js implementation. Search .nextjs-ref/packages/next/src/client/components/ for unstable_catchError/unstable_retry to understand the boundary semantics and the retry API contract.

  3. Implement the boundary in App Router and Pages Router. Wire up the boundary component that catches suspended errors and exposes a retry() callback that re-renders the contained subtree.

  4. Mirror behaviour in both routers. The Pages Router variant uses #pages-error-message; the App Router variant uses #error-boundary-message. Both should be covered by the same primitive.


Part of #1328.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions