0.7.6:0 — bundle Station Master v0.7.6

Submodule pinned to v0.7.6 (b4f09f0). current.ts bumped in place at
0.7.6:0 — no new version file, no migration: fixes a client-side
routing bug in the solitaire door that v0.7.5 introduced (a browser
that had ever held a multiplayer seat could not reach the new setup
screen at all), so every game in progress carries over without
exception.

Verified: npm run check clean, prettier clean, make x86 packs as
v0.7.6:0, installed on phoenix.local — logs show the empty migration
running and both games in progress (WHISTLE-4086, COAL-7370) resuming
with their same intent counts, and the served index.html confirmed to
link the solitaire door to ./play.html?solitaire.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AdG46Ja2PEDBkpqiDazMoX
This commit is contained in:
Jesse
2026-08-29 21:52:56 -04:00
co-authored by Claude Sonnet 5
parent 3fc56de203
commit 590ff5fa0b
4 changed files with 55 additions and 50 deletions
+10 -4
View File
@@ -13,10 +13,16 @@ Station Master is a railroad operations board game with an authoritative multipl
solitaire needs no server and is not what this package is for. This package runs that server — solitaire needs no server and is not what this package is for. This package runs that server —
the browser client, the lobby, and the intent/SSE API — as a single StartOS service. the browser client, the lobby, and the intent/SSE API — as a single StartOS service.
**Bundled version: 0.7.5.** A client-side flow change: a genuinely fresh visit to the solitaire page **Bundled version: 0.7.6.** Fixes the solitaire door 0.7.5 introduced: a browser that had ever held a
now opens a setup screen and asks for the game's options before dealing, the same question the multiplayer seat could not reach the new setup screen at all — a bare page load could not tell
multiplayer lobby has asked before a game starts since 0.6.0. No rule the server enforces changed, "clicked Play solitaire" apart from "reloaded mid multiplayer game", so the door lost to whatever
so this update carries every game in progress, on the server and in a browser, without exception. game or lobby that browser last touched. The door now marks its intent explicitly (`?solitaire`), the
same fix `?lobby` already carries for the door on the other side. Client-side only; every game in
progress carries over.
**0.7.5 was a client-side flow change**: a genuinely fresh visit to the solitaire page opens a setup
screen and asks for the game's options before dealing, the same question the multiplayer lobby has
asked before a game starts since 0.6.0.
**0.7.4 bundled three rules corrections** off the tracker (Gitea#13, #5, #19), all of them places **0.7.4 bundled three rules corrections** off the tracker (Gitea#13, #5, #19), all of them places
where the code and the cards disagreed. where the code and the cards disagreed.
+5
View File
@@ -35,6 +35,11 @@ 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 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. exactly as it does on the public Station Master site.
**What changed in 0.7.6.** The **Play solitaire** door on the front page now reliably reaches
solitaire. If this browser had ever taken a seat at a multiplayer table, the door used to lose to
that game or lobby instead — a plain page load couldn't tell "I clicked Play solitaire" apart from
"I reloaded mid multiplayer game". Fixed; nothing else changed.
**What changed in 0.7.5.** Solitaire now asks before it deals. A genuinely fresh visit to the **What changed in 0.7.5.** Solitaire now asks before it deals. A genuinely fresh visit to the
solitaire page opens a setup screen with the full set of options — game type, starting hand, where solitaire page opens a setup screen with the full set of options — game type, starting hand, where
an Extra may start, the revenue rates, victory conditions, and the optional rules — the same an Extra may start, the revenue rates, victory conditions, and the optional rules — the same
+39 -45
View File
@@ -5,60 +5,54 @@ export const current = VersionInfo.of({
// (`versions.md`'s consistency checklist), so bumping the submodule pin and bumping this are one // (`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, and RESETS to `:0` when the // action. The downstream half moves only for packaging-only changes, and RESETS to `:0` when the
// upstream half moves. // upstream half moves.
version: '0.7.5:0', version: '0.7.6:0',
releaseNotes: { releaseNotes: {
en_US: en_US:
'Bundles Station Master v0.7.5 \u2014 solitaire asks before it deals. A first visit to the solitaire ' + 'Bundles Station Master v0.7.6 \u2014 fixes the solitaire door introduced in v0.7.5. A browser that ' +
'page now opens a setup screen with the full set of options \u2014 game type, starting hand, where an ' + "had ever held a multiplayer seat could not reach solitaire's new setup screen at all: a bare " +
'Extra may start, the revenue rates, victory conditions, and the optional rules \u2014 the same question ' + 'page load could not tell "clicked Play solitaire" apart from "reloaded mid multiplayer game", ' +
"the multiplayer lobby already asks before a game starts. Press Deal when you're ready. A saved game, " + 'so the door lost to whatever game or lobby this browser last touched. The door now marks its ' +
'a shared link carrying a seed, or a setup screen already answered all skip straight past it. Nothing ' + 'intent explicitly, so it reaches solitaire every time. No rules changed, so games in progress ' +
'about the rules changed, so games in progress and saved games are unaffected by this update.', 'are unaffected.',
es_ES: es_ES:
'Incluye Station Master v0.7.5: la partida en solitario pregunta antes de repartir. La primera visita a ' + 'Incluye Station Master v0.7.6: corrige la puerta de solitario introducida en v0.7.5. Un ' +
'la p\u00e1gina de solitario abre ahora una pantalla de configuraci\u00f3n con todas las opciones \u2014 tipo de ' + 'navegador que alguna vez ocup\u00f3 un asiento multijugador no pod\u00eda llegar en absoluto a la nueva ' +
'partida, mano inicial, d\u00f3nde puede empezar un tren Extra, las tarifas de ingresos, las condiciones de ' + 'pantalla de configuraci\u00f3n del solitario: una carga de p\u00e1gina simple no distingu\u00eda "puls\u00e9 Jugar ' +
'victoria y las reglas opcionales \u2014 la misma pregunta que el lobby multijugador ya hace antes de que ' + 'en solitario" de "recargu\u00e9 en medio de una partida multijugador", as\u00ed que la puerta perd\u00eda ' +
'empiece una partida. Pulsa Repartir cuando est\u00e9s listo. Una partida guardada, un enlace compartido ' + 'frente a cualquier partida o sala de espera que ese navegador hubiera tocado por \u00faltima vez. La ' +
'con una semilla, o una pantalla de configuraci\u00f3n ya respondida, la omiten directamente. Las reglas ' + 'puerta ahora marca su intenci\u00f3n expl\u00edcitamente, as\u00ed que llega al solitario siempre. Las reglas ' +
'no han cambiado, as\u00ed que las partidas en curso y las guardadas no se ven afectadas por esta ' + 'no han cambiado, as\u00ed que las partidas en curso no se ven afectadas.',
'actualizaci\u00f3n.',
de_DE: de_DE:
'Enth\u00e4lt Station Master v0.7.5 \u2014 Solospiele fragen jetzt vor dem Austeilen. Ein erster Besuch der ' + 'Enth\u00e4lt Station Master v0.7.6 \u2014 behebt die in v0.7.5 eingef\u00fchrte Solo-T\u00fcr. Ein Browser, der ' +
'Solo-Seite \u00f6ffnet jetzt einen Einrichtungsbildschirm mit allen Optionen \u2014 Spieltyp, Starthand, wo ' + 'jemals einen Mehrspieler-Platz innehatte, konnte den neuen Solo-Einrichtungsbildschirm ' +
'ein Extrazug beginnen darf, die Erl\u00f6ss\u00e4tze, die Siegbedingungen und die optionalen Regeln \u2014 ' + '\u00fcberhaupt nicht erreichen: ein einfacher Seitenaufruf konnte "Solo spielen angeklickt" nicht ' +
'dieselbe Frage, die die Mehrspieler-Lobby schon vor Spielbeginn stellt. Dr\u00fccke Austeilen, wenn du ' + 'von "mitten im Mehrspieler-Spiel neu geladen" unterscheiden, sodass die T\u00fcr gegen jedes Spiel ' +
'bereit bist. Ein gespeichertes Spiel, ein geteilter Link mit einem Seed oder ein bereits beantworteter ' + 'oder jede Lobby verlor, die dieser Browser zuletzt ber\u00fchrt hatte. Die T\u00fcr markiert ihre Absicht ' +
'Einrichtungsbildschirm \u00fcberspringen ihn direkt. An den Regeln hat sich nichts ge\u00e4ndert, laufende ' + 'jetzt ausdr\u00fccklich und erreicht damit immer den Solo-Modus. An den Regeln hat sich nichts ' +
'und gespeicherte Spiele sind von diesem Update nicht betroffen.', 'ge\u00e4ndert, laufende Spiele sind nicht betroffen.',
pl_PL: pl_PL:
'Zawiera Station Master v0.7.5 \u2014 gra solo pyta, zanim rozda karty. Pierwsza wizyta na stronie gry ' + 'Zawiera Station Master v0.7.6 \u2014 naprawia drzwi do gry solo wprowadzone w v0.7.5. Przegl\u0105darka, ' +
'solo otwiera teraz ekran ustawie\u0144 z pe\u0142nym zestawem opcji \u2014 typ gry, pocz\u0105tkowa r\u0119ka, gdzie ' + 'kt\u00f3ra kiedykolwiek zajmowa\u0142a miejsce w grze wieloosobowej, w og\u00f3le nie mog\u0142a dotrze\u0107 do nowego ' +
'mo\u017ce zacz\u0105\u0107 poci\u0105g dodatkowy, stawki przychod\u00f3w, warunki zwyci\u0119stwa i zasady opcjonalne ' + 'ekranu ustawie\u0144 gry solo: zwyk\u0142e wczytanie strony nie odr\u00f3\u017cnia\u0142o "klikni\u0119to Zagraj solo" od ' +
'\u2014 to samo pytanie, kt\u00f3re lobby gry wieloosobowej zadaje ju\u017c przed rozpocz\u0119ciem gry. Naci\u015bnij ' + '"prze\u0142adowano w trakcie gry wieloosobowej", wi\u0119c drzwi przegrywa\u0142y z dowoln\u0105 gr\u0105 lub ' +
'Rozdaj, gdy b\u0119dziesz gotowy. Zapisana gra, udost\u0119pniony link z ziarnem (seed) lub ju\u017c wype\u0142niony ' + 'poczekalni\u0105, kt\u00f3rej ta przegl\u0105darka ostatnio dotkn\u0119\u0142a. Drzwi teraz jawnie oznaczaj\u0105 sw\u00f3j ' +
'ekran ustawie\u0144 pomijaj\u0105 go od razu. Zasady si\u0119 nie zmieni\u0142y, wi\u0119c gry w toku i zapisane gry ' + 'zamiar, wi\u0119c zawsze prowadz\u0105 do gry solo. Zasady si\u0119 nie zmieni\u0142y, wi\u0119c gry w toku nie s\u0105 ' +
'nie s\u0105 dotkni\u0119te t\u0105 aktualizacj\u0105.', 'dotkni\u0119te.',
fr_FR: fr_FR:
'Inclut Station Master v0.7.5 \u2014 la partie solo demande maintenant avant de distribuer. Une premi\u00e8re ' + 'Inclut Station Master v0.7.6 \u2014 corrige la porte solo introduite dans la v0.7.5. Un navigateur ' +
'visite de la page solo ouvre d\u00e9sormais un \u00e9cran de configuration avec toutes les options \u2014 type ' + 'ayant d\u00e9j\u00e0 occup\u00e9 un si\u00e8ge en multijoueur ne pouvait pas du tout atteindre le nouvel \u00e9cran de ' +
'de partie, main de d\u00e9part, o\u00f9 un train suppl\u00e9mentaire peut d\u00e9marrer, les taux de revenu, les ' + 'configuration du solo : un simple chargement de page ne distinguait pas \u00ab a cliqu\u00e9 sur Jouer en ' +
'conditions de victoire et les r\u00e8gles optionnelles \u2014 la m\u00eame question que le lobby multijoueur ' + 'solo \u00bb de \u00ab a recharg\u00e9 en pleine partie multijoueur \u00bb, si bien que la porte perdait face \u00e0 la ' +
"pose d\u00e9j\u00e0 avant le d\u00e9but d'une partie. Appuyez sur Distribuer quand vous \u00eates pr\u00eat. Une partie " + "derni\u00e8re partie ou salle d'attente que ce navigateur avait touch\u00e9e. La porte marque d\u00e9sormais " +
'sauvegard\u00e9e, un lien partag\u00e9 contenant une graine, ou un \u00e9cran de configuration d\u00e9j\u00e0 rempli, ' + "son intention explicitement, elle atteint donc toujours le solo. Les r\u00e8gles n'ont pas chang\u00e9, " +
"passent directement outre. Les r\u00e8gles n'ont pas chang\u00e9, les parties en cours et sauvegard\u00e9es ne " + 'les parties en cours ne sont donc pas affect\u00e9es.',
'sont donc pas affect\u00e9es par cette mise \u00e0 jour.',
}, },
migrations: { migrations: {
/** /**
* NOTHING TO CARRY, AND NOTHING FOR ANY SAVE TO TRIP OVER EITHER. * STILL NOTHING TO CARRY. v0.7.6 fixes a routing bug in the solitaire door that v0.7.5
* * introduced (a browser remembering a multiplayer seat could not reach the setup screen at
* v0.7.5 is a client-side flow change — a setup screen asked before a genuinely fresh solitaire * all) — client-side only, no rule the engine enforces and no save-format change. A game in
* visit deals, matching what the multiplayer lobby already asks before a game starts. It touches * progress, on the server or in a browser, resumes exactly as it would have on v0.7.5.
* no rule the engine enforces and no shape a save or a game record is written in, unlike v0.7.4's
* three rules corrections (see that entry's history for what THAT migration had to reason about).
* A game already in progress, on either the multiplayer server or in a player's browser, resumes
* exactly as it would have on v0.7.4.
*/ */
up: async ({ effects }) => {}, up: async ({ effects }) => {},
down: IMPOSSIBLE, down: IMPOSSIBLE,