Skip to content

Turbopack: don't crash the dev server when node_modules/next is briefly unresolvable#93877

Open
lukesandberg wants to merge 3 commits into
canaryfrom
next_js_package_not_found_is_catastrophic
Open

Turbopack: don't crash the dev server when node_modules/next is briefly unresolvable#93877
lukesandberg wants to merge 3 commits into
canaryfrom
next_js_package_not_found_is_catastrophic

Conversation

@lukesandberg
Copy link
Copy Markdown
Contributor

@lukesandberg lukesandberg commented May 15, 2026

What?

When node_modules/next is briefly unresolvable mid-session (for example because pnpm is mid-install of a package with a next peer dependency, reshuffling its symlinks) Turbopack would:

  • Emit a MissingNextFolderIssue with severity Fatal
  • Propagate anyhow!("Next.js package not found") through ~10 levels of the build graph
  • Surface the failure at the napi boundary as a TurbopackInternalError, which the Next.js JS-side treats as fatal and shuts the dev server down

The reported user impact was a dev session that became wedged and could not recover even after restarting next dev, because the persistent cache had stored the failed operation state. Users reported it as "stuck", "catastrophic", and required wiping .next/ to recover.

Unfortunately while i was able to reproduce a number of bad outcomes, i couldn't actually reproduce the issue of next dev getting stuck in a bad state. Still this PR will improve a number of apis and error messages

See internal discussion: https://vercel.slack.com/archives/C046HAU4H7F/p1778792876550309

Why?

A transient filesystem race during an install is the canonical recoverable error — once the install finishes, next is resolvable again. There is no reason this should bring down the dev server or poison the persistent cache.

The bug had two contributing causes:

  1. The error message was poor. It assumed the only cause was a mis-set turbopack.root, with the entire message in title(). It didn't acknowledge the install-race case or any of the other realistic causes (broken symlink, monorepo hoisting, removed node_modules/next, global install). Users had no way to know that the right response was to wait or refresh.

  2. The Rust→napi boundary did not treat this as a recoverable error. Two specific code paths propagated Err instead of catching it:

    • issue_filter_from_endpoint in endpoint.rs calls endpoint_op.connect().await? — if the upstream endpoint resolution errors (as it does when directory_tree_to_loader_tree fails), this ? propagates before the surrounding strongly_consistent_catch_collectables gets a chance to convert the failure into Issues.
    • Project::hmr_version_state is called bare from project_hmr_events at the napi boundary. There is no _with_issues_operation wrapper, so any error from the underlying hmr_content/versioned_content_map.compute_entry chain propagates straight to JS.

How?

Three changes:

1. Rewrite MissingNextFolderIssue (next_import_map.rs)

  • Severity downgraded from Fatal to Error. Fatal triggers an explicit JS-side server shutdown in print-build-errors.ts; Error lets the dev server recover.
  • Title is a single line: "Could not find the Next.js package (next/package.json)".
  • Description lists all realistic causes (concurrent install, missing/broken symlink, mis-set workspace root, monorepo hoisting, global install).
  • Doc link moved to documentation_link() so it doesn't pollute the inline message.

2. Make issue_filter_from_endpoint Err-tolerant (endpoint.rs)

  • Wrap the endpoint_op.connect().await in a match and fall back to IssueFilter::warnings_and_foreign_errors() on Err.
  • This unblocks the existing strongly_consistent_catch_collectables recovery path, which then absorbs the upstream failure as Issues that surface through the napi boundary normally.

3. Add hmr_version_state_with_issues_operation (project.rs)

  • Mirrors the existing hmr_update_with_issues_operation pattern.
  • Drives hmr_version_operation as an OperationVc, catches any Err and falls back to NotFoundVersion, and collects issues from the operation via peek_issues.
  • The napi project_hmr_events handler now uses this wrapper instead of calling Project::hmr_version_state bare. Issues from both hmr_version_state and hmr_update are merged before being sent to JS.
  • Required lifting the inner hmr_version_operation out of Project::hmr_version_state's closure to make it callable from the napi layer.

A new regression test at test/development/app-dir/concurrent-install/ reproduces the failure by moving node_modules/next aside mid-HMR-session and asserts that the dev server does not emit FATAL: An unexpected Turbopack error occurred or TurbopackInternalError, and that the friendly Issue text surfaces. The test is skipped under NEXT_SKIP_ISOLATE=1 since that mode doesn't produce a manipulable node_modules.

