From e84c6400674318e4012374559df80d4d021a2f06 Mon Sep 17 00:00:00 2001 From: Jesse Date: Fri, 21 Aug 2026 21:56:58 -0400 Subject: [PATCH] Bundle Station Master v0.6.0: updates stop destroying games in progress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pin moves to v0.6.0, package version to 0.6.0:0. README and instructions.md both promised the opposite of what now happens and had to be rewritten: an update keeps games in progress unless the rules actually changed, and a game that genuinely cannot replay is named in the log rather than described as a version mismatch. Verified on phoenix.local by doing the thing the release is about. A game (MAIL-4571) was created on the installed 0.5.6:0, then this build was installed over it. All four saved games on the volume came back: Resuming 4 saved game(s)… Resumed HOPPER-4607 — 37 intents replayed. (written under 0.5.2) Resumed TRESTLE-5109 — 5 intents replayed. (written under 0.5.3) Resumed TENDER-8092 — 38 intents replayed. (written under 0.5.5) Resumed MAIL-4571 — 0 intents replayed. (written under 0.5.6) The first three had been refused on every boot since the release that stranded them. They were never damaged, only unreachable, and replaying them is all it took to get them back — which is the clearest evidence that the version comparison was answering the wrong question. All four now show in Games in Progress with the correct Day, Stage and waiting-on player. --- README.md | 15 +++++++++------ instructions.md | 9 ++++----- startos/versions/current.ts | 32 ++++++++++++++++---------------- station-master | 2 +- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 79010d9..96052d4 100644 --- a/README.md +++ b/README.md @@ -96,12 +96,15 @@ and a critical task is raised pointing at **Get Join Secret** — the service st the moment the daemon is healthy, but a player cannot create or join a game until the join secret has been retrieved and shared with them. -**Updating the package ends every game in progress.** A save records the engine version that wrote -it and the server refuses to resume one recorded under different rules, logging the refusal and -leaving the file untouched. This is upstream's deliberate design, not something this package works -around: a move that was legal under the old rules may not be under the new ones. Let games finish -before updating, or accept losing them — rolling the package version back makes them loadable -again, since nothing is deleted. +**Updating the package keeps games in progress, unless the rules actually changed.** On boot the +server replays each saved game's moves through the current engine and resumes it if they all still +apply — the version that wrote the file is recorded and reported but decides nothing. When a move +*is* rejected, that game is refused and the log names it: `move 3 of 8 (localOps.choose) is +rejected by the current rules with OPTION_ALREADY_CHOSEN`. A refused game is never modified or +deleted, so reinstalling the previous version makes it loadable again and it can be played out. + +Earlier versions of this package compared version strings instead, which destroyed every game in +progress on every update, including updates that changed only how the board is drawn. ## Actions diff --git a/instructions.md b/instructions.md index 34baba0..f96fa3b 100644 --- a/instructions.md +++ b/instructions.md @@ -60,8 +60,7 @@ 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. -> One thing to know before you update this service: **games in progress do not survive an -> update.** The rules can change between versions, so a half-played game recorded under the old -> ones is refused rather than resumed under rules it was not played by. Nothing is deleted, and -> going back to the previous version makes them playable again — but the safe habit is to finish -> games before updating. +> **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. +> Nothing is ever deleted, so going back to the previous version makes it playable again. diff --git a/startos/versions/current.ts b/startos/versions/current.ts index 876c909..9692bf9 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -4,28 +4,28 @@ export const current = VersionInfo.of({ // `:` — the upstream half tracks the bundled Station Master tag exactly // (`versions.md`'s consistency checklist), so bumping the submodule pin and bumping this are one // action. The downstream half moves only for packaging-only changes. - version: '0.5.6:0', + version: '0.6.0:0', releaseNotes: { en_US: - 'Bundles Station Master v0.5.6. Seats are numbered from 1 rather than 0 everywhere a person ' + - "reads them, the current player's name on the Division map is legible again, and the " + - 'west-to-east seating line appears only while the game is opening.', + 'Bundles Station Master v0.6.0. Games in progress now survive an update of this service, so long ' + + 'as the rules did not change. The lobby lets the host set every game setting, and the Employee ' + + 'Rotation optional rule is playable.', es_ES: - 'Incluye Station Master v0.5.6. Los asientos se numeran desde 1 en lugar de 0 allí donde los ' + - 'lee una persona, el nombre del jugador en turno vuelve a ser legible en el mapa de la ' + - 'División, y la línea de asientos solo aparece al comenzar la partida.', + 'Incluye Station Master v0.6.0. Las partidas en curso sobreviven a una actualización de este ' + + 'servicio, siempre que las reglas no hayan cambiado. La sala permite al anfitrión ajustar todas ' + + 'las opciones, y la regla opcional de Rotación de Empleados ya se puede jugar.', de_DE: - 'Enthält Station Master v0.5.6. Plätze werden überall, wo ein Mensch sie liest, ab 1 statt ab 0 ' + - 'gezählt, der Name des Spielers am Zug ist auf der Divisionskarte wieder lesbar, und die ' + - 'Sitzreihenfolge erscheint nur noch zu Spielbeginn.', + 'Enthält Station Master v0.6.0. Laufende Spiele überstehen jetzt ein Update dieses Dienstes, ' + + 'sofern sich die Regeln nicht geändert haben. In der Lobby stellt der Gastgeber alle ' + + 'Spieloptionen ein, und die optionale Regel Employee Rotation ist spielbar.', pl_PL: - 'Zawiera Station Master v0.5.6. Miejsca są numerowane od 1 zamiast od 0 wszędzie tam, gdzie ' + - 'czyta je człowiek, nazwa gracza wykonującego ruch jest znów czytelna na mapie Dywizji, a ' + - 'linia kolejności miejsc pojawia się tylko na początku gry.', + 'Zawiera Station Master v0.6.0. Gry w toku przetrwają teraz aktualizację tej usługi, o ile ' + + 'zasady się nie zmieniły. W poczekalni gospodarz ustawia wszystkie opcje gry, a zasada ' + + 'opcjonalna Employee Rotation jest już grywalna.', fr_FR: - 'Inclut Station Master v0.5.6. Les places sont numérotées à partir de 1 plutôt que de 0 ' + - 'partout où une personne les lit, le nom du joueur dont c’est le tour est de nouveau lisible ' + - 'sur la carte de la Division, et la ligne des places n’apparaît qu’au début de la partie.', + 'Inclut Station Master v0.6.0. Les parties en cours survivent désormais à une mise à jour de ce ' + + 'service, tant que les règles n’ont pas changé. Le salon permet à l’hôte de régler toutes les ' + + 'options, et la règle optionnelle Employee Rotation est jouable.', }, migrations: { up: async ({ effects }) => {}, diff --git a/station-master b/station-master index 5171049..40f07b0 160000 --- a/station-master +++ b/station-master @@ -1 +1 @@ -Subproject commit 51710498f54c55a32380badba5157b0a0dfb65c3 +Subproject commit 40f07b0710628c226467b25b017d3395d2ee72a7