Known issues: the WebSocket close path's suspected RST-for-FIN race - #109
Merged
Conversation
Seen once, on a macOS CI runner: ws_probe failed with ConnectionResetError at its final recv -- after the whole close handshake had verified, waiting only for the FIN. A rerun of identical code passed and main with the same server code had passed an hour earlier, so it is a timing window. Suspected mechanism: the loop closes the slot while the client's close-echo frame is still unread in the receive buffer, and a socket closed with pending unread data sends RST rather than FIN. Fix direction if it recurs: consume the peer's close echo before the final close in the WS teardown path. Recorded rather than fixed, per the repo's own rule -- a guard must be verified load-bearing, and a fix for a failure that cannot yet be reproduced cannot be. The probe stays strict: the FIN is the contract, and noticing is its job. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
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.
Doc-only (CI skips
docs/**). Records the one-occurrencews_probefailure from #107's first smoke run with its full diagnosis — mechanism hypothesis (slot closed with the client's close-echo unread → kernel RST instead of FIN), the evidence it's a timing window (rerun passed, identical code green onmainan hour prior), and the fix direction if it recurs (consume the close echo before the final close). Deliberately recorded rather than fixed blind: a fix for a failure that cannot yet be reproduced cannot be sabotage-verified.🤖 Generated with Claude Code