Skip to content

ci(ios): iOS CI lane pinned to Xcode 26.0 / Swift 6.2 (matches ship) - #12

Merged
boggspa merged 2 commits into
masterfrom
ci/ios-lane-pinned
Jun 18, 2026
Merged

boggspa merged 2 commits into
masterfrom
ci/ios-lane-pinned

Conversation

@boggspa

@boggspa boggspa commented Jun 18, 2026

Copy link
Copy Markdown
Owner

Adds the iOS CI gate the release-readiness review asked for, pinned to the toolchain TaskWraith actually ships with.

  • Runner: macos-26 (needs the iOS 26 SDK — TaskWraithUI uses .glassEffect).
  • Xcode pinned to 26.0 (Swift 6.2) via setup-xcode, matching local/ship. The runner default is Xcode 26.5 / Swift 6.3.2, whose region-isolation sending diagnostics are errors that Swift 6.2.4 accepts — pinning keeps CI equivalent to what ships, so the lane fails on real regressions, not latent concurrency debt.
  • A pre-pin ls /Applications/Xcode*.app prints the runner's available Xcodes (so if 26.0 isn't there, we see it and fall back to Swift-5 language mode).
  • Steps: swift test --package-path ios/TaskWraithKit + an unsigned xcodebuild of the app target.

Tracked follow-up: clear the Swift-6.3 region-isolation debt in RemoteSessionModel (1613/2620, +any others 6.3 flags) before bumping the pin — that's the version Apple's tooling will eventually require.

🤖 Generated with Claude Code

boggspa and others added 2 commits June 18, 2026 20:30
…toolchain)

iOS gate: macos-26 runner (for the iOS 26 SDK that `.glassEffect` needs), with
Xcode pinned to 26.0 (Swift 6.2) so CI matches the toolchain the app actually
ships with. The runner default (Xcode 26.5 / Swift 6.3.2) rejects region-
isolation `sending` diagnostics as errors that local Swift 6.2.4 accepts, so an
unpinned lane fails on latent concurrency debt, not real regressions. A pre-pin
`ls /Applications/Xcode*.app` prints the runner's available Xcodes (fallback to
Swift-5 language mode if 26.0 isn't present). Runs `swift test` on TaskWraithKit
+ an unsigned simulator build of the app target.

Follow-up (tracked): clear the Swift-6.3 region-isolation debt in
RemoteSessionModel before bumping the pin.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…; keep swift test

First pinned run: Xcode 26.0.1 selected fine and `swift test` PASSED (Kit + UI
compile + 73 tests green on the ship Swift 6.2). Only the app-target xcodebuild
failed — the pinned older Xcode has no iOS 26 simulator platform installed
(GitHub pre-installs it only for the default Xcode 26.5), and -downloadPlatform
would cost minutes+GBs per run for a thin wrapper. swift test already compiles
all the SwiftUI/Glass code + runs the tests, so it's the real gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@boggspa
boggspa merged commit 4de1c74 into master Jun 18, 2026
18 checks passed
@boggspa
boggspa deleted the ci/ios-lane-pinned branch June 18, 2026 19:48
boggspa added a commit that referenced this pull request Jul 29, 2026
The selected row's label already cycles to its "Workspace/branch" identity;
this hangs up to three git status icons off the right of that face, so the
thread's git state is readable without opening it.

Colour vocabulary is GitHub's: a green PR is OPEN and not yet merged, a green
ringed tick is ready to merge, orange is queued (auto-merge armed - accepted
but NOT landed), purple is merged and is the only final-success state, red is
closed without merging. A bare green tick is "pushed", and a plain ahead
count is the fallback when work is in flight and no pull request applies. A
detached HEAD renders nothing at all - there is no branch identity to grade.

Two independent sources feed the strip, which is where more than one icon
comes from: the workspace's live PR, and the thread's own durable
chat.gitWorkflow marker - already transition-gated, so it means "the PR THIS
session shipped" rather than "this workspace is near a PR". A thread whose
#10 landed shows purple beside the branch's current green #12. They collapse
to one icon only when it is the same PR in the same state, and non-terminal
markers are ignored because they would duplicate the live PR and go stale
while the thread is unfocused.

Merge-queue detection needed plumbing: autoMergeRequest joins the
`gh pr view --json` field list and collapses to GitPrSummary.autoMergeEnabled.
There is no mergeQueueEntry on `gh pr view`.

The strip crosses the prop chain as one encoded string, not an array - the
sidebar row memo comparators gate primitives only, and a fresh array each
render would either churn the memo or, compared by reference, never update.

Note .github-satellite-icon in shard 07 has open and merged inverted against
this vocabulary. That surface is left alone here, deliberately.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.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.

1 participant