Out of scope: after recovery, the dev server still returns 500 on subsequent requests until the user manually refreshes (the JS-side per-route error state isn't invalidated by Turbopack's successful recompile). That's a separate dev-server caching issue.

Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@lukesandberg lukesandberg changed the title improve resiliance Turbopack: don't crash the dev server when node_modules/next is briefly unresolvable May 15, 2026
Comment thread crates/next-api/src/project.rs
Comment thread crates/next-core/src/next_import_map.rs
Comment thread crates/next-core/src/next_import_map.rs
Comment thread crates/next-napi-bindings/src/next_api/endpoint.rs Outdated
Comment thread test/development/app-dir/concurrent-install/concurrent-install.test.ts Outdated
@lukesandberg lukesandberg force-pushed the next_js_package_not_found_is_catastrophic branch from d067f28 to e2a194f Compare May 15, 2026 22:10
@github-actions
Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 811ms 810ms ▂▅▄██
Cold (Ready in log) 793ms 794ms ▅▁▅▇▄
Cold (First Request) 1.226s 1.232s ▄▁▄█▅
Warm (Listen) 810ms 810ms ▁▆▁█▆
Warm (Ready in log) 792ms 791ms ▇▁██▄
Warm (First Request) 613ms 616ms ▆▁██▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 811ms 810ms ▁▇▇▇▅
Cold (Ready in log) 784ms 782ms ▄▅▇█▄
Cold (First Request) 3.149s 3.106s ▄▄▆█▃
Warm (Listen) 810ms 810ms ▁▅▅▅▅
Warm (Ready in log) 782ms 784ms ▄▅▅█▄
Warm (First Request) 3.137s 3.159s ▆▄▄█▄

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 4.774s 4.739s ▄▁▃█▃
Cached Build 4.765s 4.773s ▄▁▆█▄
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 23.641s 23.796s ▁▂█▅█
Cached Build 23.606s 23.596s ▃▄█▇▂
node_modules Size 506 MB 506 MB ▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
04hm05ar7kldw.js gzip 5.73 kB N/A -
0bonocw_gqjqz.js gzip 156 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0dvitrl5zg37g.js gzip 8.82 kB N/A -
0ge802sebgoxs.js gzip 154 B N/A -
0rrx2nt9ziwqd.js gzip 153 B N/A -
0sf7ysou-72zd.js gzip 8.71 kB N/A -
0ut-_tdusoc4k.js gzip 65.6 kB N/A -
0wj045gch1h53.js gzip 158 B N/A -
157abun3hwc_s.js gzip 10.3 kB N/A -
17hnwtgojusdj.js gzip 155 B N/A -
1d2gtywb-5p_7.js gzip 156 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1evlt1ko-tqhp.js gzip 155 B N/A -
1jj68jv9537mc.js gzip 13.8 kB N/A -
1jpaub6y8xlfr.js gzip 2.3 kB N/A -
1ot0mvscrc_uf.js gzip 233 B N/A -
1usbsn3vadnmw.js gzip 152 B N/A -
2_m3xv2uq3sjc.js gzip 1.46 kB N/A -
24y34mwgrkqp4.js gzip 8.78 kB N/A -
27eg7sxq5mk_q.js gzip 156 B N/A -
284i3wear-lyg.js gzip 155 B N/A -
2c-fd4y1zozz8.js gzip 8.79 kB N/A -
2d7416h_xd36x.js gzip 8.71 kB N/A -
2g21ny1t2kw37.js gzip 7.61 kB N/A -
2i8sn3m1qpu4_.js gzip 154 B N/A -
2iqdnxyc5-kp0.js gzip 70.9 kB N/A -
2liogep5ypr09.js gzip 160 B N/A -
2lyuhit6rn8fy.js gzip 9.44 kB N/A -
2p2xgspe77mv3.js gzip 50.2 kB N/A -
2q0gr8wfr3jwl.js gzip 8.77 kB N/A -
2t9e75oz6r0zp.js gzip 8.76 kB N/A -
2uku_olcn15b7.js gzip 8.79 kB N/A -
30r8mm-46bdqy.js gzip 220 B 220 B
38oxsi-2338b1.js gzip 168 B N/A -
3c1jdxkzlb8oq.js gzip 12.9 kB N/A -
3inab2jybr4k9.js gzip 450 B N/A -
3jkm5tdjvaf_q.js gzip 13.1 kB N/A -
3mt67agm5wp40.js gzip 10.6 kB N/A -
3saabek4kohwi.js gzip 10 kB N/A -
4189xmby9yu1p.js gzip 13.6 kB N/A -
turbopack-1f..2ev9.js gzip 4.2 kB N/A -
turbopack-1p..kv4s.js gzip 4.2 kB N/A -
turbopack-1x..ymh3.js gzip 4.2 kB N/A -
turbopack-20..y4xy.js gzip 4.2 kB N/A -
turbopack-24..8nhk.js gzip 4.2 kB N/A -
turbopack-29..myjv.js gzip 4.19 kB N/A -
turbopack-2i..0h1n.js gzip 4.2 kB N/A -
turbopack-2i..yytq.js gzip 4.2 kB N/A -
turbopack-2n..8q96.js gzip 4.2 kB N/A -
turbopack-2t..bhx8.js gzip 4.21 kB N/A -
turbopack-38..n694.js gzip 4.2 kB N/A -
turbopack-3f..hnl5.js gzip 4.2 kB N/A -
turbopack-3y..8u5u.js gzip 4.18 kB N/A -
turbopack-43..6pwj.js gzip 4.2 kB N/A -
0_i7nqgx23st7.js gzip N/A 10 kB -
06puhytyxk31p.js gzip N/A 8.82 kB -
0bq5-83alcpe4.js gzip N/A 152 B -
0d6qosyqx3umb.js gzip N/A 155 B -
0j42f9zonj0wd.js gzip N/A 13 kB -
0m34gln_kt4fg.js gzip N/A 5.73 kB -
0onx8mzqg8i3u.js gzip N/A 156 B -
1-ewshnd9bzgq.js gzip N/A 50.2 kB -
14kwvdg9vf7nu.js gzip N/A 70.9 kB -
1g3q1ww01thnl.js gzip N/A 2.3 kB -
1hraqxuiymq6v.js gzip N/A 8.79 kB -
1l9un1sl77287.js gzip N/A 1.46 kB -
1lonym6dfvlth.js gzip N/A 155 B -
21-eavqb1k_36.js gzip N/A 13.9 kB -
2147zgtf14z-q.js gzip N/A 234 B -
23bz3xsg-5-1s.js gzip N/A 8.71 kB -
27441mytv7pbm.js gzip N/A 9.43 kB -
28g0r5aod42qc.js gzip N/A 155 B -
2cjkwjgm1zcfs.js gzip N/A 8.71 kB -
2kcuwbgnu4ko6.js gzip N/A 161 B -
2scd8zaoyb8md.js gzip N/A 8.79 kB -
2st_qs6p_9us0.js gzip N/A 13.1 kB -
2zo2exm1d8qj1.js gzip N/A 13.6 kB -
3-_hfgcp96285.js gzip N/A 154 B -
35745aboz61if.js gzip N/A 157 B -
3f710q6kll2xn.js gzip N/A 7.61 kB -
3hn75zuxly9az.js gzip N/A 10.3 kB -
3hqh7m128tvsn.js gzip N/A 8.77 kB -
3hqti_t-zy1x4.js gzip N/A 449 B -
3lh-i1b9s84cd.js gzip N/A 156 B -
3mnawenie1flm.js gzip N/A 8.76 kB -
3sr5ob3duztqs.js gzip N/A 154 B -
3sythmw-4cn1i.js gzip N/A 169 B -
3ubsozlu6zs38.js gzip N/A 10.6 kB -
3wuicn9beco_z.js gzip N/A 65.6 kB -
43b04vw4l4o3u.js gzip N/A 155 B -
43iwfqjnx1cy_.js gzip N/A 8.78 kB -
44uaeayqp3xyx.js gzip N/A 159 B -
turbopack-0o..f8yc.js gzip N/A 4.2 kB -
turbopack-0q..4cfi.js gzip N/A 4.2 kB -
turbopack-0r..nu40.js gzip N/A 4.18 kB -
turbopack-0z..izje.js gzip N/A 4.2 kB -
turbopack-10..6ob-.js gzip N/A 4.2 kB -
turbopack-16..-uwu.js gzip N/A 4.21 kB -
turbopack-1e..-gur.js gzip N/A 4.2 kB -
turbopack-1v..0so-.js gzip N/A 4.2 kB -
turbopack-1w..krei.js gzip N/A 4.2 kB -
turbopack-2c..nu9o.js gzip N/A 4.2 kB -
turbopack-3a..zg-c.js gzip N/A 4.2 kB -
turbopack-3h..b2g6.js gzip N/A 4.2 kB -
turbopack-3w..ij0a.js gzip N/A 4.2 kB -
turbopack-3y..837u.js gzip N/A 4.2 kB -
Total 469 kB 469 kB ⚠️ +80 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 431 B 432 B
Total 431 B 432 B ⚠️ +1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2258-HASH.js gzip 61.4 kB N/A -
2266-HASH.js gzip 4.69 kB N/A -
3317.HASH.js gzip 169 B N/A -
4866-HASH.js gzip 5.64 kB N/A -
9e302639-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.5 kB 59.5 kB
main-app-HASH.js gzip 255 B 253 B
main-HASH.js gzip 39.9 kB 39.9 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
175fd0fd-HASH.js gzip N/A 62.8 kB -
2596-HASH.js gzip N/A 5.63 kB -
34-HASH.js gzip N/A 61.3 kB -
5691.HASH.js gzip N/A 169 B -
9156-HASH.js gzip N/A 4.68 kB -
Total 236 kB 236 kB ✅ -101 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 181 B 182 B
css-HASH.js gzip 334 B 332 B
dynamic-HASH.js gzip 1.79 kB 1.81 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 351 B 348 B
hooks-HASH.js gzip 385 B 384 B
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 257 B 259 B
link-HASH.js gzip 2.51 kB 2.52 kB
routerDirect..HASH.js gzip 318 B 319 B
script-HASH.js gzip 387 B 386 B
withRouter-HASH.js gzip 316 B 316 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.97 kB 7.99 kB ⚠️ +19 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 276 kB 270 kB 🟢 5.29 kB (-2%)
Total 402 kB 396 kB ✅ -5.51 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 620 B 615 B
middleware-r..fest.js gzip 155 B 155 B
middleware.js gzip 44.7 kB 44.7 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 46.3 kB 46.3 kB ⚠️ +47 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 719 B 717 B
Total 719 B 717 B ✅ -2 B
Build Cache
Canary PR Change
0.pack gzip 4.49 MB 4.48 MB
index.pack gzip 115 kB 112 kB 🟢 3.23 kB (-3%)
index.pack.old gzip 116 kB 114 kB 🟢 1.6 kB (-1%)
Total 4.72 MB 4.71 MB ✅ -8.97 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 350 kB 350 kB
app-page-exp..prod.js gzip 195 kB 195 kB
app-page-tur...dev.js gzip 350 kB 350 kB
app-page-tur..prod.js gzip 194 kB 194 kB
app-page-tur...dev.js gzip 346 kB 346 kB
app-page-tur..prod.js gzip 192 kB 192 kB
app-page.run...dev.js gzip 347 kB 347 kB
app-page.run..prod.js gzip 193 kB 193 kB
app-route-ex...dev.js gzip 77.5 kB 77.5 kB
app-route-ex..prod.js gzip 52.9 kB 52.9 kB
app-route-tu...dev.js gzip 77.6 kB 77.6 kB
app-route-tu..prod.js gzip 52.9 kB 52.9 kB
app-route-tu...dev.js gzip 77.2 kB 77.2 kB
app-route-tu..prod.js gzip 52.7 kB 52.7 kB
app-route.ru...dev.js gzip 77.1 kB 77.1 kB
app-route.ru..prod.js gzip 52.7 kB 52.7 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 44.3 kB 44.3 kB
pages-api-tu..prod.js gzip 33.8 kB 33.8 kB
pages-api.ru...dev.js gzip 44.3 kB 44.3 kB
pages-api.ru..prod.js gzip 33.7 kB 33.7 kB
pages-turbo....dev.js gzip 53.7 kB 53.7 kB
pages-turbo...prod.js gzip 39.4 kB 39.4 kB
pages.runtim...dev.js gzip 53.6 kB 53.6 kB
pages.runtim..prod.js gzip 39.4 kB 39.4 kB
server.runti..prod.js gzip 63.1 kB 63.1 kB
use-cache-pr...dev.js gzip 69.7 kB 69.7 kB
use-cache-pr...dev.js gzip 69.7 kB 69.7 kB
use-cache-pr...dev.js gzip 68 kB 68 kB
use-cache-pr...dev.js gzip 68 kB 68 kB
Total 3.37 MB 3.37 MB
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/e2a194f7a0162b4c85d4eea9db5b17fede335dae/next

