rdmsm4x-changelog-20260927-0000-xcode-repair-and-dev-update-2-17
rdmsm4x — Xcode repair, stale Xcode retirement, dev_update 2.17 fleet-wide
Summary: Xcode on rdmsm4x is back on 27.0 (27A266a), launches, has release simulator runtimes, and is signed in to team ZU2882L4HT; ~14 GB of stale Xcode copies are in the Trash; dev_update 2.17 (payload 2.25) now reports the Xcode faults it missed and is canonical on all six Macs.
- Host: rdmsm4x (fleet push to rdmbair13m5, rdmbair15m5, jdmbair13m5, rdmpw3265m, rdmpw3275m)
- Agent: claude@rdmsm4x (Claude Code, session 4fec0f54)
- Ticket: TASK-20260926-75
- Window: 2026-09-26 23:49:02 EDT → 2026-09-27 00:03 EDT (docs 00:23, wrap-up 17:28 EDT)
What was wrong
- Xcode would not open. At 23:47 the RTTy lane
(TASK-20260926-72, build 526 construct) sudo-swapped Xcode 26.6 into
/Applications/Xcode.app. macOS 27 refuses 26.x (LaunchServices -10664). The lane's restore trap put 27.0 back at 23:51. The lane's ownrestore_xcode27.zshcalls this swap LEGACY, so I routed the fix to the RTTy lane on the bus rather than editing their scripts. - No matching simulator runtimes. Xcode 27.0 release (iOS SDK 24A430) sat beside 7 beta runtimes (44.3 GB). None matched, so Xcode asks for a platform download on every launch.
- Stale Xcodes outside the retire lifecycle:
~/Archive/offhost-jdmbair13m5-20260923/(27.0 beta 6, plus a 27.0 copy mislabelledXcode-17F112.app), two 27.0 beta 5 bundles in~/Library/Developer/Xcode-archive, and a beta 6.xipin~/Archive/xcode-staging-20260831. - dev_update said all green. Its Xcode section never
looked at simulator runtimes, at
/Applications/Xcode.appbeing unopenable, at same-build duplicates, or at~/Archive/offhost-*. Itsinfo/warn/err/notelines also never reached~/scripts/dev_update_<ts>.log, so Rich's 23:38 log had empty Xcode sections.
Changes on rdmsm4x
- Retired (moved to
~/.Trash, ledgered in~/.local/state/dev_update/xcode_retire.tsv):Xcode-27-beta5.appandXcode-beta-27A5237k.app(27A5237l)Xcode-27.0.0-beta.6.app(27A5252f)- offhost
Xcode-17F112.app(actually 27A266a, a duplicate) Xcode_27_beta_6.xip
- Fleet
.xipcache created at~/Library/Caches/xcode-xips/. This is dev_update's ACQUIRE basis, and it did not exist.Xcode_26.6_Universal.xip(SHA-1 31f4957…) andXcode_27_Release_Candidate.xip(04a7d83…) moved here from staging, with SHA-1s verified against xcodereleases.com.Xcode_27.xipis a hard link to the RC.xip: same build and same SHA-1.
- Simulator runtimes: downloaded the release runtimes
with
xcodebuild -downloadPlatform(log~/dev/fleet/xcode-fleet-20260831/logs/rdmsm4x-platforms-*.log). Deleted the unchosen beta runtimes withxcrun simctl runtime delete. Final state is under Verification. - Kept on purpose:
/Applications/Xcode.app27.0 (selected)./Applications/Xcode-27.0-RC.app: same build, but it is the pinned toolchain path in~/dev/CLAUDE.mdand hyperTune, and Rich had it open.~/Archive/Xcode-26.6-rtty-gate/Xcode.appand~/Library/Developer/Xcode-rtty-pin/Xcode-26.6-17F113.app: RTTy pins (DEC-20260903-07). The duplication was flagged to the RTTy lane.- iOS 26.5 runtime (release).
- Account: one Apple ID is signed in. Xcode's team cache holds ZU2882L4HT (east coast science, llc, Company) and the Personal Team. The Developer ID Application identity is in the keychain, and the last profile download was 2026-09-22. No re-sign-in is needed.
dev_update 2.17 (payload 2.25), fleet-wide
- Commits in
~/dev/scripts(pushed to the privatebackupremote):298b2e2: agent@rdmpw3275m's promoted-but-uncommitted v2.16, committed for them.04e5df9: v2.17 and normalize 1.15.5895823: SESSION-STATE.
- New Xcode checks:
- Every SDK of the selected Xcode must have its runtime. A missing iOS runtime is downloaded; other platforms are reported.
- Unchosen beta runtimes are deleted, but only when the platform's chosen runtime is installed and no device on the beta is booted.
- WARN when
/Applications/Xcode.appis an older major than the target, naming a marked lane swap andrestore_xcode27.zsh. - Same-build duplicates are noted.
~/Archive/offhost-*is adopted into the retire lifecycle; any other Xcode under~/Archiveis listed and left alone.
- All findings are now written to the log file.
normalize_dev_update.zsh1.15: canonical v2.17, rollback v2.16; v2.12–v2.15 archived toarchive/dev_update-superseded-20260926/.- Deployed to all six Macs:
normalize0 FAIL and--verify-embeddedOK on every host. rdmpw3265m first refused because it lackedlib/brew-cask-version-guard.zsh(it had been on v2.14); copied from the hub, sha256 fb39bb68….
Verification
- Simulator runtimes, final: iOS 27.0 (24A434), tvOS 27.0 (24J360), watchOS 27.0 (24R362), visionOS 27.0 (24M362), iOS 26.5 (23F77) kept. All 6 beta runtimes deleted (iOS 24A5390f/24A5408d/24A5423a, tvOS 24J5325d, watchOS 24R5325f, xrOS 24M5326f). 7 images / 44.3 GB -> 6 / 33.0 GB. Every SDK of Xcode 27.0 resolves to an installed runtime.
open -g -j -a /Applications/Xcode.applaunched Xcode 27.0 on macOS 27.2. My test instance was then closed; Rich's RC instance (pid 76583) was untouched.- Xcode section dry-run harness (payload 2.25, real host state) gave 0 warnings / 0 issues, and its lines appear in the log file.
- Negative test (26.6 plist as
Xcode.app) gave exactly 1 warning, naming the restore script. --verify-embedded: payload sha a2059037… materialises and parses on 6/6 hosts.
Undo
- Bundles: move them back out of
~/.Trash(the names end-retired-20260926). - Script:
ln -sfn dev_update_v2.16.zsh ~/dev/scripts/dev_update.zsh(rollback kept on every host), orgit revert 04e5df9. - Runtimes:
xcodebuild -downloadPlatform <iOS|tvOS|watchOS|visionOS>re-fetches any platform.
Routed, not done here
- RTTy lane (bus message to rtty@rdmsm4x):
- Stop hand-swapping 26.6 into
/Applications/Xcode.app; use the in-place resolver. - Retire one of the two 26.6 copies.
- Stop hand-swapping 26.6 into
Documentation (added 2026-09-27 00:22 EDT)
- Living runbook:
~/dev/fleet/xcode-fleet-20260831/XCODE-FLEET-RUNBOOK.md, plus a SESSION-STATE §0 entry. Commit 6f12d3f in the~/dev/fleetrepo. - Skill:
fleet-operations/references/xcode-fleet.md, indexed in the skill's SKILL.md. ~/dev/PROJECTS.mdbanner;~/dev/scripts/SESSION-STATE.mdblockxcode0927(commit 5895823).- Memory:
xcode-26-gui-incompatible-on-macos-27updated with the swap and runtime traps.
Post-check at wrap-up (2026-09-27 17:28 EDT)
- Still true on rdmsm4x:
Xcode.app27A266a is selected and no swap marker exists. 5 release runtimes (29.4 GB); the watchOS beta deletion completed. All six hosts resolvedev_update.zshto v2.17. - Real-world proof: the 03:07 nightly ran payload
2.25. rdmsm4x's
~/scripts/dev_update_20260927_030707.lognow carries the Xcode findings (runtimes ok, duplicate noted, account signed in); before 2.25 that section was empty. On another Mac the run found no iOS runtime and downloaded it itself ("updated: Xcode: iOS simulator runtime installed"). - New, unrelated fault found: since 09-26 the nightly sweep returns exit 145 (128+SIGSTOP) on 4 of 6 hosts, which gates their real runs off. It predates 2.17: the 09-26 night still ran v2.14. Filed as ISSUE-20260927-20 (high) and bussed to claude@rdmsm4x.
- Minor follow-up in the same ticket: the 2.25
beta-runtime retire rule should skip runtimes already in state
Deleting.