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
- 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).
- 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).
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)PERRY_STUCK_DUMP=1, toolkit on branchfix/async-step-per-activation-identity-5941): zero live async-step machines during the hang. Nothing is parked. Every machine's result settles./_document+/_appPageNotFoundErrorrejections propagate and are caught (expected — same probes exist in node; this app has no pages router)./tmp/perry-arm-throwright before the curl): exactly two throws, both expected and caught-in-node:ENOENT ... .next/server/subresource-integrity-manifest.jsonENOENT ... .next/dynamic-css-manifestNeither file exists in the build (optional manifests); node throws + catches the same loads and renders fine.
000after any timeout).What this is NOT
makeHangingPromise/abort-chain parking (no pending promises remain at all).Hypotheses for whoever picks this up
renderErrorToResponse→ pages-router/_documentfallback → 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 knownFailed to install Date class extension+cacheComponentsdynamic-detection interaction is a candidate — boot prints that warning under Perry only).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; compileserver.jswith PR #5988's branch, boot with thePERRY_ALLOW_*trio,curl /plain. Diagnostic toolkit + armed throw/rejection loggers on branchfix/async-step-per-activation-identity-5941.References
#5941 (the eliminated deadlock class), PR #5988, #5932, #5437 (tracking).