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