Skip to content

[testmode] Fix infinite recursion in testmode passthrough fetch - #97257

Closed
eps1lon wants to merge 1 commit into
canaryfrom
adopt/96525
Closed

eps1lon wants to merge 1 commit into
canaryfrom
adopt/96525

Conversation

@eps1lon

@eps1lon eps1lon commented Aug 12, 2026

Copy link
Copy Markdown
Member

Adopts #96525. Closes #96525.

With experimental.testProxy on, @mswjs/interceptors (switched to socket-level interception in #96059) also catches the passthrough fetch that handleFetch makes for non-test requests. That request has no next-test-internal marker, so the interceptor calls handleFetch again, takes the passthrough branch again, and loops until it errors. So any server-side request made outside a test context never resolves during a test run.

This adds the next-test-internal marker to the passthrough request, and to the continue case that has the same problem. It is the guard #96059 already added for the proxy-protocol request, so the request reaches the real server instead of being intercepted again.

Fixes #96521

@github-actions

github-actions Bot commented Aug 12, 2026 •

Copy link
Copy Markdown
Contributor

Tests Passed

Commit: 55d460b

@github-actions

github-actions Bot commented Aug 12, 2026 •

Copy link
Copy Markdown
Contributor

Stats from current PR

Warning

No stats were collected for Webpack because its stats job did not complete (it failed, was cancelled, or timed out). The results below only cover the bundlers that finished.

🔴 3 regressions, 1 improvement

Metric Canary PR Change Trend
Turbo Build Time 5.742s 6.338s 🔴 +596ms (+10%) ▁██▇▁
Turbo Build Time (cached) 2.829s 3.379s 🔴 +550ms (+19%) ▁██▇▁
Cold (First Request) 1.280s 1.391s 🔴 +111ms (+9%) ▁██▇▁
node_modules Size 553 MB 551 MB 🟢 1.74 MB (0%) █████
📊 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) 760ms 812ms ✓ ▂███▁
Cold (Ready in log) 764ms 811ms ✓ ▁██▇▁
Cold (First Request) 1.280s 1.391s 🔴 +111ms (+9%) ▁██▇▁
Warm (Listen) 812ms 813ms ✓ ▂██▇▂
Warm (Ready in log) 793ms 807ms ✓ ▁██▇▁
Warm (First Request) 1.347s 1.364s ✓ ▁██▇▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 5.742s 6.338s 🔴 +596ms (+10%) ▁██▇▁
Cached Build 2.829s 3.379s 🔴 +550ms (+19%) ▁██▇▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
node_modules Size 553 MB 551 MB 🟢 1.74 MB (0%) █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
0-qgm0nju2p_g.js gzip 65.6 kB N/A -
03lzpt71kg1qg.js gzip 47 kB N/A -
050icza-xjz0i.js gzip 5.73 kB N/A -
07jdby0ue616s.js gzip 450 B N/A -
09h-pq0amxnxn.js gzip 155 B N/A -
0bjdc8muo74n5.js gzip 8.71 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB ✓
0d96sdjnk6_q2.js gzip 160 B N/A -
0h65-ko13bi2v.js gzip 154 B N/A -
0l9a54rsx_muy.js gzip 169 B N/A -
0q36apx7b1q_e.js gzip 7.54 kB N/A -
0rci1f3or1a19.js gzip 13.3 kB N/A -
0s56j06e963lv.js gzip 157 B N/A -
0vh9avwq65kiy.js gzip 156 B N/A -
1_2x714--ii1i.js gzip 8.76 kB N/A -
1-3y752pkth5-.js gzip 10 kB N/A -
10l611mm67gac.js gzip 71.6 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B ✓
1k6dd7su4cfei.js gzip 3.57 kB N/A -
1kpy40fd-pusb.js gzip 154 B N/A -
1tf1phijqlx9j.js gzip 220 B 220 B ✓
1uzabyd1120a1.js gzip 8.71 kB N/A -
2_uglbwqpe26b.js gzip 156 B N/A -
2-ufv8lc-g7gg.js gzip 10.6 kB N/A -
21kmjy_10x14f.js gzip 8.81 kB N/A -
28dhc6t85q1_p.js gzip 8.78 kB N/A -
29vdii-hrinxo.js gzip 154 B N/A -
2f-ilvczue-tp.js gzip 9.46 kB N/A -
2f1u17u5c8iny.js gzip 8.79 kB N/A -
2ikltg_8iegxw.js gzip 10.3 kB N/A -
2vxi673cz1-t4.js gzip 8.79 kB N/A -
38-q43pzktqhs.js gzip 1.46 kB N/A -
3dpw0m5_58h1u.js gzip 160 B N/A -
3gq5gsxwg_yl5.js gzip 151 B N/A -
3mrwxzed0ylgv.js gzip 13.1 kB N/A -
3nbojhxiy1qv_.js gzip 13.7 kB N/A -
3p8f-2kolq65a.js gzip 157 B N/A -
3qmtac2p5up_2.js gzip 156 B N/A -
41u5s3oe2-erp.js gzip 2.29 kB N/A -
445s_9hf8o7ao.js gzip 8.76 kB N/A -
turbopack-0d..9ejy.js gzip 3.74 kB N/A -
030a1njeh5b77.js gzip N/A 10 kB -
06o7kggwe5neo.js gzip N/A 156 B -
0dvzuazs1j0mf.js gzip N/A 161 B -
0ex9bq9g6zp-0.js gzip N/A 169 B -
0ot0qt5np20h7.js gzip N/A 8.78 kB -
0pdu7sye-gejv.js gzip N/A 157 B -
0qxjvy0dguqxu.js gzip N/A 158 B -
0v-8n7x26pyzs.js gzip N/A 152 B -
0wtvkl__zq6ui.js gzip N/A 155 B -
12m9rr7_7cexd.js gzip N/A 8.7 kB -
186r3y_rfvr0b.js gzip N/A 8.78 kB -
19v97848yrjp7.js gzip N/A 8.81 kB -
1nd_0rwgz2ozk.js gzip N/A 9.45 kB -
1oi9pltr_e10m.js gzip N/A 10.6 kB -
1pl7he22-q2-f.js gzip N/A 156 B -
1rd9tzqgzsz2w.js gzip N/A 8.77 kB -
1rq1g_cwv642d.js gzip N/A 10.3 kB -
1un3derkfzkyp.js gzip N/A 156 B -
1uojw_uabeg93.js gzip N/A 450 B -
1w-7lusgyl81y.js gzip N/A 8.7 kB -
2-_pb26jxhvzw.js gzip N/A 46.3 kB -
21h56wdn9zddo.js gzip N/A 8.75 kB -
2fxxq9ji2sac4.js gzip N/A 65.6 kB -
2jp1fuvxwoiaz.js gzip N/A 7.45 kB -
2m57nz3ehmxuc.js gzip N/A 157 B -
2ovff1533zvno.js gzip N/A 13.2 kB -
2s4z8jy0z7v93.js gzip N/A 1.46 kB -
2s5d6umxgi4qw.js gzip N/A 157 B -
2y6gb5bs4mnam.js gzip N/A 8.75 kB -
341h71ln1jpl3.js gzip N/A 2.29 kB -
34ttpt_n7605h.js gzip N/A 5.72 kB -
36ckfq9o-ys-a.js gzip N/A 13.1 kB -
3iodf_44jjw8s.js gzip N/A 3.54 kB -
3k2c4xo700tmi.js gzip N/A 162 B -
3ojc1mgc0yaxk.js gzip N/A 155 B -
3vdh6_u50pu5t.js gzip N/A 13.6 kB -
44sa39v7lpfin.js gzip N/A 71.4 kB -
turbopack-0-..gim4.js gzip N/A 3.85 kB -
turbopack-0l..3t_v.js gzip N/A 3.84 kB -
turbopack-18..iq2h.js gzip N/A 3.84 kB -
turbopack-19..e5vl.js gzip N/A 3.85 kB -
turbopack-2_..o3_v.js gzip N/A 3.84 kB -
turbopack-2d..8ji9.js gzip N/A 3.84 kB -
turbopack-2e..6vkv.js gzip N/A 3.85 kB -
turbopack-2j..7v9o.js gzip N/A 3.85 kB -
turbopack-2j..93ej.js gzip N/A 3.86 kB -
turbopack-2q..g022.js gzip N/A 3.85 kB -
turbopack-31..52b6.js gzip N/A 3.84 kB -
turbopack-3i..pj7i.js gzip N/A 3.84 kB -
turbopack-3j..70ob.js gzip N/A 3.82 kB -
turbopack-3n..g14a.js gzip N/A 3.84 kB -
Total 401 kB 450 kB ⚠️ +48.8 kB

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 1.05 kB 775 B 🟢 280 B (-27%)
Total 1.05 kB 775 B ✅ -280 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 876 B 431 B 🟢 445 B (-51%)
Total 876 B 431 B ✅ -445 B
Build Cache
Canary PR Change
00000001.sst gzip 15.9 MB 15.4 MB 🟢 517 kB (-3%)
00000002.sst gzip 13.8 MB 12.1 MB 🟢 1.68 MB (-12%)
00000003.sst gzip 14.3 MB 14.2 MB 🟢 111 kB (-1%)
00000004.sst gzip 11.1 MB 13.6 MB 🔴 +2.48 MB (+22%)
00000005.sst gzip 10.2 MB 10.3 MB 🔴 +108 kB (+1%)
00000006.sst gzip 2.8 MB 2.83 MB 🔴 +33.8 kB (+1%)
00000007.sst gzip 59 B 59 B ✓
00000008.meta gzip 89 B 89 B ✓
00000009.meta gzip 298 kB 298 kB ✓
00000010.meta gzip 298 kB 298 kB ✓
00000011.meta gzip 298 kB 298 kB ✓
00000012.sst gzip 51.8 kB 51.7 kB ✓
00000013.sst gzip 1.84 MB 1.91 MB 🔴 +69.9 kB (+4%)
00000014.sst gzip 59 B 59 B ✓
00000015.meta gzip 116 B 116 B ✓
00000016.meta gzip 326 kB 324 kB 🟢 2.21 kB (-1%)
00000017.meta gzip 406 kB 404 kB ✓
00000018.sst gzip 52.5 kB 52.5 kB ✓
00000019.sst gzip 1.4 MB 1.4 MB 🔴 +6.19 kB (+0%)
00000020.sst gzip 59 B 59 B ✓
00000021.meta gzip 116 B 116 B ✓
00000022.meta gzip 326 kB 324 kB 🟢 2.21 kB (-1%)
00000023.meta gzip 372 kB 370 kB ✓
00000024.sst gzip 52.6 kB 52.6 kB ✓
00000025.sst gzip 1.4 MB 1.4 MB 🔴 +6.01 kB (+0%)
00000026.sst gzip 59 B 59 B ✓
00000027.meta gzip 116 B 116 B ✓
00000028.meta gzip 326 kB 324 kB 🟢 2.21 kB (-1%)
00000029.meta gzip 372 kB 370 kB ✓
00000030.sst gzip 52 kB 51.9 kB ✓
00000031.sst gzip 1.4 MB 1.4 MB 🔴 +6.17 kB (+0%)
00000032.sst gzip 59 B 59 B ✓
00000033.meta gzip 116 B 116 B ✓
00000034.meta gzip 326 kB 324 kB 🟢 2.21 kB (-1%)
00000035.meta gzip 372 kB 370 kB ✓
00000036.sst gzip 52.4 kB 52.4 kB ✓
00000037.sst gzip 1.4 MB 1.4 MB 🔴 +5.9 kB (+0%)
00000038.sst gzip 59 B 59 B ✓
00000039.meta gzip 116 B 116 B ✓
00000040.meta gzip 326 kB 324 kB 🟢 2.21 kB (-1%)
00000041.meta gzip 372 kB 370 kB ✓
CURRENT gzip 94 B 24 B 🟢 70 B (-74%)
LOG gzip 677 B 667 B 🟢 10 B (-1%)
Total 80.2 MB 80.6 MB ⚠️ +393 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 375 kB 373 kB ✓
app-page-exp..prod.js gzip 207 kB 206 kB ✓
app-page-tur...dev.js gzip 374 kB 373 kB ✓
app-page-tur..prod.js gzip 207 kB 206 kB ✓
app-page-tur...dev.js gzip 371 kB 369 kB ✓
app-page-tur..prod.js gzip 204 kB 204 kB ✓
app-page.run...dev.js gzip 371 kB 369 kB ✓
app-page.run..prod.js gzip 205 kB 204 kB ✓
app-route-ex...dev.js gzip 82.9 kB 83 kB ✓
app-route-ex..prod.js gzip 56.1 kB 56.1 kB ✓
app-route-tu...dev.js gzip 83 kB 83.1 kB ✓
app-route-tu..prod.js gzip 56.1 kB 56.2 kB ✓
app-route-tu...dev.js gzip 82.5 kB 82.6 kB ✓
app-route-tu..prod.js gzip 55.9 kB 55.9 kB ✓
app-route.ru...dev.js gzip 82.5 kB 82.6 kB ✓
app-route.ru..prod.js gzip 55.8 kB 55.9 kB ✓
dev-validati...dev.js gzip 134 kB 133 kB ✓
dev-validati...dev.js gzip 134 kB 133 kB ✓
dev-validati...dev.js gzip 131 kB 131 kB ✓
dev-validati...dev.js gzip 131 kB 131 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 46.4 kB 46 kB ✓
pages-api-tu..prod.js gzip 34.6 kB 34.3 kB ✓
pages-api.ru...dev.js gzip 46.4 kB 45.9 kB ✓
pages-api.ru..prod.js gzip 34.5 kB 34.3 kB ✓
pages-turbo....dev.js gzip 55.2 kB 54.7 kB ✓
pages-turbo...prod.js gzip 40.1 kB 39.8 kB ✓
pages.runtim...dev.js gzip 55.1 kB 54.7 kB ✓
pages.runtim..prod.js gzip 40.1 kB 39.8 kB ✓
server.runti..prod.js gzip 67.1 kB 66.9 kB ✓
use-cache-pr...dev.js gzip 72.6 kB 72.1 kB ✓
use-cache-pr...dev.js gzip 72.6 kB 72.1 kB ✓
use-cache-pr...dev.js gzip 70.8 kB 70.4 kB ✓
use-cache-pr...dev.js gzip 70.8 kB 70.4 kB ✓
Total 4.11 MB 4.09 MB ✅ -17.6 kB
📝 Changed Files (33 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-exp..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page.runtime.dev.js
  • app-page.runtime.prod.js
  • app-route-ex..ntime.dev.js
  • app-route-ex..time.prod.js
  • app-route-tu..ntime.dev.js
  • app-route-tu..time.prod.js
  • app-route-tu..ntime.dev.js
  • app-route-tu..time.prod.js
  • app-route.runtime.dev.js
  • app-route.ru..time.prod.js
  • dev-validati..ntime.dev.js
  • dev-validati..ntime.dev.js
  • dev-validati..ntime.dev.js
  • dev-validati..ntime.dev.js
  • ... and 13 more
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-exp..time.prod.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page.runtime.dev.js
failed to diff
app-page.runtime.prod.js
failed to diff
app-route-ex..ntime.dev.js

Diff too large to display

app-route-ex..time.prod.js

Diff too large to display

app-route-tu..ntime.dev.js

Diff too large to display

app-route-tu..time.prod.js

Diff too large to display

app-route-tu..ntime.dev.js

Diff too large to display

app-route-tu..time.prod.js

Diff too large to display

app-route.runtime.dev.js

Diff too large to display

app-route.ru..time.prod.js

Diff too large to display

dev-validati..ntime.dev.js
failed to diff
dev-validati..ntime.dev.js
failed to diff
dev-validati..ntime.dev.js
failed to diff
dev-validati..ntime.dev.js
failed to diff
pages-api-tu..ntime.dev.js

Diff too large to display

pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-api.ru..time.prod.js

Diff too large to display

pages-turbo...ntime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

pages.runtime.prod.js

Diff too large to display

server.runtime.prod.js

Diff too large to display

use-cache-pr..ntime.dev.js

Diff too large to display

use-cache-pr..ntime.dev.js

Diff too large to display

use-cache-pr..ntime.dev.js

Diff too large to display

use-cache-pr..ntime.dev.js

Diff too large to display

📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/55d460bf29ef0671013e2551f3526670dad41840/next

Commit: 55d460b

@eps1lon
eps1lon marked this pull request as ready for review August 13, 2026 01:54
@eps1lon
eps1lon marked this pull request as ready for review August 13, 2026 01:54
@eps1lon
eps1lon requested a review from gnoff August 13, 2026 01:54
@github-actions github-actions Bot added the locked label Sep 2, 2026
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Sep 2, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Nextjs test mode issue

2 participants