vercel / turborepo

Build system optimized for JavaScript and TypeScript, written in Rust
https://turbo.build/repo/docs
MIT License
26.06k stars 1.8k forks source link

Cached files differ from original command execution's output files #7410

Closed trappar closed 6 months ago

trappar commented 7 months ago

Verify canary release

Link to code that reproduces this issue

https://github.com/trappar/turbo-cache-missing-output-files

What package manager are you using / does the bug impact?

pnpm

What operating system are you using?

Mac

Which canary version will you have in your reproduction?

1.12.4

Describe the Bug

When building my app with turbo, I have it configured to cache the .next directory. I noticed that if I build, then delete the .next directory, then recover it from my turbo cache - the resulting files differ from the original files I had after building.

Expected Behavior

The files cached by turbo cache should precisely match the original output files.

To Reproduce

The reproduction repo I linked has a reproduce-issue.sh script that you can run to see the issue. Since this is a minimal reproduction repo, the number of divergent files between the fresh and cached copies are minimal. In a large enterprise monorepo I work on, the number of files not being copied is massive and is causing our servers to error/crash when we try to run a build which was recalled from the turbo cache.

Just for context, here's all that I'm doing in that script:

pnpm turbo build --force
mv .next output/force-build

pnpm turbo build
mv .next output/cache-hit-build

diff --brief --recursive output/force-build output/cache-hit-build

And this is producing the following list of file differences:

Only in output/cache-hit-build/standalone/node_modules/.pnpm/@swc+helpers@0.5.2/node_modules/@swc/helpers/_: _interop_require_
Only in output/cache-hit-build/standalone/node_modules/.pnpm/caniuse-lite@1.0.30001587/node_modules/caniuse-lite/data: feature
Only in output/cache-hit-build/standalone/node_modules/.pnpm/caniuse-lite@1.0.30001587/node_modules/caniuse-lite/dist: unpacke
Only in output/cache-hit-build/standalone/node_modules/.pnpm/next@14.1.0_react-dom@18.2.0_react@18.2.0/node_modules/@swc/helpers/_: _interop_require_
Only in output/cache-hit-build/standalone/node_modules/.pnpm/next@14.1.0_react-dom@18.2.0_react@18.2.0/node_modules/caniuse-lite/data: feature
Only in output/cache-hit-build/standalone/node_modules/.pnpm/next@14.1.0_react-dom@18.2.0_react@18.2.0/node_modules/caniuse-lite/dist: unpacke

Note: strangely in the real project the original build contains files which are then missing from the cache-hit version. Here it's the opposite? This makes no sense to me.

Additional context

The only context where I've seen this happen is a Next.js app using the "standalone" output mode. I suspect this is because the directory I'm trying to cache has long file paths and complex/internal links. It's possible that this could be distilled down even further into a reproduction that simply creates a directory structure like what Next.js creates, but this is probably the best repo since it's a fairly common application configuration.

I know this issue can be reproduced on Ubuntu and on Mac since I'm seeing these kinds of failures in CI, and I've reproduced it locally in that reproduction repo. I'm curious if this bug will happen on all OSes (windows?)

TURBO-2414

trappar commented 7 months ago

I've been digging at this trying to replicate the issue without using a next build and have come up with nothing helpful, but in the process I found something very interesting...

Simply manually unarchiving the files from the turbo cache .tar.zst file yields an identical match to the original output files. This works in my reproduction repo and my big complicated monorepo project.

The command I'm using to unarchive the files is: tar --use-compress-program=unzstd -xvf xxx.tar.zst

This manually unarchived version also works perfectly. No server errors like when I try to run a server based on the files restored from turbo's cache.

So this tells me that the issue is probably one or both of:

  1. Turbo is doing something post-unarchive to the files.
  2. This bug is within whatever Turbo is using to unarchive the files.

Just quickly looking at the code I feel like topologically_restore_symlinks stands out as a potential source for this bug, so I tried augmenting the next build like so:

"build": "next build && cp -RL .next .next-deref && rm -rf .next && mv .next-deref .next"

The idea being that by copying the files and following symlinks, the resulting build would be devoid of both hard links (due to copying the files) and symlinks (due to the -L option).

The results here at least partially confirm my hunch. Before making this change in my big monorepo project the diff showed both:

After making this change to copy the files and dereference links, all the files which were present in the original but not in the cached version were fixed and the diff now only shows loads of files which are only present in the cached version.

I was hoping that this would at least get things working again (and could maybe be a temporary workaround), however, doing the file copying seems to screw up the next build. Trying to run the server using the copied/dereferenced version using either the original files or the turbo cached version errors out with:

node:internal/modules/cjs/loader:1147
  throw err;
  ^

Error: Cannot find module 'styled-jsx/package.json'
Require stack:
- /app/apps/[redacted]/node_modules/next/dist/server/require-hook.js
- /app/apps/[redacted]/node_modules/next/dist/server/next.js
- /app/apps/[redacted]/server.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
    at resolve (node:internal/modules/helpers:187:19)
    at Object.<anonymous> (/app/apps/[redacted]/node_modules/next/dist/server/require-hook.js:38:32)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (/app/apps/[redacted]/node_modules/next/dist/server/next.js:25:1) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/app/apps/[redacted]/node_modules/next/dist/server/require-hook.js',
    '/app/apps/[redacted]/node_modules/next/dist/server/next.js',
    '/app/apps/[redacted]/server.js'
  ]
}

So to summarize, this issue is almost certainly due to how Turbo unarchives its caches and handles the output files. I'm still trying to find the precise file/directory conditions which cause these issues.

trappar commented 7 months ago

Just went through tested turbo versions to see if there was a point in the past where this issue didn't exist and then where it appeared. Here's a timeline of what I found:

I looked through the 1.11.0 changes and this one stuck out to me: https://github.com/vercel/turbo/pull/6662

I tried downgrading my monorepo project to 1.10.16. On that version everything is working perfectly and the diff shows an exact match between the original and cached versions of my .next directory.

arlyon commented 7 months ago

Thanks for the exceptionally detailed write-up! I am going to work through some of this and see if I can identify a fix.

arlyon commented 7 months ago

Hey, had a look at the code directly and diff you identified and tried to write some tests but can't trigger the behaviour. Your repro-repo is private I think (I am getting a 404). Mind flipping it to public?

trappar commented 7 months ago

D'oh... yeah that was a mistake. It's public now.

trappar commented 6 months ago

Any update? Have you been able to reproduce the issue in the repo?

bmelonis commented 6 months ago

Possibly related to https://github.com/vercel/turbo/issues/6823. See if you can replicate the error message from that issue on Turbo 1.11.

chris-olszewski commented 6 months ago

@trappar Again, thanks for the reproduction and detailed write up. It made finding the issue a lot easier.

https://github.com/vercel/turbo/pull/7628 should fix this.

trappar commented 6 months ago

Awesome!! Is there a way I can install that PR's version locally in my big monorepo project so I can do a more thorough test? Is there a snapshot version or something I can use?

chris-olszewski commented 6 months ago

can install that PR's version locally

You can checkout that PR and cargo build -p turbo and then use that binary with --skip-infer to test, but that requires getting a dev environment setup.

I'm cutting a canary you can use in your project by just changing the turbo version. Once this workflow finishes you can use 1.12.5-canary.1 which will have that PR in it.

trappar commented 6 months ago

Just ran my tests against my monorepo project and I can confirm that this fixed part of the issue - the part that showed up in my repro repo, but this doesn't actually fix the bulk of the problems.

Would you like me to open a new issue?

I'm honestly not sure if I'll be able to make a repro of the issues I'm seeing, but here's the diff which I assembled using a similar script to the one from my repro repo:

Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: serialize
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: use-insertion-effect-with-fallbacks
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: utils
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: weak-memoize
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules: hoist-non-react-statics
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+styled@11.11.0_@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: use-insertion-effect-with-fallbacks
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+styled@11.11.0_@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: utils
Only in output/force-build/standalone/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.3.0/node_modules/@formatjs: icu-skeleton-parser
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+dialog@3.5.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: focus
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+dialog@3.5.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: overlays
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+dialog@3.5.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: interactions
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@swc: helpers
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules: clsx
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+i18n@3.7.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: ssr
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+interactions@3.14.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: ssr
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: visually-hidden
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+utils@3.15.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-stately: utils
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+utils@3.15.0_react@18.3.0-canary-627b7abd6-20230911/node_modules: clsx
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules/@rollup: pluginutils
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: commondir
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: estree-walker
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: glob
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: is-reference
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+pluginutils@5.0.4_rollup@2.78.0/node_modules: estree-walker
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules/@sentry: node
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules/@sentry: utils
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: chalk
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: next
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: resolve
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: rollup
Only in output/force-build/standalone/node_modules/.pnpm/@webassemblyjs+ast@1.11.6/node_modules/@webassemblyjs: helper-numbers
Only in output/force-build/standalone/node_modules/.pnpm/@webassemblyjs+wasm-edit@1.11.6/node_modules/@webassemblyjs: wasm-gen
Only in output/force-build/standalone/node_modules/.pnpm/@webassemblyjs+wasm-edit@1.11.6/node_modules/@webassemblyjs: wasm-opt
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: postcss
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react-dom
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: styled-jsx
diff: output/force-build/standalone/node_modules/.pnpm/node_modules/caniuse-lite: No such file or directory
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-dom
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-slick
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-toggle-button
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-transition-group
Only in output/force-build/standalone/node_modules/.pnpm/react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/force-build/standalone/node_modules/.pnpm/react-slick@0.29.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
chris-olszewski commented 6 months ago

Interesting. Are those diffs a regression compared to the previous canary or are those files missing in the cache hit on both 1.12.5-canary.0 and 1.12.5-canary.1? I'll reopen this issue to keep discussion in one place.

Are the files missing from the cache hit all just regular files?

trappar commented 6 months ago

As far as I can tell those diffs are a subset of the diffs that I originally saw when testing 1.12.4. I'll downgrade to 1.12.5-canary.0 and try rerunning. Will update this comment once I have those results.

I think there are two distinct bugs causing these issues. The patterns I saw seemed to be something like:

  1. Files/directories (maybe just one or the other though) that were in the original build were missing in cache restored version
  2. Cache restored version contained directories that didn't exist in the original version. I think these were the only cases that was able to reproduce in that minimal repo, and I think you fixed this issue.

Update:

Here's the diff output on 1.12.5-canary.0:

Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper: components-sha
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/core: breakpoin
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/core: check-ove
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/core: grab-curs
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/core/modules: o
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/core/modules: r
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/core: transitio
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: autopl
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: contro
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: effect
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: free-m
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: hash-n
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: histor
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: keyboa
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: manipu
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: mousew
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: naviga
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: pagina
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: parall
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: scroll
Only in output/cache-hit-build/standalone/apps/[redacted]/node_modules/swiper/modules: virtua
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@axe-core+react@4.6.0/node_modules/@axe-core: re
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@babel+runtime@7.23.2/node_modules/@babel: runti
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@babel+runtime@7.23.8/node_modules/@babel: runti
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @contentful+rich-text-react-renderer@15.16.3_re
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@datadog+browser-core@4.42.2/node_modules: @data
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@datadog+browser-rum-core@4.42.2/node_modules: @
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@datadog+browser-rum@4.42.2/node_modules: @datad
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@emotion+cache@11.11.0/node_modules/@emotion: ca
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@emotion+is-prop-valid@1.2.1/node_modules: @emot
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@emotion+memoize@0.8.1/node_modules/@emotion: me
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @emotion+react@11.11.1_@types+react@18.2.51_rea
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: serialize
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: use-insertion-effect-with-fallbacks
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: utils
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: weak-memoize
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules: hoist-non-react-statics
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@emotion+sheet@1.2.2/node_modules/@emotion: shee
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @emotion+styled@11.11.0_@emotion+react@11.11.1_
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+styled@11.11.0_@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: use-insertion-effect-with-fallbacks
Only in output/force-build/standalone/node_modules/.pnpm/@emotion+styled@11.11.0_@emotion+react@11.11.1_@types+react@18.2.51_react@18.3.0-canary-627b7abd6-20230911/node_modules/@emotion: utils
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@emotion+unitless@0.8.1/node_modules/@emotion: u
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @emotion+use-insertion-effect-with-fallbacks@1.
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@emotion+utils@1.2.1/node_modules/@emotion: util
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@emotion+weak-memoize@0.3.1/node_modules: @emoti
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@esbuild+darwin-arm64@0.17.19/node_modules: @esb
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@formatjs+fast-memoize@2.0.1/node_modules: @form
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.3.0: node_m
Only in output/force-build/standalone/node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.3.0/node_modules/@formatjs: icu-skeleton-parser
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.3.18: node_modul
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@internationalized+date@3.1.0/node_modules: @int
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@internationalized+date@3.1.0/node_modules/@swc/helpers: l
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@internationalized+message@3.1.0/node_modules: @
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@internationalized+number@3.2.0/node_modules: @i
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@internationalized+string@3.1.0/node_modules: @i
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@jridgewell+resolve-uri@3.1.1/node_modules: @jri
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@jridgewell+source-map@0.3.5/node_modules: @jrid
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@jridgewell+trace-mapping@0.3.19/node_modules: @
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@opentelemetry+api@1.6.0/node_modules: @opentele
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+dialog@3.5.0_react-dom@18.3.0-canar
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+dialog@3.5.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: focus
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+dialog@3.5.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: overlays
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+dialog@3.5.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+focus@3.11.0_react@18.3.0-canary-62
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: interactions
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules: @swc
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+focus@3.11.0_react@18.3.0-canary-627b7abd6-20230911/node_modules: clsx
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+i18n@3.7.0_react@18.3.0-canary-627b
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+i18n@3.7.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: ssr
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+interactions@3.14.0_react@18.3.0-ca
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+interactions@3.14.0_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+overlays@3.13.0_react-dom@18.3.0-ca
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: ssr
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: utils
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@react-aria: visually-hidden
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+overlays@3.13.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+ssr@3.5.0_react@18.3.0-canary-627b7
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+utils@3.15.0_react@18.3.0-canary-62
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+utils@3.15.0_react@18.3.0-canary-627b7abd6-20230911/node_modules: @react-stately
Only in output/force-build/standalone/node_modules/.pnpm/@react-aria+utils@3.15.0_react@18.3.0-canary-627b7abd6-20230911/node_modules: clsx
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-aria+visually-hidden@3.7.0_react@18.3.0-
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @react-stately+utils@3.6.0_react@18.3.0-canary-
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0: no
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules/@rollup: pluginutils
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: commondir
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: estree-walker
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: glob
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules: is-reference
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@rollup+plugin-commonjs@24.0.0_rollup@2.78.0/node_modules/magic-string: d
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@rollup+pluginutils@5.0.4_rollup@2.78.0: node_mo
Only in output/force-build/standalone/node_modules/.pnpm/@rollup+pluginutils@5.0.4_rollup@2.78.0/node_modules: estree-walker
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+core@7.86.0/node_modules/@sentry/core: c
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+integrations@7.86.0/node_modules: @sentr
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+integrations@7.86.0/node_modules/@sentry/core: c
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+integrations@7.86.0/node_modules/localforage: dis
Only in output/cache-hit-build/standalone/node_modules/.pnpm: @sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules/@sentry/core: c
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules/@sentry: node
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules/@sentry: utils
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: chalk
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: next
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: resolve
Only in output/force-build/standalone/node_modules/.pnpm/@sentry+nextjs@7.86.0_next@14.0.3_react@18.3.0-canary-627b7abd6-20230911_webpack@5.89.0/node_modules: rollup
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+node@7.86.0/node_modules/@sentry/core: c
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+node@7.86.0/node_modules/@sentry/node: c
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry+node@7.86.0/node_modules: @sentry-intern
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry-internal+tracing@7.86.0/node_modules: @s
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@sentry-internal+tracing@7.86.0/node_modules/@sentry/core: c
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@swc+helpers@0.4.14/node_modules/@swc/helpers: l
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@swc+helpers@0.5.2/node_modules/@swc/helpers: cj
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+ast@1.11.6/node_modules: @webasse
Only in output/force-build/standalone/node_modules/.pnpm/@webassemblyjs+ast@1.11.6/node_modules/@webassemblyjs: helper-numbers
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+helper-api-error@1.11.6: node_mod
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+helper-buffer@1.11.6: node_module
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+helper-numbers@1.11.6: node_modul
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+helper-wasm-bytecode@1.11.6: node
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+helper-wasm-section@1.11.6: node_
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+ieee754@1.11.6/node_modules: @web
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+ieee754@1.11.6/node_modules: @xtu
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+leb128@1.11.6/node_modules: @weba
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+utf8@1.11.6/node_modules: @webass
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+wasm-edit@1.11.6/node_modules: @w
Only in output/force-build/standalone/node_modules/.pnpm/@webassemblyjs+wasm-edit@1.11.6/node_modules/@webassemblyjs: wasm-gen
Only in output/force-build/standalone/node_modules/.pnpm/@webassemblyjs+wasm-edit@1.11.6/node_modules/@webassemblyjs: wasm-opt
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+wasm-gen@1.11.6/node_modules: @we
Only in output/cache-hit-build/standalone/node_modules/.pnpm/@webassemblyjs+wasm-opt@1.11.6/node_modules: @we
Only in output/cache-hit-build/standalone/node_modules/.pnpm/acorn-import-assertions@1.9.0_acorn@8.10.0: node
Only in output/cache-hit-build/standalone/node_modules/.pnpm/agent-base@6.0.2/node_modules/agent-base/dist: s
Only in output/cache-hit-build/standalone/node_modules/.pnpm/ajv-keywords@3.5.2_ajv@6.12.6/node_modules: ajv-
Only in output/cache-hit-build/standalone/node_modules/.pnpm/balanced-match@1.0.2/node_modules: balanced-matc
Only in output/cache-hit-build/standalone/node_modules/.pnpm/brace-expansion@2.0.1/node_modules: brace-expans
Only in output/cache-hit-build/standalone/node_modules/.pnpm/busboy@1.6.0/node_modules/streamsearch: li
Only in output/cache-hit-build/standalone/node_modules/.pnpm/caniuse-lite@1.0.30001585/node_modules: caniuse-
Only in output/cache-hit-build/standalone/node_modules/.pnpm/chrome-trace-event@1.0.3/node_modules: chrome-tr
Only in output/cache-hit-build/standalone/node_modules/.pnpm/dom-helpers@5.2.1/node_modules/dom-helpers: addC
Only in output/cache-hit-build/standalone/node_modules/.pnpm/dom-helpers@5.2.1/node_modules/dom-helpers: remo
Only in output/cache-hit-build/standalone/node_modules/.pnpm/electron-to-chromium@1.4.510/node_modules: elect
Only in output/cache-hit-build/standalone/node_modules/.pnpm/enhanced-resolve@5.15.0/node_modules: enhanced-r
Only in output/cache-hit-build/standalone/node_modules/.pnpm/es-module-lexer@1.3.0/node_modules: es-module-le
Only in output/cache-hit-build/standalone/node_modules/.pnpm/eslint-scope@5.1.1/node_modules/eslint-scope: li
Only in output/cache-hit-build/standalone/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules: fast-deep-eq
Only in output/cache-hit-build/standalone/node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules: f
Only in output/cache-hit-build/standalone/node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules: glob-to-regex
Only in output/cache-hit-build/standalone/node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules: hois
Only in output/cache-hit-build/standalone/node_modules/.pnpm/https-proxy-agent@5.0.1/node_modules/agent-base/dist: s
Only in output/cache-hit-build/standalone/node_modules/.pnpm/https-proxy-agent@5.0.1/node_modules: https-prox
Only in output/cache-hit-build/standalone/node_modules/.pnpm/intl-messageformat@10.3.3/node_modules: @formatj
Only in output/cache-hit-build/standalone/node_modules/.pnpm/intl-messageformat@10.3.3/node_modules: intl-mes
Only in output/cache-hit-build/standalone/node_modules/.pnpm/is-core-module@2.13.0/node_modules: is-core-modu
Only in output/cache-hit-build/standalone/node_modules/.pnpm/is-reference@1.2.1/node_modules/is-reference: di
Only in output/cache-hit-build/standalone/node_modules/.pnpm/jest-worker@27.5.1/node_modules/jest-worker: bui
Only in output/cache-hit-build/standalone/node_modules/.pnpm: jotai@2.2.1_react@18.3.0-canary-627b7abd6-20230
Only in output/cache-hit-build/standalone/node_modules/.pnpm/json-parse-even-better-errors@2.3.1: node_module
Only in output/cache-hit-build/standalone/node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules: json-sc
Only in output/cache-hit-build/standalone/node_modules/.pnpm/launchdarkly-js-client-sdk@3.1.4/node_modules: l
Only in output/cache-hit-build/standalone/node_modules/.pnpm/localforage@1.10.0/node_modules/localforage: dis
Only in output/cache-hit-build/standalone/node_modules/.pnpm/lodash.debounce@4.0.8/node_modules: lodash.debou
Only in output/cache-hit-build/standalone/node_modules/.pnpm/lodash.throttle@4.1.1/node_modules: lodash.throt
Only in output/cache-hit-build/standalone/node_modules/.pnpm/lodash.uniqueid@4.0.1/node_modules: lodash.uniqu
Only in output/cache-hit-build/standalone/node_modules/.pnpm/magic-string@0.27.0/node_modules/magic-string: d
Only in output/cache-hit-build/standalone/node_modules/.pnpm: next@14.0.3_@opentelemetry+api@1.6.0_react-dom@
Only in output/cache-hit-build/standalone/node_modules/.pnpm/next@14.0.3_@opentelemetry+api@1.6.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@swc/helpers: cj
Only in output/cache-hit-build/standalone/node_modules/.pnpm: next@14.0.3_react-dom@18.3.0-canary-627b7abd6-2
Only in output/cache-hit-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/@swc/helpers: cj
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: postcss
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react-dom
Only in output/force-build/standalone/node_modules/.pnpm/next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: styled-jsx
diff: output/force-build/standalone/node_modules/.pnpm/node_modules/caniuse-lite: No such file or directory
Only in output/cache-hit-build/standalone/node_modules/.pnpm/node_modules/sharp/vendor/8.13.3: d
Only in output/cache-hit-build/standalone/node_modules/.pnpm: [redacted]@30.1.4_@emotion+react@11.11.1_@emot
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-dom
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-slick
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-toggle-button
Only in output/force-build/standalone/node_modules/.pnpm/[redacted]@30.1.4_@emotion+react@11.11.1_@emotion+styled@11.11.0_react-dom@18.3.0-canary-627_vcflnxxyig2c6kyanflnydo4p4/node_modules: react-transition-group
Only in output/cache-hit-build/standalone/node_modules/.pnpm: react-dom@18.3.0-canary-627b7abd6-20230911_reac
Only in output/force-build/standalone/node_modules/.pnpm/react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/cache-hit-build/standalone/node_modules/.pnpm: react-intersection-observer@9.4.3_react@18.3.0-
Only in output/cache-hit-build/standalone/node_modules/.pnpm: react-slick@0.29.0_react-dom@18.3.0-canary-627b
Only in output/force-build/standalone/node_modules/.pnpm/react-slick@0.29.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/cache-hit-build/standalone/node_modules/.pnpm: react-toggle-button@2.2.0_react@18.3.0-canary-6
Only in output/cache-hit-build/standalone/node_modules/.pnpm: react-transition-group@4.4.5_react-dom@18.3.0-c
Only in output/cache-hit-build/standalone/node_modules/.pnpm/react-transition-group@4.4.5_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/dom-helpers: addC
Only in output/cache-hit-build/standalone/node_modules/.pnpm/react-transition-group@4.4.5_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/dom-helpers: remo
Only in output/cache-hit-build/standalone/node_modules/.pnpm/react@18.3.0-canary-627b7abd6-20230911: node_mod
Only in output/cache-hit-build/standalone/node_modules/.pnpm/requestidlecallback@0.3.0/node_modules: requesti
Only in output/cache-hit-build/standalone/node_modules/.pnpm/resize-observer-polyfill@1.5.1/node_modules: res
Only in output/cache-hit-build/standalone/node_modules/.pnpm/scheduler@0.24.0-canary-627b7abd6-20230911: node
Only in output/cache-hit-build/standalone/node_modules/.pnpm/schema-utils@3.3.0/node_modules/schema-utils: di
Only in output/cache-hit-build/standalone/node_modules/.pnpm/serialize-javascript@6.0.1/node_modules: seriali
Only in output/cache-hit-build/standalone/node_modules/.pnpm/sharp@0.31.3/node_modules/sharp/vendor/8.13.3: d
Only in output/cache-hit-build/standalone/node_modules/.pnpm/simple-swizzle@0.2.2/node_modules: simple-swizzl
Only in output/cache-hit-build/standalone/node_modules/.pnpm/stacktrace-parser@0.1.10/node_modules: stacktrac
Only in output/cache-hit-build/standalone/node_modules/.pnpm/streamsearch@1.1.0/node_modules/streamsearch: li
Only in output/cache-hit-build/standalone/node_modules/.pnpm/string-convert@0.2.1/node_modules: string-conver
Only in output/cache-hit-build/standalone/node_modules/.pnpm: styled-jsx@5.1.1_react@18.3.0-canary-627b7abd6-
Only in output/cache-hit-build/standalone/node_modules/.pnpm/supports-color@7.2.0/node_modules: supports-colo
Only in output/cache-hit-build/standalone/node_modules/.pnpm/supports-color@8.1.1/node_modules: supports-colo
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper: components-sha
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/core: breakpoin
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/core: check-ove
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/core: grab-curs
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/core/modules: o
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/core/modules: r
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/core: transitio
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: autopl
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: contro
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: effect
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: free-m
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: hash-n
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: histor
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: keyboa
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: manipu
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: mousew
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: naviga
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: pagina
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: parall
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: scroll
Only in output/cache-hit-build/standalone/node_modules/.pnpm/swiper@9.2.3/node_modules/swiper/modules: virtua
Only in output/cache-hit-build/standalone/node_modules/.pnpm: terser-webpack-plugin@5.3.9_@swc+core@1.3.83_es
Only in output/cache-hit-build/standalone/node_modules/.pnpm/terser-webpack-plugin@5.3.9_@swc+core@1.3.83_esbuild@0.17.19_webpack@5.89.0/node_modules/jest-worker: bui
Only in output/cache-hit-build/standalone/node_modules/.pnpm/terser-webpack-plugin@5.3.9_@swc+core@1.3.83_esbuild@0.17.19_webpack@5.89.0/node_modules/schema-utils: di
Only in output/cache-hit-build/standalone/node_modules/.pnpm/webpack-sources@3.2.3/node_modules: webpack-sour
Only in output/cache-hit-build/standalone/node_modules/.pnpm/webpack@5.89.0_@swc+core@1.3.83_esbuild@0.17.19/node_modules/eslint-scope: li
Only in output/cache-hit-build/standalone/node_modules/.pnpm/webpack@5.89.0_@swc+core@1.3.83_esbuild@0.17.19/node_modules/schema-utils: di

Yeesh, that's long. LMK if you want me to remove it at some point to keep this manageable.

Diffing the two diff outputs shows me that it looks like all the "Only in output/cache-hit-build" lines go away with canary.1. I think the other minimal changes are just down to some strangeness about diff's output. This would seem to support the idea that you've fixed one of the two bugs responsible for this issue.

trappar commented 6 months ago

I was able to update dependencies in the repro repo in such a way that I think it's now reproducing the whole problem, not just that one part of it!

I'm now getting the following output from the reproduce-issue.sh script:

Diffing the original force-build's .next directory with the cache-hit-build's .next directory
Only in output/force-build/standalone/node_modules/.pnpm/next@14.1.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: postcss
Only in output/force-build/standalone/node_modules/.pnpm/next@14.1.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react
Only in output/force-build/standalone/node_modules/.pnpm/next@14.1.0_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react-dom
Only in output/force-build/standalone/node_modules/.pnpm/react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules: react

Note that I also updated to the canary.1 version which explains why the prior output is gone, but if I downgrade to 1.12.4 I get a mix of these two issues just like in my monorepo project.

Sorry I didn't manage to capture that part of it before!

chris-olszewski commented 6 months ago

No worries, thanks for updating the repro.

I believe https://github.com/vercel/turbo/pull/7633 should fix the remaining diff issues.

trappar commented 6 months ago

Thanks! Let me know when there's a new canary version I can test against.

chris-olszewski commented 6 months ago

1.12.5-canary.2 is out and has the additional fixes for symlinks! Keeping open in case you find some additional issues with your primary project.

trappar commented 6 months ago

That seems to have done it! As of this version I'm once again able to run my server based purely on a cache-restored build without issue! 🎉

For full transparency, I am still seeing one line in the diff output:

diff: output/force-build/standalone/node_modules/.pnpm/node_modules/caniuse-lite: No such file or directory

But I'm fairly confident that issue has nothing to do with Turbo. I tried downgrading to 1.10.16 and I get the same output. I went looking for that file and I think the problem is that it's a broken symlink:

% pwd
/Users/trappar/[redacted]/.next/standalone/node_modules/.pnpm/node_modules
% ls -al
total 0
drwxr-xr-x   10 trappar  staff   320 Mar  5 17:14 .
drwxr-xr-x  204 trappar  staff  6528 Mar  5 17:14 ..
drwxr-xr-x    3 trappar  staff    96 Mar  5 17:14 @opentelemetry
lrwxr-xr-x    1 trappar  staff    54 Mar  5 17:14 caniuse-lite -> ../caniuse-lite@1.0.30001528/node_modules/caniuse-lite
lrwxr-xr-x    1 trappar  staff   114 Mar  5 17:14 next -> ../next@14.0.3_react-dom@18.3.0-canary-627b7abd6-20230911_react@18.3.0-canary-627b7abd6-20230911/node_modules/next
lrwxr-xr-x    1 trappar  staff    60 Mar  5 17:14 react -> ../react@18.3.0-canary-627b7abd6-20230911/node_modules/react
lrwxr-xr-x    1 trappar  staff    34 Mar  5 17:14 sharp -> ../sharp@0.31.3/node_modules/sharp
lrwxr-xr-x    1 trappar  staff    51 Mar  5 17:14 supports-color -> ../supports-color@7.2.0/node_modules/supports-color
lrwxr-xr-x    1 trappar  staff    42 Mar  5 17:14 uglify-js -> ../uglify-js@3.17.4/node_modules/uglify-js
lrwxr-xr-x    1 trappar  staff    71 Mar  5 17:14 webpack -> ../webpack@5.89.0_@swc+core@1.3.83_esbuild@0.17.19/node_modules/webpack
% ls -al .. | grep caniuse
drwxr-xr-x    3 trappar  staff    96 Mar  5 17:14 caniuse-lite@1.0.30001585

Notice that the link points at caniuse-lite@1.0.30001528 but the version I have locally is caniuse-lite@1.0.30001585. (different numbers)

In the cache restored version the symlink still exists, so I think Turbo is working perfectly and diff is just complaining since it isn't able to find the file. Maybe this is a PNPM or Next.js bug? Either way it's not causing any issues so I'd say this is fixed! Feel free to close!

chris-olszewski commented 6 months ago

For full transparency, I am still seeing one line in the diff output

Ah, we intentionally don't restore broken symlinks, but I think that's acceptable? If we run into a tool that depends on broken symlinks existing we can reconsider that decision.

Again, thanks for the great reproduction/write up/testing of the fixes!