Commit: e2a194f

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 15, 2026

Failing test suites

Commit: baf65c3 | About building and testing Next.js

pnpm test-dev test/development/app-document-remove-hmr/app-document-remove-hmr.test.ts (job)

  • _app/_document removal HMR > should HMR when _app is removed (DD)
Expand output

● _app/_document removal HMR › should HMR when _app is removed

expect(received).not.toContain(expected) // indexOf

Expected substring: not "custom _app"
Received string:        "<head><meta charset=\"utf-8\" data-next-head=\"\"><meta name=\"viewport\" content=\"width=device-width\" data-next-head=\"\"><noscript data-n-css=\"\"></noscript><script src=\"/_next/static/chunks/11-r_next_dist_compiled_0i5mt3p._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/11-r_next_dist_shared_lib_09iljqf._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/11-r_next_dist_client_1vk7uie._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/11-r_next_dist_1z5_j9e._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/0h_p_react-dom_0e0_bfj._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/node_modules__pnpm_125dyye._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/%5Broot-of-the-server%5D__00my3xu._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/pages__app_0du2_q-._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/turbopack-pages__app_12-lk0z._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/%5Broot-of-the-server%5D__0drlkvz._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/pages_index_0du2_q-._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/turbopack-pages_index_1y8ladq._.js\" defer=\"\"></script><script src=\"/_next/static/development/_buildManifest.js\" defer=\"\"></script><script src=\"/_next/static/development/_ssgManifest.js\" defer=\"\"></script><script src=\"/_next/static/development/_clientMiddlewareManifest.js\" defer=\"\"></script><noscript id=\"__next_css__DO_NOT_USE__\"></noscript><style>@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><body><p>custom _document</p><div id=\"__next\"><p>custom _app</p><p>index page</p></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false,\"scriptLoader\":[]}</script><nextjs-portal style=\"position: absolute; --nextjs-dev-tools-scale: 1;\"></nextjs-portal><next-route-announcer><p aria-live=\"assertive\" id=\"__next-route-announcer__\" role=\"alert\" style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;\"></p></next-route-announcer></body>"

  21 |         const html = await browser.eval('document.documentElement.innerHTML')
  22 |         expect(html).toContain('index page')
