One stalled subscription retries alone instead of replacing the organization's socket - #57
Merged
Merged
Conversation
…etries alone, never replacing an open socket One interest outliving its 60 s establishment deadline replaced its organization's whole receiver, so every subscription on it, about sixty for the test org, registered again four at a time, and the account line said Zerops wasn't answering. On a socket that is open the late interest now retries alone on its own backoff and its siblings keep observing; a dead socket still says so itself, by its close or a missed pong, and is replaced then.
…riptions on its open socket With a stalled subscription no longer replacing its socket, Try now only woke the recovery cycle, which waited out each backoff, so pressing it did nothing. On an open socket it now lets go of the registrations still unanswered and starts every subscription of the organization not observing again at once, past its backoff, on that socket; a socket whose login fails stays the cycle's to retry.
fxck
force-pushed
the
fix/socket-isolate
branch
from
October 1, 2026 10:40
39f789e to
703e9b7
Compare
fxck
added a commit
that referenced
this pull request
Oct 1, 2026
- #50 A person's own new project never waits on the path for someone else's - #51 A docked operation offers to open only when opening adds something - #52 A change's review reads the change itself, and rows name their repository when a Mate has two - #54 A coming-up Mate's page hands over as soon as the Mate answers, whatever the browser kept - #53 The account's line: Try now shows it tries, names what isn't answering, and one org's trouble holds no other - #56 The composer's top lists every change that waits for review - #55 A message echoed in the run card shows its words and its pictures - #57 One stalled subscription retries alone instead of replacing the organization's socket - #58 Docs: what the hours after 0.11.74 measured, and the fixes they took
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.
"Zerops isn't answering. Trying again…" kept coming back. One trigger, caught live: a single subscription that passed its establishment deadline replaced the organization's whole socket (
runtime.ts, theEffect.catchafter the deadline →scheduleRecovery(receiver)). Then all of the org's ~60 subscriptions registered again four at a time, and the reconnect stalled for about a minute.Now a subscription that passes its deadline while the socket is still open retries alone, on its own backoff, and its siblings keep observing. A dead socket is still replaced, either through its close or through a missed pong (heartbeat plus 8 s).
Test: one project's registration never answers. Before the fix, the whole socket was replaced (red). Now only that project retries, the list and its sibling stay observing on the same socket, nothing is opened or closed, and it recovers in place. The data and account suites pass.
This is the interim fix. Moving to org-wide subscriptions removes the per-project fan-out itself.
🤖 Generated with Claude Code