A booker holding two places beside each other removes both, as fast as the two can be pressed, so the two travel in one request. One place goes back, the other is refused with "That place was no longer in your basket.", the panel empties, and loading the page again shows one of the places still held.
The endpoint's half. The substitution from #3616353: Give back an end of the run instead of the clicked place, so no place is left on its own is decided one line of the request at a time. Giving back the first of the pair would leave the second empty on its own, so the rule hands the second back instead and reports the first as still held. The second line of the same request then finds nothing to give back and is refused as gone. The booker asked for both and keeps one. The quieter form of the same fault says nothing at all: removing two of a run of three answers success on both lines while giving back places the booker did not name.
The map's half. A refusal that says the basket has gone clears the whole selection, including a place the same answer names as held. One run of clicks can carry both halves, so the panel loses a place the server is holding and only a page load puts it back.
Proposed resolution. Ask the substitution about the whole request: what the booker is left holding once every place in it has gone back. A place on its way out is not part of the run being kept together and is never a place to hand back instead, so giving back several at once gives back exactly those, and giving back a whole run empties it. On the map, keep what the answer still names, because a place it calls the booker's own cannot belong to a basket that has gone.
Remaining tasks. Two kernel tests on the endpoint (both halves of the fault, the loud one and the silent one) and two functional JavaScript tests (the gesture as a booker makes it, and a place taken beside a basket that went). Documentation of the rule in docs/seating.md.
AI-Generated: Yes (Claude Code was used to help draft this issue summary and to write the code and tests on the merge request. I reviewed and ran the work myself before posting it.)
Issue fork yoyaku-3616626
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #3
mably commentedComment #5
mably commented