fix(actor): drop a stopped provisional site actor's binding - #439
Open
jonybur wants to merge 3 commits into
Open
fix(actor): drop a stopped provisional site actor's binding#439jonybur wants to merge 3 commits into
jonybur wants to merge 3 commits into
Conversation
Closes #438. The cleanup split a site-actor binding key on a space while the map that writes it joins with a NUL. indexOf(' ') was therefore always -1, the loop always hit its `continue`, and the drop never ran: a provisional site actor stopped for landing outside its boundary kept a live binding, so a retry resolved the stopped session instead of minting a fresh actor. The root cause is that the key shape was known in two files. It now lives in one: the binding map gains dropBySession(), and the controller asks for the removal instead of taking the key apart itself. Every existing test passed while the cleanup did nothing, because none of them used a real binding map. The two new ones do. Signed-off-by: Jonathan Bursztyn <jobur93@gmail.com>
…up regression tests Signed-off-by: Jonathan Bursztyn <jobur93@gmail.com>
Visual regression✅ No visual change. All 68 screens render exactly as they do at the merge base.
|
jonybur
added a commit
that referenced
this pull request
Aug 25, 2026
That fix lives in #439, not here. Claiming it in this PR's entry would credit this change with something it does not contain. Signed-off-by: Jonathan Bursztyn <jobur93@gmail.com>
Signed-off-by: Jonathan Bursztyn <jobur93@gmail.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.
Closes #438.
What broke
The cleanup that removes a provisional site actor's binding when the actor is stopped split the binding key on a space. The map that writes that key joins with a NUL.
indexOf(' ')was therefore always-1, the loop always hit itscontinue, and the drop never ran.So a provisional site actor stopped for landing outside its boundary kept a live binding: a retry resolved the stopped session instead of minting a fresh actor, and per the block's own comment could reopen an orphaned tab. The stopped state still fences queued calls, so this is recovery quality, not an authority bypass.
What changed
The root cause is that the key shape was known in two files. It now lives in one: the binding map gains
dropBySession(), and the controller asks for the removal instead of taking the key apart itself.How it was verified
Two regression tests, driving a REAL binding map - every existing test passed while the cleanup did nothing, because none of them used one. Revert-proven: restoring the old loop turns the provisional test red, and the fix turns it green.
Gates: 6413 bun, 948 in-browser, lint, typecheck, boundary, imports, tscheck, copy.
Found while mapping the dispatcher for #234; filed separately rather than folded into that PR.