> 23 |         expect(html).not.toContain('custom _app')
     |                          ^
  24 |       })
  25 |
  26 |       await next.patchFile(

  at toContain (development/app-document-remove-hmr/app-document-remove-hmr.test.ts:23:26)
  at retry (lib/next-test-utils.ts:867:14)
  at Object.<anonymous> (development/app-document-remove-hmr/app-document-remove-hmr.test.ts:20:7)

pnpm test-dev-turbo test/development/acceptance-app/ReactRefreshLogBox.test.ts (turbopack) (job)

  • ReactRefreshLogBox app > server component can recover from error thrown in the module (DD)
Expand output

● ReactRefreshLogBox app › server component can recover from error thrown in the module

Expected Redbox but found no visible one.

  1553 |       await retry(async () => {
  1554 |         // Should use `await expect(browser).toDisplayRedbox()`
> 1555 |         await session.waitForRedbox()
       |         ^
  1556 |       })
  1557 |
  1558 |       if (isRspack) {

  at development/acceptance-app/ReactRefreshLogBox.test.ts:1555:9
  at retry (lib/next-test-utils.ts:867:14)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:1553:7)

pnpm test-dev-turbo test/development/tsconfig-path-reloading/index.test.ts (turbopack) (job)

  • tsconfig-path-reloading > tsconfig added after starting dev > should recover from module not found when paths is updated (DD)
Expand output

● tsconfig-path-reloading › tsconfig added after starting dev › should recover from module not found when paths is updated

TIMED OUT: success

<head><meta charset="utf-8" data-next-head=""><meta name="viewport" content="width=device-width" data-next-head=""><noscript data-n-css=""></noscript><script src="/_next/static/chunks/11-r_next_dist_compiled_0i5mt3p._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_shared_lib_09iljqf._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_client_1vk7uie._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1cew1wn._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_app_0n-_1dk.js" defer=""></script><script src="/_next/static/chunks/%5Bnext%5D_entry_page-loader_ts_12mh-xx._.js" defer=""></script><script src="/_next/static/chunks/0h_p_react-dom_0e0_bfj._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_118x9j2._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__0l4r13l._.js" defer=""></script><script src="/_next/static/chunks/pages__app_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages__app_0qdv1gk._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1z5_j9e._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_125dyye._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__1gccwyi._.js" defer=""></script><script src="/_next/static/chunks/pages_index_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages_index_1slv9ye._.js" defer=""></script><script src="/_next/static/development/_buildManifest.js" defer=""></script><script src="/_next/static/development/_ssgManifest.js" defer=""></script><script src="/_next/static/development/_clientMiddlewareManifest.js" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript><style>@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><body><div id="__next"><button>first button</button><button>second button</button><p id="first-data">{"hello":"world"}</p><p id="second-data">{"hello":"again"}</p></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"development","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script><nextjs-portal style="position: absolute; --nextjs-dev-tools-scale: 1;"></nextjs-portal><next-route-announcer><p aria-live="assertive" id="__next-route-announcer__" role="alert" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;"></p></next-route-announcer></body>

undefined

  794 |   }
  795 |   console.error('TIMED OUT CHECK: ', { regex, content, lastErr })
> 796 |   throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |         ^
  797 | }
  798 |
  799 | export class File {

  at check (lib/next-test-utils.ts:796:9)
  at Object.<anonymous> (development/tsconfig-path-reloading/index.test.ts:121:9)

pnpm test-dev-turbo test/development/acceptance/ReactRefreshRequire.test.ts (turbopack) (job)

  • ReactRefreshRequire > propagates a module that stops accepting in next version (DD)
Expand output

● ReactRefreshRequire › propagates a module that stops accepting in next version

Application is in inconsistent state: timeout.

  113 |             }
  114 |             if (status !== 'pending') {
> 115 |               throw new Error(
      |                     ^
  116 |                 `Application is in inconsistent state: ${status}.`
  117 |               )
  118 |             }

  at Object.patch (lib/development-sandbox.ts:115:21)
  at Object.<anonymous> (development/acceptance/ReactRefreshRequire.test.ts:410:9)

pnpm test-dev-turbo test/development/app-document-remove-hmr/app-document-remove-hmr.test.ts (turbopack) (job)

  • _app/_document removal HMR > should HMR when _app is removed (DD)
Expand output

● _app/_document removal HMR › should HMR when _app is removed

expect(received).not.toContain(expected) // indexOf

Expected substring: not "custom _app"
Received string:        "<head><meta charset=\"utf-8\" data-next-head=\"\"><meta name=\"viewport\" content=\"width=device-width\" data-next-head=\"\"><noscript data-n-css=\"\"></noscript><script src=\"/_next/static/chunks/11-r_next_dist_compiled_0i5mt3p._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/11-r_next_dist_shared_lib_09iljqf._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/11-r_next_dist_client_1vk7uie._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/11-r_next_dist_1z5_j9e._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/0h_p_react-dom_0e0_bfj._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/node_modules__pnpm_125dyye._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/%5Broot-of-the-server%5D__00my3xu._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/pages__app_0du2_q-._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/turbopack-pages__app_12-lk0z._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/%5Broot-of-the-server%5D__0drlkvz._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/pages_index_0du2_q-._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/turbopack-pages_index_1y8ladq._.js\" defer=\"\"></script><script src=\"/_next/static/development/_buildManifest.js\" defer=\"\"></script><script src=\"/_next/static/development/_ssgManifest.js\" defer=\"\"></script><script src=\"/_next/static/development/_clientMiddlewareManifest.js\" defer=\"\"></script><noscript id=\"__next_css__DO_NOT_USE__\"></noscript><style>@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><body><p>custom _document</p><div id=\"__next\"><p>custom _app</p><p>index page</p></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false,\"scriptLoader\":[]}</script><nextjs-portal style=\"position: absolute; --nextjs-dev-tools-scale: 1;\"></nextjs-portal><next-route-announcer><p aria-live=\"assertive\" id=\"__next-route-announcer__\" role=\"alert\" style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;\"></p></next-route-announcer></body>"

  21 |         const html = await browser.eval('document.documentElement.innerHTML')
  22 |         expect(html).toContain('index page')
> 23 |         expect(html).not.toContain('custom _app')
     |                          ^
  24 |       })
  25 |
  26 |       await next.patchFile(

  at toContain (development/app-document-remove-hmr/app-document-remove-hmr.test.ts:23:26)
  at retry (lib/next-test-utils.ts:867:14)
  at Object.<anonymous> (development/app-document-remove-hmr/app-document-remove-hmr.test.ts:20:7)

pnpm test-dev-turbo test/development/jsconfig-path-reloading/index.test.ts (turbopack) (job)

  • jsconfig-path-reloading > jsconfig > should recover from module not found when paths is updated (DD)
  • jsconfig-path-reloading > jsconfig added after starting dev > should recover from module not found when paths is updated (DD)
Expand output

● jsconfig-path-reloading › jsconfig › should recover from module not found when paths is updated

TIMED OUT: success

<head><meta charset="utf-8" data-next-head=""><meta name="viewport" content="width=device-width" data-next-head=""><noscript data-n-css=""></noscript><script src="/_next/static/chunks/11-r_next_dist_compiled_0i5mt3p._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_shared_lib_09iljqf._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_client_1vk7uie._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1cew1wn._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_app_0n-_1dk.js" defer=""></script><script src="/_next/static/chunks/%5Bnext%5D_entry_page-loader_ts_12mh-xx._.js" defer=""></script><script src="/_next/static/chunks/0h_p_react-dom_0e0_bfj._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_118x9j2._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__0l4r13l._.js" defer=""></script><script src="/_next/static/chunks/pages__app_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages__app_0qdv1gk._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1z5_j9e._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_125dyye._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__0qy7t77._.js" defer=""></script><script src="/_next/static/chunks/pages_index_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages_index_0sfvo1k._.js" defer=""></script><script src="/_next/static/development/_buildManifest.js" defer=""></script><script src="/_next/static/development/_ssgManifest.js" defer=""></script><script src="/_next/static/development/_clientMiddlewareManifest.js" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript><style>@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><body><div id="__next"><button>first button</button><button>second button</button><p id="first-data">{"hello":"world"}</p><p id="second-data">{"hello":"again"}</p></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"development","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script><nextjs-portal style="position: absolute; --nextjs-dev-tools-scale: 1;"></nextjs-portal><next-route-announcer><p aria-live="assertive" id="__next-route-announcer__" role="alert" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;"></p></next-route-announcer></body>

undefined

  794 |   }
  795 |   console.error('TIMED OUT CHECK: ', { regex, content, lastErr })
> 796 |   throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |         ^
  797 | }
  798 |
  799 | export class File {

  at check (lib/next-test-utils.ts:796:9)
  at Object.<anonymous> (development/jsconfig-path-reloading/index.test.ts:113:9)

● jsconfig-path-reloading › jsconfig added after starting dev › should recover from module not found when paths is updated

TIMED OUT: success

<head><meta charset="utf-8" data-next-head=""><meta name="viewport" content="width=device-width" data-next-head=""><noscript data-n-css=""></noscript><script src="/_next/static/chunks/11-r_next_dist_compiled_0i5mt3p._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_shared_lib_09iljqf._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_client_1vk7uie._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1cew1wn._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_app_0n-_1dk.js" defer=""></script><script src="/_next/static/chunks/%5Bnext%5D_entry_page-loader_ts_12mh-xx._.js" defer=""></script><script src="/_next/static/chunks/0h_p_react-dom_0e0_bfj._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_118x9j2._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__0l4r13l._.js" defer=""></script><script src="/_next/static/chunks/pages__app_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages__app_0qdv1gk._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1z5_j9e._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_125dyye._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__0qy7t77._.js" defer=""></script><script src="/_next/static/chunks/pages_index_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages_index_0sfvo1k._.js" defer=""></script><script src="/_next/static/development/_buildManifest.js" defer=""></script><script src="/_next/static/development/_ssgManifest.js" defer=""></script><script src="/_next/static/development/_clientMiddlewareManifest.js" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript><style>@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><body><div id="__next"><button>first button</button><button>second button</button><p id="first-data">{"hello":"world"}</p><p id="second-data">{"hello":"again"}</p></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"development","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script><nextjs-portal style="position: absolute; --nextjs-dev-tools-scale: 1;"></nextjs-portal><next-route-announcer><p aria-live="assertive" id="__next-route-announcer__" role="alert" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;"></p></next-route-announcer></body>

undefined

  794 |   }
  795 |   console.error('TIMED OUT CHECK: ', { regex, content, lastErr })
