0.8.0.12:0 — bundle Station Master v0.8.0.12, and a Restore a Seat action
A player who has lost their browser storage can be put back in their seat (Gitea#33 in the game repo). The session token is the only identity the game has and it lives in one browser's localStorage, scoped to the origin joined at, so a cleared profile, a private window or a different browser locks a player out of a game that is still running with their session still on disk. Seen at a real table: of two humans in one game, the host reloaded straight back in and the joiner met an empty lobby. New action, restore-seat: pick a seat from a dropdown of the players actually holding a session — bots never appear, since seatedPlayers is read from the server's session map rather than guessed from display names — and get back a link built from this interface's own address. serverApi gained mintClaim; the dictionary gained 57-64 in all five locales. THE LINK CARRIES A CODE, NOT THE TOKEN. lobby-and-sessions.md §1 says to keep the token out of URLs so it is not shoulder-surfed or pasted into a chat, and a recovery link is exactly what gets pasted into a chat. The code is single-use, expires in 30 minutes, and the page trades it for the real token over a POST. Minting is admin-gated because deciding that somebody has lost a seat is a judgement no route can make safely; spending needs no secret, because the player following the link holds none. GAMES IN PROGRESS RESUME NORMALLY, measured rather than assumed: `git diff v0.8.0.11..v0.8.0.12 -- src/engine/` is EMPTY. The release is the server's HTTP surface, the client and the docs. The codes live in memory and are deliberately not persisted, so nothing new reaches the volume and there is nothing to migrate. README, instructions.md and the release notes in all five locales say so. NOT YET EXERCISED END TO END: the two routes and the action are typechecked and the claim store is unit-tested, but nothing has run them against a live server. This build is what makes that possible. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nnuCv8UodHucFfx3LWEoX
This commit is contained in:
@@ -35,6 +35,17 @@ watches the table — there is nothing else to open.
|
||||
Solitaire runs entirely in your own browser and needs nothing from the server, so it works here
|
||||
exactly as it does on the public Station Master site.
|
||||
|
||||
**What changed in 0.8.0.12. Games already running on this server are not affected** — they resume
|
||||
normally; no rule changed.
|
||||
|
||||
**A player who cannot get back into their game can be let back in.** The only proof of who you are is
|
||||
kept by your own browser, so clearing your browsing data, coming back in a private window, or sitting
|
||||
down at a different browser makes you look like a stranger — an empty lobby, no game code, no name —
|
||||
even though the game is still running and the seat is still yours. The new **Restore a Seat** action
|
||||
hands you a link for that player; opening it in their own browser puts them straight back where they
|
||||
were. It works once, expires after 30 minutes, and whoever opens it takes that seat, so send it to that
|
||||
person rather than posting it somewhere public. See **Restore a Seat** below.
|
||||
|
||||
**What changed in 0.8.0.11. Games already running on this server are not affected** — they resume
|
||||
normally; no rule changed.
|
||||
|
||||
@@ -284,6 +295,20 @@ a game that will never be finished — otherwise it sits there, and comes back e
|
||||
service restarts. It cannot be undone, so the game's save is handed back to you when it happens:
|
||||
that text is the only copy left, so keep it if the game was worth watching.
|
||||
|
||||
### Restore a Seat
|
||||
|
||||
Use this when a player cannot get back into a game they are already in — they open the page and find
|
||||
an empty lobby, with no game code and no name filled in, as though they had never joined.
|
||||
|
||||
That happens because the only proof of who you are is kept by your own browser. Clear your browsing
|
||||
data, come back in a private window, or sit down at a different browser, and that proof is gone —
|
||||
even though the game is still running on the server and the seat is still yours.
|
||||
|
||||
Pick the player from the list and this hands you a link. Send it to them, and opening it in their own
|
||||
browser puts them straight back in their seat. **The link works once and expires after 30 minutes**,
|
||||
and whoever opens it takes that seat — so send it to that person directly rather than posting it
|
||||
somewhere public. If it expires before they get to it, just run the action again.
|
||||
|
||||
> **Games in progress normally survive an update of this service.** When the update changes the
|
||||
> rules of the game itself, a half-played game cannot be resumed under rules it was not played by,
|
||||
> and that game is set aside rather than continued — you would see it disappear from the lobby.
|
||||
|
||||
Reference in New Issue
Block a user