fix(apple): read the runner cache toolchain key from Xcode's own files
Merged
TH
6h ago+646+646+012345678901234567890123456789-2147-2147-0123456789012345678901234567890123456789
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'sSystemVersion.plist) and never execs. Deleted: the probe budget, retry, TTL memo, selection records, and the runner host'srunCmdSync(ā2,145 lines). - A dangling
xcode-selectlink fails asapple_toolchain_unreadableinstead 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/xcrunfor all 7 runner SDKs. - Planted host-Xcode reads and exec imports are caught.
- Live at 805c818902, iOS 27.1 simulator:
build:xcuitest:ioswrote the manifest with onlyplutilexecs, and its key matchedxcodebuild -versionandxcrun --show-sdk-*.openandsnapshot -isucceeded. The runner rantest-without-buildingwith no rebuild. - Independent review findings applied.
š¤ Generated with Claude Code