> 796 |   throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |         ^
  797 | }
  798 |
  799 | export class File {

  at check (lib/next-test-utils.ts:796:9)
  at Object.<anonymous> (development/jsconfig-path-reloading/index.test.ts:113:9)

pnpm test-dev-turbo test/development/acceptance/ReactRefreshRegression.test.ts (turbopack) (job)

  • ReactRefreshRegression > can fast refresh a page with getStaticProps (DD)
  • ReactRefreshRegression > can fast refresh a page with getServerSideProps (DD)
  • ReactRefreshRegression > can fast refresh a page with config (DD)
Expand output

● ReactRefreshRegression › can fast refresh a page with getStaticProps

Application is in inconsistent state: timeout.

  113 |             }
  114 |             if (status !== 'pending') {
> 115 |               throw new Error(
      |                     ^
  116 |                 `Application is in inconsistent state: ${status}.`
  117 |               )
  118 |             }

  at Object.patch (lib/development-sandbox.ts:115:21)
  at Object.<anonymous> (development/acceptance/ReactRefreshRegression.test.ts:117:5)

● ReactRefreshRegression › can fast refresh a page with getServerSideProps

Application is in inconsistent state: timeout.

  113 |             }
  114 |             if (status !== 'pending') {
> 115 |               throw new Error(
      |                     ^
  116 |                 `Application is in inconsistent state: ${status}.`
  117 |               )
  118 |             }

  at Object.patch (lib/development-sandbox.ts:115:21)
  at Object.<anonymous> (development/acceptance/ReactRefreshRegression.test.ts:179:5)

● ReactRefreshRegression › can fast refresh a page with config

Application is in inconsistent state: timeout.

  113 |             }
  114 |             if (status !== 'pending') {
> 115 |               throw new Error(
      |                     ^
  116 |                 `Application is in inconsistent state: ${status}.`
  117 |               )
  118 |             }

  at Object.patch (lib/development-sandbox.ts:115:21)
  at Object.<anonymous> (development/acceptance/ReactRefreshRegression.test.ts:241:5)

pnpm test-dev-turbo test/development/acceptance-app/error-recovery.test.ts (turbopack) (job)

  • Error recovery app > can recover from a syntax error without losing state (DD)
  • Error recovery app > server component can recover from a component error (DD)
  • Error recovery app > render error not shown right after syntax error (DD)
Expand output

● Error recovery app › can recover from a syntax error without losing state

TIMED OUT: /Count: 1/

1

undefined

  794 |   }
  795 |   console.error('TIMED OUT CHECK: ', { regex, content, lastErr })
