Pinning SwiftLint in CI when Homebrew won't let you
brew install swiftlint means whatever's stable today, and release-tag CI is most exposed to that drift. The fix pins to a portable binary, not a formula.
brew install swiftlint means whatever's stable today, and release-tag CI is most exposed to that drift. The fix pins to a portable binary, not a formula.
Extracting algorithms out of MusicKit's reach, a mock parameter that was silently ignored, and two tests that had been passing for the wrong reason all along.
A MusicKit service-layer cleanup where deleting dead methods crashed every test at once - and the fix was a clean build, not a debugger.
Three sequential fetches where one wasn't even needed up front, two quadratic recomputes, and a linter that exposed why I was really writing all those comments.
Synthesized Codable conformances inherit default MainActor isolation too, and async let has stricter demands than the task you already have.
A pattern doesn't get fixed once. One more main-actor library scan hiding on a write path, and the batch API that was only wired in one direction.
Library ids fed to catalog requests: two symptoms, one bug, a device-verified fix, and the 1,610-artist number that forced a redesign.
The Not Interested store only ever kept keys. Then it had to become a screen, and the model needed to carry its own description.
118 green tests, a clean simulator pass, and dead buttons on a real phone. The bug was a @MainActor service doing synchronous work between awaits.
@MainActor eliminates data races, not interleaving races. A generation token, a stale-failure guard, and a deterministic race test with no sleeps.
Page 3 of 5