Repository navigation
Fix WebSocket disconnects with Home Assistant 2026.10 (bump Starscream and HAKit) - #6038
Merged
Merged
Conversation
Starscream set the permessage-deflate compressed bit on control frames, including the pong answering the server's heartbeat ping. aiohttp 3.14.4 (Home Assistant Core 2026.10) rejects those per RFC 7692, dropping the connection with "Received frame with non-zero reserved bits" roughly every 56 seconds. Refs #6011 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017NccCmJppSCweVhhGQn8Hk
This was referenced Oct 10, 2026
HAKit 0.4.19 requires Starscream 4.0.10, the release carrying the control-frame compression fix this PR already pins. Refs #6011 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017NccCmJppSCweVhhGQn8Hk
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Two local package manifests still require HAKit 0.4.18 exactly, creating an unsatisfiable SwiftPM graph.
1 open finding
What changed in this PR
Updates WebSocket dependencies to fix protocol-error disconnects with Home Assistant 2026.10.
Changes:
- Bumps HAKit to 0.4.19.
- Pins Starscream 4.0.10’s control-frame compression fix.
| File | Description |
|---|---|
Package.resolved |
Updates resolved dependency revisions. |
HomeAssistant.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved |
Updates workspace dependency resolutions. |
HomeAssistant.xcodeproj/project.pbxproj |
Updates project-level package requirements. |
🧠 Review effort: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
HANetworking and PromiseKitDynamic pin HAKit exactly to keep a single instance in Xcode's package graph, so they must match the app's 0.4.19. Refs #6011 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017NccCmJppSCweVhhGQn8Hk
bgoncal
enabled auto-merge (squash)
October 10, 2026 21:32
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6038 +/- ##
=======================================
Coverage 54.16% 54.17%
=======================================
Files 1244 1244
Lines 82644 82644
=======================================
+ Hits 44766 44772 +6
+ Misses 37878 37872 -6 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
jaipur2001
added a commit
to jaipur2001/homeassistant-iOS
that referenced
this pull request
Oct 12, 2026
7 tasks
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.

AI Policy
Select exactly one option that describes AI usage in this contribution:
Summary
Fixes #6011 (also reported as #5999 and home-assistant/core#184799).
Since Core 2026.10.0 the app's WebSocket is dropped roughly every 56 seconds with
Received frame with non-zero reserved bits(close code 1002).Root cause: Starscream ran every outgoing frame through the permessage-deflate compressor, so control frames (close/ping/pong) went out with RSV1 set — including the empty pong it sends back for the server's 55 s heartbeat ping. RFC 7692 §6.1 forbids that; aiohttp 3.14.4 (bumped in home-assistant/core#184382) now enforces it, while 3.14.3 tolerated it.
Not affected before this change: watchOS (compression already disabled in HAKit) and mTLS connections (
URLSessionWebSocketTask).Screenshots
N/A
Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
Any other notes
Reproduced against aiohttp directly with a raw client sending Starscream's frame bytes: pong
0xCA(FIN|RSV1) is rejected by 3.14.4 with the exact error above and accepted by 3.14.3; a compliant0x8Apong is accepted by both.The app requires iOS 16.4, so iOS 15 devices on older app builds will keep hitting this against Core 2026.10+ — a server-side tolerance would need to come from aiohttp/Core.