> 796 |   throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |         ^
  797 | }
  798 |
  799 | export class File {

  at check (lib/next-test-utils.ts:796:9)
  at Object.<anonymous> (development/acceptance-app/error-recovery.test.ts:118:5)

● Error recovery app › server component can recover from a component error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Error recovery app server component can recover from a component error 1`

- Snapshot  - 12
+ Received  +  1

- {
-   "description": "oops",
-   "environmentLabel": "Server",
-   "label": "<FIXME-excluded-label>",
-   "source": "child.js (3:9) @ Child
- > 3 |   throw new Error('oops')
-     |         ^",
-   "stack": [
-     "Child child.js (3:9)",
-     "Page app/server/page.js (3:10)",
-   ],
- }
+ "Expected Redbox but found no visible one."

  437 |     )
  438 |
> 439 |     await expect(browser).toDisplayRedbox(
      |                           ^
  440 |       `
  441 |      {
  442 |        "description": "oops",

  at Object.toDisplayRedbox (development/acceptance-app/error-recovery.test.ts:439:27)

● Error recovery app › render error not shown right after syntax error

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Error recovery app render error not shown right after syntax error 3`

- Snapshot  - 12
+ Received  +  1

- {
-   "description": "nooo",
-   "environmentLabel": null,
-   "label": "Runtime Error",
-   "source": "index.js (5:11) @ ClassDefault.render
- > 5 |     throw new Error('nooo');
-     |           ^",
-   "stack": [
-     "ClassDefault.render index.js (5:11)",
-     "Page index.js (10:16)",
-   ],
- }
+ "Expected Redbox but found no visible one."

  1075 |     if (isTurbopack) {
  1076 |       // TODO(veil): Location of Page should be app/page.js
> 1077 |       await expect(browser).toDisplayRedbox(`
       |                             ^
  1078 |        {
  1079 |          "description": "nooo",
  1080 |          "environmentLabel": null,

  at Object.toDisplayRedbox (development/acceptance-app/error-recovery.test.ts:1077:29)

pnpm test-dev-turbo test/development/acceptance/error-recovery.test.ts (turbopack) (job)

  • pages/ error recovery > logbox: can recover from a syntax error without losing state (DD)
  • pages/ error recovery > render error not shown right after syntax error (DD)
Expand output

● pages/ error recovery › logbox: can recover from a syntax error without losing state

Application is in inconsistent state: timeout.

  113 |             }
  114 |             if (status !== 'pending') {
> 115 |               throw new Error(
      |                     ^
  116 |                 `Application is in inconsistent state: ${status}.`
  117 |               )
  118 |             }

  at Object.patch (lib/development-sandbox.ts:115:21)
  at Object.<anonymous> (development/acceptance/error-recovery.test.ts:98:5)

● pages/ error recovery › render error not shown right after syntax error

Application is in inconsistent state: timeout.

  113 |             }
  114 |             if (status !== 'pending') {
> 115 |               throw new Error(
      |                     ^
  116 |                 `Application is in inconsistent state: ${status}.`
  117 |               )
  118 |             }

  at Object.patch (lib/development-sandbox.ts:115:21)
  at Object.<anonymous> (development/acceptance/error-recovery.test.ts:555:5)

pnpm test-dev-turbo test/development/typescript-auto-install/index.test.ts (turbopack) (job)

  • typescript-auto-install > should detect TypeScript being added and auto setup (DD)
Expand output

● typescript-auto-install › should detect TypeScript being added and auto setup

TIMED OUT: /hello again/

<head><meta charset="utf-8" data-next-head=""><meta name="viewport" content="width=device-width" data-next-head=""><noscript data-n-css=""></noscript><script src="/_next/static/chunks/11-r_next_dist_compiled_0i5mt3p._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_shared_lib_09iljqf._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_client_1vk7uie._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1cew1wn._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_app_0n-_1dk.js" defer=""></script><script src="/_next/static/chunks/%5Bnext%5D_entry_page-loader_ts_12mh-xx._.js" defer=""></script><script src="/_next/static/chunks/0h_p_react-dom_0e0_bfj._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_118x9j2._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__0l4r13l._.js" defer=""></script><script src="/_next/static/chunks/pages__app_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages__app_0qdv1gk._.js" defer=""></script><script src="/_next/static/chunks/11-r_next_dist_1z5_j9e._.js" defer=""></script><script src="/_next/static/chunks/node_modules__pnpm_125dyye._.js" defer=""></script><script src="/_next/static/chunks/%5Broot-of-the-server%5D__0drlkvz._.js" defer=""></script><script src="/_next/static/chunks/pages_index_0du2_q-._.js" defer=""></script><script src="/_next/static/chunks/turbopack-pages_index_1y8ladq._.js" defer=""></script><script src="/_next/static/development/_buildManifest.js" defer=""></script><script src="/_next/static/development/_ssgManifest.js" defer=""></script><script src="/_next/static/development/_clientMiddlewareManifest.js" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript><style>@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'__nextjs-Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'__nextjs-Geist Mono';font-style:normal;font-weight:400 600;font-display:swap;src:url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><body><div id="__next"><p>hello world</p></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"development","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script><nextjs-portal style="position: absolute; --nextjs-dev-tools-scale: 1;"></nextjs-portal><next-route-announcer><p aria-live="assertive" id="__next-route-announcer__" role="alert" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;"></p></next-route-announcer></body>

undefined

  794 |   }
  795 |   console.error('TIMED OUT CHECK: ', { regex, content, lastErr })
> 796 |   throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |         ^
  797 | }
  798 |
  799 | export class File {

  at check (lib/next-test-utils.ts:796:9)
  at Object.<anonymous> (development/typescript-auto-install/index.test.ts:57:5)

pnpm test-dev-turbo test/e2e/instrumentation-client-hook/instrumentation-client-hook.test.ts (turbopack) (job)

  • Instrumentation Client Hook > HMR in development mode > should reload instrumentation-client when modified (DD)
Expand output

● Instrumentation Client Hook › HMR in development mode › should reload instrumentation-client when modified

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: undefined

  134 |             `window.__INSTRUMENTATION_CLIENT_UPDATED`
  135 |           )
> 136 |           expect(updatedFlag).toBe(true)
      |                               ^
  137 |
  138 |           // Verify new execution time
  139 |           const newTime = await browser.eval(

  at toBe (e2e/instrumentation-client-hook/instrumentation-client-hook.test.ts:136:31)
  at retry (lib/next-test-utils.ts:867:14)
  at Object.<anonymous> (e2e/instrumentation-client-hook/instrumentation-client-hook.test.ts:131:9)

Other failing CI jobs

add a missing root annotation
exempt webpack from the concurrent install test
@lukesandberg lukesandberg force-pushed the next_js_package_not_found_is_catastrophic branch from e2a194f to baf65c3 Compare May 16, 2026 17:34
@lukesandberg lukesandberg marked this pull request as ready for review May 16, 2026 17:34
@lukesandberg lukesandberg requested a review from a team May 16, 2026 17:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant