Skip to content

fix: Fall back to polling on macOS - #13622

Merged
anthonyshew merged 3 commits into
mainfrom
shew/macos-watch-fallback
Jul 31, 2026
Merged

fix: Fall back to polling on macOS#13622
anthonyshew merged 3 commits into
mainfrom
shew/macos-watch-fallback

Conversation

@anthonyshew

@anthonyshew anthonyshew commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Preserve file-watcher startup failures for current and future subscribers.
  • Fail turbo watch immediately with the concrete startup error.
  • Fall back from FSEvents to content-aware polling during macOS startup only.
  • Retain native watcher behavior on Linux and Windows.

Fixes #13607.

Testing

  • cargo test -p turborepo-filewatch --lib
  • cargo test -p turborepo-lib --lib
  • cargo check -p turborepo-filewatch --tests --target aarch64-apple-darwin
  • cargo clippy -p turborepo-filewatch --all-targets -- -D warnings
  • cargo clippy -p turborepo-filewatch --tests --target aarch64-apple-darwin -- -D warnings
  • Pre-push format and TOML checks.

@anthonyshew
anthonyshew requested review from a team and tknickman July 31, 2026 05:49
@vercel

vercel Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Ready Ready Preview Jul 31, 2026 6:06am
examples-designsystem-docs Ready Ready Preview Jul 31, 2026 6:06am
examples-gatsby-web Ready Ready Preview Jul 31, 2026 6:06am
examples-kitchensink-blog Ready Ready Preview Jul 31, 2026 6:06am
examples-nonmonorepo Ready Ready Preview Jul 31, 2026 6:06am
examples-svelte-web Ready Ready Preview Jul 31, 2026 6:06am
examples-tailwind-web Ready Ready Preview Jul 31, 2026 6:06am
examples-vite-web Ready Ready Preview Jul 31, 2026 6:06am
turbo-site Ready Ready Preview Jul 31, 2026 6:06am
turborepo-eve-agent Ready Ready Preview Jul 31, 2026 6:06am

MacOsBackend::Fsevents => {
FsEventWatcher::new(event_handler, notify::Config::default()).map(Backend::Fsevents)
}
MacOsBackend::Poll => PollWatcher::new(

@vercel vercel Bot Jul 31, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

macOS poll fallback shares the 2s cookie readiness deadline with FSEvents, so its first full-tree scan can time out and fail startup (WatchError::BackendAttempts) on large monorepos.

Fix on Vercel

@anthonyshew
anthonyshew merged commit b3dc99b into main Jul 31, 2026
70 of 72 checks passed
@anthonyshew
anthonyshew deleted the shew/macos-watch-fallback branch July 31, 2026 06:20
anthonyshew pushed a commit that referenced this pull request Jul 31, 2026
## Release v2.10.8

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/30636958913)

### Changes

- fix: Scroll TUI task list with mouse wheel (#13479) (`c6ded77`)
- fix: Make releases resumable (#13486) (`92da3c3`)
- refactor: Expose knowledge-backed package scope views (#13456)
(`2c675f4`)
- release(turborepo): 2.10.7 (#13489) (`ee50965`)
- refactor: Use package knowledge for configuration scopes (#13457)
(`75c63f4`)
- refactor: Use package knowledge for run scope enumeration (#13458)
(`f5c0eee`)
- release(turborepo): 2.10.8-canary.1 (#13490) (`5503cf7`)
- refactor: Use package knowledge in repository views (#13459)
(`ff21d9a`)
- refactor: Use package knowledge in package integrations (#13460)
(`6efcbec`)
- ci: Parallelize environment setup steps (#13491) (`db0dc90`)
- release(turborepo): 2.10.8-canary.2 (#13492) (`db71e14`)
- refactor: Use package knowledge for task hashing paths (#13461)
(`ad43f80`)
- refactor: Use package knowledge for run-cache paths (#13462)
(`95406bb`)
- refactor: Bind toolchain callbacks to package knowledge (#13463)
(`ac6c28f`)
- refactor: Use package knowledge for microfrontend commands (#13464)
(`d9b9c4b`)
- refactor: Use package knowledge for run summaries (#13465) (`e67b079`)
- refactor: Use package knowledge for watcher paths (#13466) (`947b3ad`)
- ci: Enable remote cache for types codegen (#13495) (`9b95197`)
- docs: Fix llms.txt links to page markdown routes (#13497) (`6ada90e`)
- refactor: Use package knowledge for prune paths (#13467) (`5a20113`)
- refactor: Use package knowledge in the LSP (#13468) (`b78ebff`)
- refactor: Use consistent repository construction (#13469) (`3d54f6e`)
- refactor: Delete legacy package and scope authority (#13470)
(`8318f99`)
- perf: Cache telemetry salt instead of re-reading config on every hash
(#13498) (`4df7c1d`)
- feat: Support Android (Termux) (#12735) (`1165d7c`)
- ci: Restore Cargo targets on all test platforms (#13505) (`dab0c04`)
- fix: Resolve gitdir for linked worktrees in repo index (#13503)
(`a13e724`)
- test: Characterize relationship projections (#13499) (`91c77b0`)
- refactor: Produce native relationship observations (#13500)
(`aad0c81`)
- feat: Resolve GitHub Actions remote base refs behind future flag
(#10732) (`dc17727`)
- refactor: Add core relationship projections (#13502) (`17558a8`)
- refactor: Define external resolution contracts (#13507) (`89a808d`)
- refactor: Move repository tasks into Turbo configuration (#13504)
(`72837d2`)
- refactor: Build JavaScript external resolution generations (#13508)
(`70421be`)
- refactor: Contribute Cargo external resolutions (#13509) (`396daa3`)
- refactor: Migrate external declaration consumers (#13511) (`59fd5d5`)
- ci: Auto-merge release PRs (#13510) (`6226a05`)
- chore: Release Turborepo 2.10.8-canary.3 (#13512) (`56ccdde`)
- fix: Use tokenless release review gate (#13513) (`e5af40d`)
- refactor: Use resolution fingerprints for task hashes (#13514)
(`702f95a`)
- fix: Support fork PRs in review gate (#13516) (`a3840e7`)
- refactor: Migrate lockfile affectedness (#13519) (`bdbcd06`)
- refactor: Migrate external resolution summaries (#13520) (`81b24dc`)
- refactor: Migrate external package queries to resolution knowledge
(#13523) (`c9853f8`)
- fix: Serialize macOS Homebrew setup (#13549) (`33c1689`)
- refactor: Migrate prune lockfile keys to resolution identities
(#13524) (`fa0721b`)
- refactor: Migrate global hash inputs to resolution knowledge (#13525)
(`a81a683`)
- refactor: Delete legacy external-resolution PackageInfo state (#13526)
(`fbe88d3`)
- chore: Release Turborepo 2.10.8-canary.4 (#13557) (`887d9b1`)
- refactor: Remove external declaration compatibility paths (#13527)
(`3c8448d`)
- refactor: Produce immutable native task and command knowledge (#13528)
(`18d0bc3`)
- refactor: Migrate native task registration and suggestions (#13529)
(`7b5ee63`)
- refactor: Migrate turbo-json native task synthesis (#13530)
(`2d004f0`)
- refactor: Migrate persistent and recursive task validation (#13531)
(`dd7519b`)
- refactor: Migrate native task definition precedence (#13532)
(`8792ce9`)
- refactor: Migrate engine native command planning (#13533) (`67e4e9e`)
- refactor: Migrate executor native command resolution (#13534)
(`1b8accc`)
- refactor: Migrate native task query, devtools, and LSP views (#13535)
(`2753b76`)
- refactor: Migrate command summaries and delete legacy task paths
(#13536) (`adbad50`)
- refactor: Produce immutable task-contract knowledge (#13537)
(`97bff31`)
- refactor: Migrate engine task-contract composition (#13538)
(`fab50c5`)
- refactor: Migrate hashing engines to task contracts (#13539)
(`76206f8`)
- refactor: Exclude JavaScript from toolchain task-I/O dispatch (#13540)
(`115e850`)
- refactor: Migrate change classification to immutable knowledge
(#13543) (`5a55e8d`)
- refactor: Separate prune rendering with golden coverage (#13546)
(`62a047a`)
- refactor: Delete JS format interpretation from prune orchestration
(#13554) (`f1b37f6`)
- refactor: Audit remaining JS knowledge consumer reads (#13556)
(`7f12c3f`)
- refactor: Migrate MFE dependency detection off PackageInfo (#13558)
(`4cb9d94`)
- refactor: Remove prune PackageInfo dependencies (#13562) (`1bb9233`)
- refactor: Remove residual runtime PackageInfo gates (#13564)
(`c8eaedc`)
- refactor: Migrate boundary diagnostics off PackageInfo (#13571)
(`f977db3`)
- docs: Audit Cargo package knowledge (#13572) (`53dd13e`)
- refactor: Complete Cargo relationship and resolution knowledge
(#13576) (`b29e30c`)
- refactor: Port Cargo task and contract knowledge (#13581) (`74446c5`)
- refactor: Port Cargo watch and prune knowledge (#13582) (`acd3be1`)
- refactor: Remove runtime toolchain dispatch (#13584) (`2c10201`)
- ci: Restore Cargo target for lockfile tests (#13588) (`e848ad1`)
- refactor: Replace toolchains with repository contributors (#13585)
(`5d06e95`)
- refactor: Remove Cargo contributor plumbing (#13586) (`6ea1daf`)
- refactor: Remove ToolchainId runtime dispatch (#13587) (`24fbd3e`)
- refactor: Route task behavior through contract domains (#13589)
(`da88240`)
- refactor: Route package consumers by manifest (#13591) (`bb12c72`)
- refactor: Route MFE eligibility by manifest (#13592) (`08c7a74`)
- refactor: Project manifest-derived repository facts (#13593)
(`64e2a7e`)
- refactor: Route residual task behavior by capability (#13595)
(`fe9b72d`)
- refactor: Route resolution through explicit domains (#13596)
(`be21801`)
- refactor: Route N-API package listing by manifest (#13597) (`8f44636`)
- docs: Vercel Remote Cache authentication with OIDC policies (#13140)
(`c84ed36`)
- refactor: Own resolution fingerprints in repository (#13598)
(`16708a9`)
- refactor: Fail closed on invalid relationships (#13599) (`1a237de`)
- perf: Reuse Cargo metadata discovery snapshot (#13600) (`2fa79c5`)
- refactor: Resolve MFE package ownership from graph (#13601)
(`0253836`)
- refactor: Remove retained package payloads (#13603) (`58d9660`)
- feat: Add native Cargo format task (#13606) (`ab15587`)
- refactor: Compose repository graphs for optional toolchains (#13608)
(`915e82b`)
- ci: Invalidate Cap'n Proto caches (#13616) (`5cf35ad`)
- feat: Discover uv workspaces (#13609) (`8715646`)
- feat: Run native uv tasks (#13610) (`4195e41`)
- feat: Hash uv lockfile closures (#13611) (`e14de24`)
- fix: Make Windows Cap'n Proto cache relocatable (#13621) (`00538d0`)
- feat: Watch uv workspace changes (#13612) (`b2e25d4`)
- feat: Prune uv workspaces (#13613) (`f8f288e`)
- fix: Fall back to polling on macOS (#13622) (`b3dc99b`)
- test: Add uv workspace integration coverage (#13602) (`dd87718`)

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
anthonyshew pushed a commit that referenced this pull request Aug 5, 2026
## Release v2.10.9-canary.1

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/31044275876)

### Changes

- refactor: Delete legacy external-resolution PackageInfo state (#13526)
(`fbe88d3`)
- chore: Release Turborepo 2.10.8-canary.4 (#13557) (`887d9b1`)
- refactor: Remove external declaration compatibility paths (#13527)
(`3c8448d`)
- refactor: Produce immutable native task and command knowledge (#13528)
(`18d0bc3`)
- refactor: Migrate native task registration and suggestions (#13529)
(`7b5ee63`)
- refactor: Migrate turbo-json native task synthesis (#13530)
(`2d004f0`)
- refactor: Migrate persistent and recursive task validation (#13531)
(`dd7519b`)
- refactor: Migrate native task definition precedence (#13532)
(`8792ce9`)
- refactor: Migrate engine native command planning (#13533) (`67e4e9e`)
- refactor: Migrate executor native command resolution (#13534)
(`1b8accc`)
- refactor: Migrate native task query, devtools, and LSP views (#13535)
(`2753b76`)
- refactor: Migrate command summaries and delete legacy task paths
(#13536) (`adbad50`)
- refactor: Produce immutable task-contract knowledge (#13537)
(`97bff31`)
- refactor: Migrate engine task-contract composition (#13538)
(`fab50c5`)
- refactor: Migrate hashing engines to task contracts (#13539)
(`76206f8`)
- refactor: Exclude JavaScript from toolchain task-I/O dispatch (#13540)
(`115e850`)
- refactor: Migrate change classification to immutable knowledge
(#13543) (`5a55e8d`)
- refactor: Separate prune rendering with golden coverage (#13546)
(`62a047a`)
- refactor: Delete JS format interpretation from prune orchestration
(#13554) (`f1b37f6`)
- refactor: Audit remaining JS knowledge consumer reads (#13556)
(`7f12c3f`)
- refactor: Migrate MFE dependency detection off PackageInfo (#13558)
(`4cb9d94`)
- refactor: Remove prune PackageInfo dependencies (#13562) (`1bb9233`)
- refactor: Remove residual runtime PackageInfo gates (#13564)
(`c8eaedc`)
- refactor: Migrate boundary diagnostics off PackageInfo (#13571)
(`f977db3`)
- docs: Audit Cargo package knowledge (#13572) (`53dd13e`)
- refactor: Complete Cargo relationship and resolution knowledge
(#13576) (`b29e30c`)
- refactor: Port Cargo task and contract knowledge (#13581) (`74446c5`)
- refactor: Port Cargo watch and prune knowledge (#13582) (`acd3be1`)
- refactor: Remove runtime toolchain dispatch (#13584) (`2c10201`)
- ci: Restore Cargo target for lockfile tests (#13588) (`e848ad1`)
- refactor: Replace toolchains with repository contributors (#13585)
(`5d06e95`)
- refactor: Remove Cargo contributor plumbing (#13586) (`6ea1daf`)
- refactor: Remove ToolchainId runtime dispatch (#13587) (`24fbd3e`)
- refactor: Route task behavior through contract domains (#13589)
(`da88240`)
- refactor: Route package consumers by manifest (#13591) (`bb12c72`)
- refactor: Route MFE eligibility by manifest (#13592) (`08c7a74`)
- refactor: Project manifest-derived repository facts (#13593)
(`64e2a7e`)
- refactor: Route residual task behavior by capability (#13595)
(`fe9b72d`)
- refactor: Route resolution through explicit domains (#13596)
(`be21801`)
- refactor: Route N-API package listing by manifest (#13597) (`8f44636`)
- docs: Vercel Remote Cache authentication with OIDC policies (#13140)
(`c84ed36`)
- refactor: Own resolution fingerprints in repository (#13598)
(`16708a9`)
- refactor: Fail closed on invalid relationships (#13599) (`1a237de`)
- perf: Reuse Cargo metadata discovery snapshot (#13600) (`2fa79c5`)
- refactor: Resolve MFE package ownership from graph (#13601)
(`0253836`)
- refactor: Remove retained package payloads (#13603) (`58d9660`)
- feat: Add native Cargo format task (#13606) (`ab15587`)
- refactor: Compose repository graphs for optional toolchains (#13608)
(`915e82b`)
- ci: Invalidate Cap'n Proto caches (#13616) (`5cf35ad`)
- feat: Discover uv workspaces (#13609) (`8715646`)
- feat: Run native uv tasks (#13610) (`4195e41`)
- feat: Hash uv lockfile closures (#13611) (`e14de24`)
- fix: Make Windows Cap'n Proto cache relocatable (#13621) (`00538d0`)
- feat: Watch uv workspace changes (#13612) (`b2e25d4`)
- feat: Prune uv workspaces (#13613) (`f8f288e`)
- fix: Fall back to polling on macOS (#13622) (`b3dc99b`)
- test: Add uv workspace integration coverage (#13602) (`dd87718`)
- chore: Release Turborepo 2.10.8 (#13626) (`adbfec7`)
- perf: Walk literal-prefix tree globs without wax compilation (#13522)
(`eb42f23`)
- fix: Accept semver ranges in devEngines.packageManager.version
(#13623) (`5297aa2`)
- docs: Explain affected package invalidation reasons (#13594)
(`c6fbc97`)
- perf(lockfiles): Borrow field-name scalars in the pnpm fast parser
(#13648) (`73e8d8c`)
- perf(repository): Avoid discarded alias allocation in Relationship
(#13650) (`b888891`)
- perf(lockfiles): Drop redundant human_name clone for pnpm v7/v9
(#13649) (`2effc86`)
- perf: Index workspace nodes by name in project_relationships (#13647)
(`0bf6973`)
- perf: Share resolution identity lists across identical workspace
closures (#13641) (`5107207`)
- docs: Fix duplicated word in runtime dependencies guide summary
(#13630) (`0664de8`)
- refactor: Remove turborepo-lsp dependency on turborepo-lib (#13631)
(`8ff1ad7`)
- perf: Index Bun nested lockfile entries by name for fallback
resolution (#13633) (`c0a8996`)
- perf: Memoize framework inference per package during task hashing
(#13634) (`21ea1d0`)
- perf: Avoid materializing transient declarations in
external_dependencies (#13646) (`a892a89`)
- perf: Enable shared closure DP for npm and yarn1 lockfiles (#13635)
(`04db9a8`)
- perf: Parse pnpm explicit-key entries in the lockfile fast path
(#13640) (`83ae3d9`)
- perf: Parallelize resolution fingerprint hashing (#13642) (`95f2297`)
- perf: Build resolution identity lists in parallel (#13643) (`58e4e8a`)
- perf: Intern resolution identities as Arc&lt;str&gt; across closures
(#13645) (`6af5423`)
- fix: Compose affected tasks with package filters (#13656) (`0b1f466`)
- docs: Explain worktree cache path isolation (#13657) (`9e2865e`)
- fix: Upgrade brace-expansion to 5.0.9 (#13658) (`e247a0e`)
- docs: Correct verified inaccuracies in the Turborepo Agent Skill
(#13644) (`c05ed3d`)
- chore: Update Next.js to 16.3.0 (#13659) (`a936402`)
- fix: don't use eprintln! in the panic hook (#13637) (`658fd54`)
- fix: Invalidate only when Git ignore sources change (#13632)
(`f2957a2`)
- docs: Update Geistdocs to 1.19.4 (#13680) (`3617c78`)
- docs: Exclude Turborepo from its own OSS products menu (#13681)
(`43ee46a`)
- docs: Use the geistdocs Turborepo logo in the navbar (#13682)
(`d43eec5`)
- docs: Update redirected vercel.com/nextjs.org links to current targets
(#13685) (`b23e283`)
- refactor: Generalize native command arguments (#13664) (`e797251`)
- refactor: Move native contracts to tasks (#13665) (`851857d`)
- docs: Fix loadTransformers reference in turbo-codemod README (#13683)
(`7b8144e`)
- refactor: Model native task execution explicitly (#13666) (`2634f3c`)
- feat: Compose aggregate native task dependencies (#13667) (`ef8b3f3`)
- fix: Respect aggregate task overrides (#13668) (`81f88f2`)
- test: Stabilize watch task inputs regression test (#13686) (`308ea6b`)
- feat: Parse Python quality tool declarations (#13669) (`b1d5dc5`)
- feat: Resolve Python quality plans (#13670) (`439b465`)
- refactor: Extract uv native task specs (#13671) (`e14f04e`)
- feat: Synthesize Python quality tasks (#13672) (`94708ad`)
- test: Cover Python quality task commands (#13673) (`0d43ff3`)
- feat: Hash Python quality task inputs (#13674) (`3584a5f`)
- test: Cover Python quality task graph (#13675) (`09bd548`)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

turbo watch fails in macOS linked Git worktrees with multiple Git control roots

1 participant