Skip to content

fix a snapshot encoding error that could happen under concurrent mutation and snapshotting#92658

Merged
lukesandberg merged 2 commits intocanaryfrom
racy_snapshot_encoding
Apr 29, 2026
Merged

fix a snapshot encoding error that could happen under concurrent mutation and snapshotting#92658
lukesandberg merged 2 commits intocanaryfrom
racy_snapshot_encoding

Conversation

@lukesandberg
Copy link
Copy Markdown
Contributor

@lukesandberg lukesandberg commented Apr 11, 2026

What?

Fixes a snapshot encoding panic introduced by #89370 in turbopack/crates/turbo-tasks-backend/src/backend/storage.rs.

Why?

#89370 refactored snapshot iteration and in doing so introduced two incorrect assertions in SnapshotShardIter::next for tasks in the modified list that were re-modified during snapshot iteration:

  1. .expect("snapshot entry for modified_during_snapshot task must contain a value") — this panics in the (true, false) branch of track_modification_internal, where a task was modified in one category before the snapshot and then modified in a different category during iteration. The second modification stores a None entry in snapshots (because there was no pre-existing data to copy for that category), but the iterator unconditionally unwrapped Some.

  2. debug_assert!(!inner.flags.any_modified()) — after clearing the live data_modified/meta_modified flags and before promoting _during_snapshot flags, the old code asserted that no modified flags remained. This fires in the (true, true) branch because clearing the flags happens after the snapshot copy was taken, so the assert races with the flag state.

How?

  • Unify the direct_snapshots fast-path and the modified list into a single path that handles both (true, true) and (true, false) cases gracefully: if any_modified_during_snapshot() is set, check the snapshots map — use the Some(copy) if present, otherwise fall back to live data (which is correct for the None/first-time-modified case).
  • Add a regression test covering the (true, false) branch (modify_different_category_during_snapshot).

@nextjs-bot nextjs-bot added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. labels Apr 11, 2026
Copy link
Copy Markdown
Contributor Author

lukesandberg commented Apr 11, 2026

@lukesandberg lukesandberg marked this pull request as ready for review April 11, 2026 17:58
@lukesandberg lukesandberg requested review from a team and sokra April 11, 2026 17:58
@lukesandberg lukesandberg force-pushed the racy_snapshot_encoding branch from 38ac61b to bc66ee8 Compare April 13, 2026 23:47
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Apr 14, 2026

Merging this PR will not alter performance

✅ 17 untouched benchmarks
⏩ 3 skipped benchmarks1


Comparing racy_snapshot_encoding (e98a934) with canary (0b08e2f)

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@nextjs-bot
Copy link
Copy Markdown
Contributor

