Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
1 task done
trappar opened this issue Feb 17, 2024 · 19 comments · Fixed by #7628
Closed
1 task done

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

trappar opened this issue Feb 17, 2024 · 19 comments · Fixed by #7628
Assignees
Labels
kind: bug Something isn't working linear: turbo Issues to sync to Linear for Turborepo team needs: triage New issues get this label. Remove it after triage owned-by: turborepo

Comments

@trappar
Copy link

trappar commented Feb 17, 2024

Verify canary release

  • I verified that the issue exists in the latest Turborepo 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 trappar added kind: bug Something isn't working needs: triage New issues get this label. Remove it after triage owned-by: turborepo labels Feb 17, 2024
@trappar trappar changed the title Cached output files don't include all original output files Cached files differ from original command execution's output files Feb 17, 2024
@trappar
Copy link
Author

trappar commented Feb 18, 2024

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:

  • Files present in the original version which aren't in the cache restored version
  • Files present in the cached restored version which aren't in the original version

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
Copy link
Author

trappar commented Feb 18, 2024

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:

  • 1.10.16: Cache matches original files exactly.
  • 1.11.0 - 1.11.2: Couldn't test due error "Error with daemon: server is unavailable".
  • 1.11.3: Still getting errors from turbo, but differences between original files / cached files start to appear.
  • 1.12.0 - 1.12.4: No errors from turbo, differences between original files / cached files observed.

I looked through the 1.11.0 changes and this one stuck out to me: #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 arlyon added the linear: turbo Issues to sync to Linear for Turborepo team label Feb 21, 2024
@arlyon
Copy link
Contributor

arlyon commented Feb 21, 2024

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 arlyon self-assigned this Feb 21, 2024
@arlyon
Copy link
Contributor

arlyon commented Feb 22, 2024

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
Copy link
Author

trappar commented Feb 22, 2024

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

@trappar
Copy link
Author

trappar commented Mar 1, 2024

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

@bmelonis
Copy link

bmelonis commented Mar 5, 2024

Possibly related to #6823. See if you can replicate the error message from that issue on Turbo 1.11.

@chris-olszewski
Copy link
Member

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

#7628 should fix this.

@trappar
Copy link
Author

trappar commented Mar 5, 2024

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 added a commit that referenced this issue Mar 5, 2024
#7628)

### Description

Fixes #7410 

This is just #6662, but applied to directories. See
[Entry::path](https://docs.rs/tar/latest/tar/struct.Entry.html#method.path)
for explanation as to why one should never rely on a header's path.

### Testing Instructions

In the first commit added a failing unit test, test passes after fix.

Also tested against reproduction:
https://github.com/trappar/turbo-cache-missing-output-files

Just need to update `reproduce-issue.sh` to use the `turbo` in this
branch:
```
...
Diffing the original force-build's .next directory with the cache-hit-build's .next directory
[0 olszewski@chriss-mbp] /tmp/turbo-cache-missing-output-files $ 
```




Closes TURBO-2532
@chris-olszewski
Copy link
Member

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
Copy link
Author

trappar commented Mar 5, 2024

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
Copy link
Member

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
Copy link
Author

trappar commented Mar 5, 2024

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
Copy link
Author

trappar commented Mar 5, 2024

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
Copy link
Member

No worries, thanks for updating the repro.

I believe #7633 should fix the remaining diff issues.

@trappar
Copy link
Author

trappar commented Mar 5, 2024

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

chris-olszewski added a commit that referenced this issue Mar 6, 2024
### Description

Fix for secondary problem discovered in #7410

Again, reading the docs for
[`Entry::link_name`](https://docs.rs/tar/latest/tar/struct.Entry.html#method.link_name)
it is recommended against using a header as it might have an
incomplete/differing link name from the actual entry. `restore_symlink`
already uses this method over accessing the link name via the header so
it doesn't need to be updated.

### Testing Instructions

Added failing unit test in first commit. The test adds a symlink to a
directory with a long path that gets restored before the target has been
restored. This results in us hitting the
`topologically_restore_symlinks` codepath which contained the bug.

Also tested against updates to
https://github.com/trappar/turbo-cache-missing-output-files which also
trigger this behavior.


Closes TURBO-2539
@chris-olszewski
Copy link
Member

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
Copy link
Author

trappar commented Mar 6, 2024

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
Copy link
Member

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind: bug Something isn't working linear: turbo Issues to sync to Linear for Turborepo team needs: triage New issues get this label. Remove it after triage owned-by: turborepo
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants