fix(apple): read the runner cache toolchain key from Xcode's own files

Merged
TH
6h ago
+646-2147

Summary

Perf Nightly and an Apple smoke run built the runner, then failed writing its cache metadata: xcrun --show-sdk-version hung for 30 s, hung again on retry, and exhausted the 45 s budget. #2423 and #3973 added budgets, retries, and traces, but no budget can size this hosted-runner stall.

  • The runner cache key now reads the files those tools print from (version.plist, SDKSettings.json, the SDK's SystemVersion.plist) and never execs. Deleted: the probe budget, retry, TTL memo, selection records, and the runner host's runCmdSync (āˆ’2,145 lines).
  • A dangling xcode-select link fails as apple_toolchain_unreadable instead of silently reading another Xcode.
  • The apple-runner tests default to a fixture Xcode.
  • chore(gates): oxlint bans exec-capable imports in the identity module, kept as one module so the platform-apple facades evaluate no more modules than at the merge-base.

Out of scope: the native-build identity (snapshot bridge, fold helper) goes through the Apple tool provider, which may run on another host, so it keeps xcodebuild -version. 37 files. No issue.

Validation

  • pnpm check:affected --run --head 805c818902: passed, exactCommit=true.
  • Xcode 27.1: file values match xcodebuild/xcrun for all 7 runner SDKs.
  • Planted host-Xcode reads and exec imports are caught.
  • Live at 805c818902, iOS 27.1 simulator: build:xcuitest:ios wrote the manifest with only plutil execs, and its key matched xcodebuild -version and xcrun --show-sdk-*. open and snapshot -i succeeded. The runner ran test-without-building with no rebuild.
  • Independent review findings applied.

šŸ¤– Generated with Claude Code