nextjs-bot commented Apr 14, 2026

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) 455ms 455ms ▅▁▁▅▅
Cold (Ready in log) 439ms 438ms █▇▂▅▅
Cold (First Request) 830ms 823ms ▁▁█▁█
Warm (Listen) 456ms 455ms ▅▅▅▅█
Warm (Ready in log) 438ms 437ms ▃▃▃▁▄
Warm (First Request) 333ms 334ms ▅▅▇▂▇
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 456ms ▅▁▅▅▅
Cold (Ready in log) 442ms 442ms ▂▇▁▃▅
Cold (First Request) 1.963s 1.976s ▆█▆▆█
Warm (Listen) 456ms 456ms ▅█▁▅▅
Warm (Ready in log) 442ms 441ms ▄▆▂▃▅
Warm (First Request) 1.965s 1.970s ▅▇▆▆█

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.948s 4.010s ▄█▃▅▂
Cached Build 3.990s 3.989s ▃█▂▄▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.614s 14.595s ██▂▃█
Cached Build 14.739s 14.769s ▂█▄▁▆
node_modules Size 494 MB 494 MB █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
04gfaeiu1v7qm.js gzip 151 B N/A -
07rxhp_1_g4mu.js gzip 13.1 kB N/A -
07vz_1vlust95.js gzip 65.5 kB N/A -
08avva-dy02e7.js gzip 10.4 kB N/A -
09x_ycos2214h.js gzip 151 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0fli3_wppnim5.js gzip 12.9 kB N/A -
0k09jwjeb-tki.js gzip 13.8 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kw8xgqdrilf6.js gzip 8.56 kB N/A -
0lgndkr1hands.js gzip 49.6 kB N/A -
0ojkk2e654xsc.js gzip 8.59 kB N/A -
0wfoal20dkqj1.js gzip 155 B N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
0xy2fhla48_rd.js gzip 9.24 kB N/A -
0zx3fp91iid52.js gzip 159 B N/A -
10wqsvi2mgfmi.js gzip 9.82 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
18y4_8-9or0mn.js gzip 8.51 kB N/A -
19410kg_2bl_2.js gzip 156 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1gq145j3kps-h.js gzip 8.62 kB N/A -
1li2wvnrlll1x.js gzip 155 B N/A -
1nsh-mbn0e-se.js gzip 8.56 kB N/A -
1tsrrp1tdngti.js gzip 13.3 kB N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
2587zu9zz3ch0.js gzip 154 B N/A -
25ykkt57gkfew.js gzip 154 B N/A -
2kb7581t3yg4r.js gzip 153 B N/A -
2kvj8yrfznmwx.js gzip 5.69 kB N/A -
2qv7m7xjnokgr.js gzip 8.58 kB N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
37pyv-119nldk.js gzip 152 B N/A -
3geqw_3h7k33y.js gzip 156 B N/A -
3ok6wj7wwsorf.js gzip 70.8 kB N/A -
3sfdvnlx2-d2i.js gzip 152 B N/A -
3u-chifslwdvs.js gzip 166 B N/A -
44un3--wmqiyh.js gzip 7.61 kB N/A -
turbopack-09..02ja.js gzip 4.2 kB N/A -
turbopack-0c.._q68.js gzip 4.18 kB N/A -
turbopack-0s..yucr.js gzip 4.19 kB N/A -
turbopack-0x..vpta.js gzip 4.19 kB N/A -
turbopack-10..-d_w.js gzip 4.19 kB N/A -
turbopack-11..dlm2.js gzip 4.18 kB N/A -
turbopack-1k..j62f.js gzip 4.19 kB N/A -
turbopack-27..b9wz.js gzip 4.17 kB N/A -
turbopack-2u..oxs7.js gzip 4.18 kB N/A -
turbopack-37..th14.js gzip 4.18 kB N/A -
turbopack-39..mfcn.js gzip 4.18 kB N/A -
turbopack-3h..4bnr.js gzip 4.18 kB N/A -
turbopack-3i..gib8.js gzip 4.19 kB N/A -
turbopack-3m..bo_z.js gzip 4.19 kB N/A -
07ao55cvtbxdj.js gzip N/A 153 B -
09t9i6o8nvir7.js gzip N/A 49.6 kB -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0bz-xifewa17d.js gzip N/A 8.63 kB -
0tp80kb9upsmd.js gzip N/A 153 B -
0tsy2vtfmen7f.js gzip N/A 155 B -
0tv67up09u6yz.js gzip N/A 168 B -
0tvekitj587fh.js gzip N/A 8.51 kB -
0y-5s9e_qen41.js gzip N/A 160 B -
0yvk6-wi8e9wh.js gzip N/A 13.3 kB -
0z83a1om5rvtt.js gzip N/A 7.61 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
15sb1-dsqfk_j.js gzip N/A 8.59 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1gt0tm9ba-fkj.js gzip N/A 70.8 kB -
1p-256e9l_n93.js gzip N/A 156 B -
1rexplishteym.js gzip N/A 156 B -
1tu25qtsmfhar.js gzip N/A 9.82 kB -
1vein_gnv3mwr.js gzip N/A 8.56 kB -
1wtjzfc14dkv9.js gzip N/A 154 B -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
1xvan__507d2k.js gzip N/A 155 B -
1z3g0uaqtv9_3.js gzip N/A 8.56 kB -
25a1yz7zua29z.js gzip N/A 13.8 kB -
2bi5hx402juv-.js gzip N/A 8.58 kB -
2hy56297fog9u.js gzip N/A 8.52 kB -
2u_rpxq3tzytl.js gzip N/A 233 B -
31pzx_2wlpu4e.js gzip N/A 156 B -
368lim5wq0o0r.js gzip N/A 12.9 kB -
3drqjohogojbw.js gzip N/A 5.69 kB -
3fs484yi1tj7v.js gzip N/A 156 B -
3g8l1m2-o-ewi.js gzip N/A 13.1 kB -
3jmkxsnxg0nrh.js gzip N/A 10.4 kB -
3qacr5lkwv7qz.js gzip N/A 65.5 kB -
3qi06md02f2cn.js gzip N/A 159 B -
3socpyg9nr02a.js gzip N/A 157 B -
3wpp8nvyoj121.js gzip N/A 9.24 kB -
turbopack-0n..mrvy.js gzip N/A 4.17 kB -
turbopack-0p..kynv.js gzip N/A 4.19 kB -
turbopack-0s..7ud3.js gzip N/A 4.18 kB -
turbopack-17..4gpi.js gzip N/A 4.19 kB -
turbopack-1c..9gyb.js gzip N/A 4.19 kB -
turbopack-1e..ccp_.js gzip N/A 4.19 kB -
turbopack-1s..h27x.js gzip N/A 4.19 kB -
turbopack-1t..njk8.js gzip N/A 4.2 kB -
turbopack-29..e4gm.js gzip N/A 4.19 kB -
turbopack-2a..5zpv.js gzip N/A 4.19 kB -
turbopack-2c..tpfn.js gzip N/A 4.19 kB -
turbopack-2k..hjo6.js gzip N/A 4.19 kB -
turbopack-32..3ekq.js gzip N/A 4.19 kB -
turbopack-42..fj8z.js gzip N/A 4.19 kB -
Total 465 kB 465 kB ⚠️ +103 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 712 B 715 B
Total 712 B 715 B ⚠️ +3 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 431 B 433 B
Total 431 B 433 B ⚠️ +2 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.63 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.4 kB N/A -
8817-HASH.js gzip 5.59 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 255 B 255 B
main-HASH.js gzip 39.4 kB 39.3 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.61 kB -
6522-HASH.js gzip N/A 60.8 kB -
6779-HASH.js gzip N/A 4.63 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 236 kB 235 kB ✅ -641 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 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.97 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 274 kB 273 kB
Total 399 kB 399 kB ✅ -414 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 617 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44 kB 44.3 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.6 kB 45.9 kB ⚠️ +250 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 721 B 720 B
Total 721 B 720 B ✅ -1 B
Build Cache
Canary PR Change
0.pack gzip 4.38 MB 4.38 MB
index.pack gzip 115 kB 116 kB 🔴 +1.89 kB (+2%)
index.pack.old gzip 115 kB 113 kB 🟢 1.53 kB (-1%)
Total 4.61 MB 4.61 MB ✅ -3.21 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 347 kB 347 kB
app-page-exp..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 347 kB 347 kB
app-page-tur..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 343 kB 343 kB
app-page-tur..prod.js gzip 190 kB 190 kB
app-page.run...dev.js gzip 344 kB 344 kB
app-page.run..prod.js gzip 190 kB 190 kB
app-route-ex...dev.js gzip 77 kB 77 kB
app-route-ex..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 77.1 kB 77.1 kB
app-route-tu..prod.js gzip 52.6 kB 52.6 kB
app-route-tu...dev.js gzip 76.7 kB 76.7 kB
app-route-tu..prod.js gzip 52.3 kB 52.3 kB
app-route.ru...dev.js gzip 76.6 kB 76.6 kB
app-route.ru..prod.js gzip 52.3 kB 52.3 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 43.9 kB 43.9 kB
pages-api-tu..prod.js gzip 33.5 kB 33.5 kB
pages-api.ru...dev.js gzip 43.9 kB 43.9 kB
pages-api.ru..prod.js gzip 33.5 kB 33.5 kB
pages-turbo....dev.js gzip 53.3 kB 53.3 kB
pages-turbo...prod.js gzip 39.1 kB 39.1 kB
pages.runtim...dev.js gzip 53.3 kB 53.3 kB
pages.runtim..prod.js gzip 39.1 kB 39.1 kB
server.runti..prod.js gzip 63 kB 63 kB
Total 3.07 MB 3.07 MB
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/c27d4327df94ac5860532ca8c67c5142776f26fb/next

@lukesandberg lukesandberg force-pushed the racy_snapshot_encoding branch from bc66ee8 to 5f7ce69 Compare April 15, 2026 23:34
@nextjs-bot
Copy link
Copy Markdown
Contributor

nextjs-bot commented Apr 15, 2026

Tests Passed

Comment thread turbopack/crates/turbo-tasks-backend/src/backend/storage.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/storage.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/storage.rs Outdated
@lukesandberg lukesandberg force-pushed the racy_snapshot_encoding branch 4 times, most recently from 06eef17 to dffcc78 Compare April 24, 2026 23:06
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 24, 2026

Failing test suites

Commit: 16f0498 | About building and testing Next.js

pnpm test-start test/e2e/app-dir/app-prefetch/prefetching.test.ts (job)

  • app dir - prefetching > should show layout eagerly when prefetched with loading one level down (DD)
Expand output

● app dir - prefetching › should show layout eagerly when prefetched with loading one level down

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  50 |       }
  51 |
> 52 |       const result = Reflect.apply(target, thisArg, args)
     |                              ^
  53 |       return typeof result === 'function' ? wrapJestTestFn(result) : result
  54 |     },
  55 |     get(target, prop, receiver) {

  at Object.apply (lib/e2e-utils/index.ts:52:30)
  at it (e2e/app-dir/app-prefetch/prefetching.test.ts:28:3)
  at Object.describe (e2e/app-dir/app-prefetch/prefetching.test.ts:11:1)

@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
Cold (Listen) 812ms 810ms
Cold (Ready in log) 790ms 790ms
Cold (First Request) 1.246s 1.241s
Warm (Listen) 811ms 811ms
Warm (Ready in log) 792ms 792ms
Warm (First Request) 610ms 612ms
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change
Cold (Listen) 812ms 811ms
Cold (Ready in log) 790ms 788ms
Cold (First Request) 3.236s 3.209s
Warm (Listen) 811ms 811ms
Warm (Ready in log) 788ms 789ms
Warm (First Request) 3.207s 3.303s

⚡ Production Builds

Metric Canary PR Change
Fresh Build 4.876s 4.901s
Cached Build 4.892s 4.939s
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change
Fresh Build 23.935s 24.109s
Cached Build 23.929s 24.034s
node_modules Size 495 MB 495 MB
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
07rxhp_1_g4mu.js gzip 13.1 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0fli3_wppnim5.js gzip 12.9 kB N/A -
0jaojkrb2rf_l.js gzip 158 B N/A -
0k09jwjeb-tki.js gzip 13.8 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kw8xgqdrilf6.js gzip 8.56 kB N/A -
0ojkk2e654xsc.js gzip 8.59 kB N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
0xy2fhla48_rd.js gzip 9.24 kB N/A -
0zg1_op6gpm77.js gzip 159 B N/A -
10u1wg6830n69.js gzip 155 B N/A -
10wqsvi2mgfmi.js gzip 9.82 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
18y4_8-9or0mn.js gzip 8.51 kB N/A -
1ejk4yy877m2s.js gzip 156 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1gq145j3kps-h.js gzip 8.62 kB N/A -
1nsh-mbn0e-se.js gzip 8.56 kB N/A -
1o8iht4q821x5.js gzip 49.4 kB N/A -
1tsrrp1tdngti.js gzip 13.3 kB N/A -
1wbblhm8kdg1d.js gzip 70.9 kB N/A -
2__-e_ym8n788.js gzip 450 B N/A -
21h2q5l_ijxo1.js gzip 156 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
25ee1c0k3yry7.js gzip 155 B N/A -
25n272-g99oa1.js gzip 7.61 kB N/A -
2jqyc54izxg_5.js gzip 154 B N/A -
2kvj8yrfznmwx.js gzip 5.69 kB N/A -
2m-x8jeelz1qx.js gzip 169 B N/A -
2qv7m7xjnokgr.js gzip 8.58 kB N/A -
2t9oc38of5_ar.js gzip 153 B N/A -
2zf1ecbz94sp-.js gzip 65.5 kB N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
3b0qzjz24jcjn.js gzip 157 B N/A -
3k1k5gtofm6eq.js gzip 10.4 kB N/A -
3m606uqf8ws_m.js gzip 155 B N/A -
3msaeh9eztxfm.js gzip 161 B N/A -
3pgbrgq66slx4.js gzip 155 B N/A -
turbopack-02..a6-3.js gzip 4.19 kB N/A -
turbopack-0b..7ght.js gzip 4.17 kB N/A -
turbopack-19..b8v3.js gzip 4.19 kB N/A -
turbopack-1k..fy7t.js gzip 4.19 kB N/A -
turbopack-1n..nqqb.js gzip 4.2 kB N/A -
turbopack-1z..cxi_.js gzip 4.19 kB N/A -
turbopack-21..uim9.js gzip 4.19 kB N/A -
turbopack-27..jjpo.js gzip 4.19 kB N/A -
turbopack-2m..i5vn.js gzip 4.19 kB N/A -
turbopack-2m..1fe1.js gzip 4.19 kB N/A -
turbopack-2v..1576.js gzip 4.19 kB N/A -
turbopack-33..fmta.js gzip 4.19 kB N/A -
turbopack-3q..h-7b.js gzip 4.19 kB N/A -
turbopack-3u..fo-_.js gzip 4.19 kB N/A -
01ofzfnqdbuen.js gzip N/A 158 B -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0bz-xifewa17d.js gzip N/A 8.63 kB -
0gh_yv8qw4m5-.js gzip N/A 157 B -
0im0h0br03kar.js gzip N/A 156 B -
0tvekitj587fh.js gzip N/A 8.51 kB -
0yvk6-wi8e9wh.js gzip N/A 13.3 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
10y3h86mnhs_2.js gzip N/A 10.4 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
15sb1-dsqfk_j.js gzip N/A 8.59 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1cz0kmzuvr895.js gzip N/A 70.9 kB -
1tu25qtsmfhar.js gzip N/A 9.82 kB -
1vein_gnv3mwr.js gzip N/A 8.56 kB -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
1z3g0uaqtv9_3.js gzip N/A 8.56 kB -
25a1yz7zua29z.js gzip N/A 13.8 kB -
2auzvn7t9xf96.js gzip N/A 65.5 kB -
2bi5hx402juv-.js gzip N/A 8.58 kB -
2fiqb4-ar30kx.js gzip N/A 49.4 kB -
2fuln2dxq8d_0.js gzip N/A 154 B -
2hy56297fog9u.js gzip N/A 8.52 kB -
2qd9d0wg7yxwc.js gzip N/A 158 B -
2u_rpxq3tzytl.js gzip N/A 233 B -
2wr55o64ssudv.js gzip N/A 161 B -
2yy2v4vukl6e0.js gzip N/A 161 B -
35-eg4zotgxro.js gzip N/A 157 B -
35nh2lh_i5pyh.js gzip N/A 7.61 kB -
368lim5wq0o0r.js gzip N/A 12.9 kB -
3drqjohogojbw.js gzip N/A 5.69 kB -
3g8l1m2-o-ewi.js gzip N/A 13.1 kB -
3ixmpqnyxmqfs.js gzip N/A 170 B -
3k0wlheipb1ej.js gzip N/A 159 B -
3km28rtkbqo-g.js gzip N/A 158 B -
3n9xy43ds2l11.js gzip N/A 159 B -
3tfgis6xa1unl.js gzip N/A 158 B -
3wpp8nvyoj121.js gzip N/A 9.24 kB -
turbopack-0-..xakf.js gzip N/A 4.19 kB -
turbopack-09..ikej.js gzip N/A 4.19 kB -
turbopack-0j..nybk.js gzip N/A 4.19 kB -
turbopack-0o..1pwm.js gzip N/A 4.21 kB -
turbopack-1m..wh9e.js gzip N/A 4.17 kB -
turbopack-1r..xsvl.js gzip N/A 4.19 kB -
turbopack-1t..xctc.js gzip N/A 4.19 kB -
turbopack-28..ffdj.js gzip N/A 4.19 kB -
turbopack-2k..ao0y.js gzip N/A 4.19 kB -
turbopack-2o..i1c7.js gzip N/A 4.19 kB -
turbopack-2o..wsn2.js gzip N/A 4.19 kB -
turbopack-2t..clq6.js gzip N/A 4.19 kB -
turbopack-35..-wtq.js gzip N/A 4.19 kB -
turbopack-3w..fwa0.js gzip N/A 4.19 kB -
Total 465 kB 465 kB ⚠️ +90 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 721 B 719 B
Total 721 B 719 B ✅ -2 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 435 B 433 B
Total 435 B 433 B ✅ -2 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.63 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.3 kB N/A -
8817-HASH.js gzip 5.59 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 254 B 255 B
main-HASH.js gzip 39.4 kB 39.3 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.61 kB -
6522-HASH.js gzip N/A 60.6 kB -
6779-HASH.js gzip N/A 4.63 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 235 kB 235 kB ✅ -619 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 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.52 kB 2.52 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.99 kB 7.98 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 274 kB 273 kB
Total 400 kB 399 kB ✅ -681 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 616 B 615 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44.2 kB 44.3 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.9 kB 45.9 kB ⚠️ +85 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 722 B 719 B
Total 722 B 719 B ✅ -3 B
Build Cache
Canary PR Change
0.pack gzip 4.39 MB 4.39 MB
index.pack gzip 114 kB 112 kB 🟢 1.62 kB (-1%)
index.pack.old gzip 115 kB 114 kB
Total 4.62 MB 4.61 MB ✅ -4.24 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 348 kB 348 kB
app-page-exp..prod.js gzip 193 kB 193 kB
app-page-tur...dev.js gzip 347 kB 347 kB
app-page-tur..prod.js gzip 193 kB 193 kB
app-page-tur...dev.js gzip 344 kB 344 kB
app-page-tur..prod.js gzip 191 kB 191 kB
app-page.run...dev.js gzip 344 kB 344 kB
app-page.run..prod.js gzip 191 kB 191 kB
app-route-ex...dev.js gzip 77.3 kB 77.3 kB
app-route-ex..prod.js gzip 52.7 kB 52.7 kB
app-route-tu...dev.js gzip 77.3 kB 77.3 kB
app-route-tu..prod.js gzip 52.8 kB 52.8 kB
app-route-tu...dev.js gzip 76.9 kB 76.9 kB
app-route-tu..prod.js gzip 52.5 kB 52.5 kB
app-route.ru...dev.js gzip 76.9 kB 76.9 kB
app-route.ru..prod.js gzip 52.5 kB 52.5 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.2 kB 44.2 kB
pages-api-tu..prod.js gzip 33.6 kB 33.6 kB
pages-api.ru...dev.js gzip 44.2 kB 44.2 kB
pages-api.ru..prod.js gzip 33.6 kB 33.6 kB
pages-turbo....dev.js gzip 53.5 kB 53.5 kB
pages-turbo...prod.js gzip 39.3 kB 39.3 kB
pages.runtim...dev.js gzip 53.5 kB 53.5 kB
pages.runtim..prod.js gzip 39.3 kB 39.3 kB
server.runti..prod.js gzip 63.1 kB 63.1 kB
Total 3.07 MB 3.07 MB
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/dffcc78e6ffa5553fb350d3e5a7b02e2ef37b61f/next

Commit: dffcc78

Comment thread turbopack/crates/turbo-tasks-backend/src/backend/storage.rs Outdated
@lukesandberg lukesandberg force-pushed the racy_snapshot_encoding branch from dffcc78 to 16f0498 Compare April 28, 2026 23:36
Copy link
Copy Markdown
Contributor Author

Merge activity

  • Apr 28, 11:49 PM UTC: Graphite couldn't merge this PR because it failed for an unknown reason (unsigned commits detected).

@lukesandberg lukesandberg merged commit 00a671b into canary Apr 29, 2026
332 of 337 checks passed
@lukesandberg lukesandberg deleted the racy_snapshot_encoding branch April 29, 2026 15:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants