Quick answer: Use a real (non-symlinked) Library. Switch CI to Cache Server for sharing import results between agents.

CI agent symlinks Library/ to a shared cache. Build runs Scriptable Build Pipeline. SBP fails: cache integrity check sees the symlink and refuses.

The Fix

CI script:
  rm -rf Library                       # remove symlink
  unity -batchmode -projectPath ...    # lets Unity create real Library

Edit → Project Settings → Editor:
  Cache Server (project specific):  Use IP
  IP Address:                       cache.internal:10080

# Now Library is real, but imports populate from network cache

Cache Server distributes import artifacts properly. SBP traverses real directories and validates dependency hashes.

Verifying

SBP build completes. Library is a real folder on disk. CI run time similar to symlink approach because Cache Server fetches fast.

“Real Library. Cache Server for sharing. SBP happy.”

Related Issues

For Asset Refresh deadlock, see refresh deadlock. For Asset Preset, see presets.

Real Library. Cache Server.