Skip to content

nextjs: dynamic RSC render evaporates silently with a clean async graph after expected manifest ENOENTs (post-#5988 wall for 8/8) #5989

Description

@proggeramlug

Summary

Follow-up to #5941 / PR #5988. With the #5941 async-step deadlock class eliminated (no parked machines, all promises settle, rejections propagate), the 3 request-time dynamic RSC routes (/posts/[id], /fetcher, /plain) still return 0 bytes — but the failure mode is now completely different: the render evaporates silently with a clean async graph. This is the remaining blocker for 8/8 on the Next.js 16 App Router standalone matrix.

Ground truth (measured on PR #5988's branch, /plain)

  • Stuck-machine dump (PERRY_STUCK_DUMP=1, toolkit on branch fix/async-step-per-activation-identity-5941): zero live async-step machines during the hang. Nothing is parked. Every machine's result settles.
  • Request-window rejection log: the boot-time /_document + /_app PageNotFoundError rejections propagate and are caught (expected — same probes exist in node; this app has no pages router).
  • Request-window sync-throw log (armed via /tmp/perry-arm-throw right before the curl): exactly two throws, both expected and caught-in-node:
    • ENOENT ... .next/server/subresource-integrity-manifest.json
    • ENOENT ... .next/dynamic-css-manifest
      Neither file exists in the build (optional manifests); node throws + catches the same loads and renders fine.
  • After those two throws: nothing. No further throws, no rejections, no machines, no timers, no response write. The HTTP request never completes (curl 000 after any timeout).

What this is NOT

Hypotheses for whoever picks this up

  1. The render errors out synchronously somewhere after the manifest loads and Next's error-recovery path (renderErrorToResponse → pages-router /_document fallback → also missing) gives up without writing a response — check whether node writes a 500 there vs Perry writing nothing, and what the primary render error is (the known Failed to install Date class extension + cacheComponents dynamic-detection interaction is a candidate — boot prints that warning under Perry only).
  2. A response/stream plumbing divergence: the App Router render may complete but pipeToNodeResponse/flush never runs. Instrument the res.write/end path in perry-ext-http next.

Repro

Standalone Next.js 16 App Router build at /tmp/nx-mine2 (internal box), oracle /tmp/nx-oracle3; compile server.js with PR #5988's branch, boot with the PERRY_ALLOW_* trio, curl /plain. Diagnostic toolkit + armed throw/rejection loggers on branch fix/async-step-per-activation-identity-5941.

References

#5941 (the eliminated deadlock class), PR #5988, #5932, #5437 (tracking).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions