Repository navigation
Pin AudioStreaming 1.4.5 and drop the discarded-player grace period - #215
Merged
Merged
Conversation
AudioStreaming 1.4.5 carries dimitris-c/AudioStreaming#138, which makes `DispatchTimerSource.deinit` resume only a source it finds suspended and takes `UnfairLock` around the check-and-change in `activate()`/`suspend()`. That is the upstream fix the 2026-09-07 decision named as the condition for removing the local mitigation, verified by reading the file at the 1.4.5 tag rather than from the release notes. `replacePlayer()` reduces back to a bare reassignment: the `stop()` plus one-second `withExtendedLifetime` grace period and its `discardedPlayerTeardownGrace` constant are gone, so a media-services reset no longer holds a dead player's buffers for a second afterwards. `1.4.4..1.4.5` is two PRs plus tests: the timer fix and optional mTLS client certificates (#136), which defaults to `nil` and leaves our call behaviour unchanged. The dependency's manifest does not move — same tools version, same `.iOS/.macOS/.tvOS` list with no watchOS, same `exact: "0.1.2"` on both sbooth xcframeworks — so the platform reasoning in the package manifest and the no-new-binary-artifacts property CI asserts both hold. `Package.resolved` was hand-edited in all eight copies (no Swift toolchain where this was made). Pins are correct; the `originHash` fields still reflect the old declaration and will be rewritten by the first real resolve. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcPH1tQFMqGX6SZX49s4nf
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
KevinTCoughlin
marked this pull request as ready for review
September 21, 2026 01:47
KevinTCoughlin
deleted the
claude/audiostreaming-pr136-release-shkypt
branch
September 21, 2026 01:59
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
AudioStreaming 1.4.5 (14 Sep 2026,
e28a74b7) carries dimitris-c/AudioStreaming#138 — the upstream fix the 2026-09-07DECISIONS.mdentry named as its condition for removal: "if it lands and a release carries it, pin the release … and this reduces back to a bare reassignment." Both halves now hold.exact: "1.4.4"→"1.4.5"inPackages/PlaybackEngineAudioStreaming/Package.swift, with all eightPackage.resolvedcopies updated.replacePlayer()reduces to a bare reassignment. Thestop()+ one-secondwithExtendedLifetimegrace period and thediscardedPlayerTeardownGraceconstant are gone, so a media-services reset no longer holds a dead player's buffers for a second afterwards.DECISIONS.mdgets a 2026-09-21 entry closing out 2026-09-07;THIRD_PARTY_LICENSES.mdrecords the new version.Verified at the tag, not from release notes.
DispatchTimerSource.deinitat 1.4.5 computesneedsResumeunderUnfairLockand resumes only a source it finds.suspended;activate()/suspend()do their check-and-change under the same lock. The lock matters as much as the conditional —Retrierbuilds its timer withunderlyingQueue: nil, so the torn suspend count was reachable.Nothing else in the graph moves.
git diff 1.4.4..1.4.5is two PRs plus tests and a README line. The dependency's manifest is untouched: stillswift-tools-version:5.10, still.iOS(.v15)/.macOS(.v13)/.tvOS(.v16)with no watchOS, stillexact: "0.1.2"on both sbooth xcframeworks. The platform reasoning in our manifest (tvOS in, watchOS out) and the no-new-binary-artifacts property CI asserts forPackages/Playbackboth survive.What we accept by taking this tag. 1.4.5 also carries #136, optional mTLS client certificates, which touches
NetworkSessionDelegate,NetworkingClient, andAudioPlayer.init— our streaming path. It is additive and the provider defaults tonil, so ourAudioPlayer()call behaves identically; the alternative to taking it was a fork, which the 2026-08-07 entry (#124) already ruled out. Flagged so the next unexplained networking regression has a suspect.Test plan
No toolchain was available where this was made (Linux; the repo builds on a Mac host or simulator only), so nothing here was compiled or linted locally — this needs CI, and a reviewer should treat the simulator test plan plus the Release and tvOS builds as the real check.
replacePlayer()directly, for the reason the 2026-08-20 volume-ramp entry gives:AudioPlayeris a concrete dependency type with no protocol seam, andPlaybackEngineAudioStreaminghas no test target that builds on the mac host.Package.resolvedfiles were hand-edited and validated as JSON. The pins are correct — version1.4.5, revisione28a74b7b8632fc14312b7a79dcd82fa302779afasgit rev-parse 1.4.5^{commit}reports it — but each file'soriginHashstill reflects the old dependency declaration and will be rewritten by the first real resolve. That churn is expected and should be committed when it appears.DiagnosticsServicewould surface anMXCrashDiagnosticwith_dispatch_source_dispose, but only from a real device.Checklist
CHANGELOG.mdupdated under[Unreleased](if user-facing) — not applicable: no user-visible behaviour change, and the mitigation this removes never had an entry.DECISIONS.mdupdated (if this makes or reverses an architectural call)git commit -s) per the DCO — not done; no commit onmaincarries aSigned-off-bytrailer, so this follows the existing history. Say the word if you want it amended.🤖 Generated with Claude Code
https://claude.ai/code/session_01NcPH1tQFMqGX6SZX49s4nf
Generated by Claude Code