0.7.8:0 — bundle Station Master v0.7.8
Submodule pinned to v0.7.8 (193800a). current.ts bumped in place at 0.7.8:0 — no new version file, no migration: the change is which screen a solitaire visit lands on, plus the splash footer's wording. Both are client-side, and a solitaire save lives in the browser rather than on this server, so nothing here is involved either way. 0.7.5 skipped the setup screen whenever the browser held a save, and any browser that has ever played solitaire holds one — so the door could never reach the screen again. The door outranks a save now; a bare reload still resumes; #ss-resume keeps the game in progress reachable since Deal clears it. Verified on phoenix.local against what the server returns: the door carries ?solitaire, play.html carries #ss-resume and #ss-saved-note, the footer names both ways to play, and the build tag is 0.7.8-mtfaojtv. Migration 0.7.7:0 -> 0.7.8:0 ran empty and both multiplayer games in progress (WHISTLE-4086, COAL-7370) resumed with their same intent counts. The behaviour itself is covered by four new tests upstream that reproduce the reported state (door + existing save) rather than by reading served output — which is what the two previous attempts did, and why they were reported as verified while still being wrong. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdG46Ja2PEDBkpqiDazMoX
This commit is contained in:
@@ -13,8 +13,22 @@ 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.7.** Fixes the client caching that stopped the two releases before it from
|
**Bundled version: 0.7.8.** Makes the solitaire setup screen reachable at all. 0.7.5 skipped it
|
||||||
ever reaching a browser. `build-web.ts` stamps a build tag onto every module URL as a cache key, and
|
whenever `load()` found a saved game — reasoned as "a saved game is a game to resume" — and a browser
|
||||||
|
that has ever played solitaire always has one, so the door could never reach the screen again. The
|
||||||
|
door (`?solitaire`) outranks a save now; a bare reload still resumes. Since dealing calls
|
||||||
|
`clearSave()`, the screen carries a **Continue saved game** button and states what Deal costs, so the
|
||||||
|
door cannot destroy a game in progress. A solitaire save is browser-side, so nothing on this server
|
||||||
|
is involved either way. The splash footer also now names both ways to play.
|
||||||
|
|
||||||
|
**This was reported three times before it was found, and the first two fixes were real bugs that were
|
||||||
|
not it** — a routing fault (0.7.6) and a caching fault (0.7.7). Both were reported as verified, and
|
||||||
|
both verifications read what the SERVER returned rather than exercising the path with the state a
|
||||||
|
returning player actually has. What found it was a failing test written before the fix. Worth knowing
|
||||||
|
when the next "that didn't work" arrives: reproduce the reporter's state first.
|
||||||
|
|
||||||
|
**0.7.7 fixed the client caching** that stopped the two releases before it from ever reaching a
|
||||||
|
browser. `build-web.ts` stamps a build tag onto every module URL as a cache key, and
|
||||||
its fallback when `git rev-parse` fails was the literal `nogit` — which is precisely the `.s9pk`
|
its fallback when `git rev-parse` fails was the literal `nogit` — which is precisely the `.s9pk`
|
||||||
case, since the Dockerfile copies the working tree in without `.git`. So every packaged release
|
case, since the Dockerfile copies the working tree in without `.git`. So every packaged release
|
||||||
published `./web/main.js?v=nogit`, byte-identical to the one before, and a returning browser refetched
|
published `./web/main.js?v=nogit`, byte-identical to the one before, and a returning browser refetched
|
||||||
|
|||||||
@@ -35,6 +35,13 @@ 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.8.** The solitaire setup screen now appears for everyone. It was being skipped
|
||||||
|
whenever your browser held a saved solitaire game — and any browser that has ever played holds one —
|
||||||
|
so most players never saw it at all. Clicking **Play solitaire** now always asks how you want the
|
||||||
|
game set up. **Your game in progress is safe:** the screen offers **Continue saved game**, and says
|
||||||
|
plainly that dealing a new one replaces it. Simply reopening the page still picks up where you left
|
||||||
|
off, exactly as before. The homepage footer now names both ways to play, too.
|
||||||
|
|
||||||
**What changed in 0.7.7.** Updates to this service now actually reach your browser. Until now every
|
**What changed in 0.7.7.** Updates to this service now actually reach your browser. Until now every
|
||||||
release published its files under the same cache name and the server never told browsers when to
|
release published its files under the same cache name and the server never told browsers when to
|
||||||
look again, so returning players kept running whatever version their browser had already stored —
|
look again, so returning players kept running whatever version their browser had already stored —
|
||||||
|
|||||||
+48
-47
@@ -5,62 +5,63 @@ 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.7:0',
|
version: '0.7.8:0',
|
||||||
releaseNotes: {
|
releaseNotes: {
|
||||||
en_US:
|
en_US:
|
||||||
'Bundles Station Master v0.7.7 \u2014 updates now actually reach your browser. Every packaged ' +
|
'Bundles Station Master v0.7.8 \u2014 the solitaire setup screen finally works for everyone. It was ' +
|
||||||
'release until now published its files under the same cache key, and the server never told ' +
|
'skipped whenever your browser held a saved solitaire game, and any browser that has ever ' +
|
||||||
'browsers when to look again, so a returning player kept running whichever version their ' +
|
'played holds one, so most players never saw it at all. Clicking Play solitaire now always ' +
|
||||||
'browser had already stored: the v0.7.5 solitaire setup screen and the v0.7.6 fix to it were ' +
|
'asks how you want the game set up. Your game in progress is safe: the screen offers Continue ' +
|
||||||
'both installed correctly and neither was ever seen. Each build now carries its own key and ' +
|
'saved game, and says plainly that dealing a new one replaces it. Simply reopening the page ' +
|
||||||
"the pages are marked to revalidate, so this is the last update you'll have to open a private " +
|
'still resumes where you left off, as before. The homepage footer now also names both ways to ' +
|
||||||
'window to see. No rules changed; games in progress are unaffected.',
|
'play. No rules changed; games in progress are unaffected.',
|
||||||
es_ES:
|
es_ES:
|
||||||
'Incluye Station Master v0.7.7: las actualizaciones ahora llegan de verdad a tu navegador. Hasta ' +
|
'Incluye Station Master v0.7.8: la pantalla de configuraci\u00f3n del solitario por fin funciona para ' +
|
||||||
'ahora, cada versi\u00f3n empaquetada publicaba sus archivos bajo la misma clave de cach\u00e9, y el ' +
|
'todos. Se omit\u00eda siempre que el navegador ten\u00eda una partida de solitario guardada, y cualquier ' +
|
||||||
'servidor nunca indicaba a los navegadores cu\u00e1ndo volver a mirar, as\u00ed que quien regresaba segu\u00eda ' +
|
'navegador que haya jugado alguna vez tiene una, as\u00ed que la mayor\u00eda de los jugadores nunca la ' +
|
||||||
'ejecutando la versi\u00f3n que su navegador ya ten\u00eda guardada: la pantalla de configuraci\u00f3n del ' +
|
'vio. Al pulsar Jugar en solitario ahora siempre se te pregunta c\u00f3mo quieres configurar la ' +
|
||||||
'solitario de la v0.7.5 y su correcci\u00f3n en la v0.7.6 se instalaron correctamente y nunca se ' +
|
'partida. Tu partida en curso est\u00e1 a salvo: la pantalla ofrece Continuar partida guardada e ' +
|
||||||
'vieron. Ahora cada compilaci\u00f3n lleva su propia clave y las p\u00e1ginas se marcan para revalidarse, ' +
|
'indica claramente que repartir una nueva la reemplaza. Volver a abrir la p\u00e1gina sigue ' +
|
||||||
'as\u00ed que esta es la \u00faltima actualizaci\u00f3n que tendr\u00e1s que abrir en una ventana privada para ver. ' +
|
'retom\u00e1ndola donde la dejaste, como antes. El pie de la p\u00e1gina de inicio ahora tambi\u00e9n nombra ' +
|
||||||
'Las reglas no han cambiado; las partidas en curso no se ven afectadas.',
|
'las dos formas de jugar. Las reglas no han cambiado; las partidas en curso no se ven afectadas.',
|
||||||
de_DE:
|
de_DE:
|
||||||
'Enth\u00e4lt Station Master v0.7.7 \u2014 Aktualisierungen erreichen jetzt tats\u00e4chlich deinen Browser. ' +
|
'Enth\u00e4lt Station Master v0.7.8 \u2014 der Solo-Einrichtungsbildschirm funktioniert endlich f\u00fcr alle. ' +
|
||||||
'Bisher ver\u00f6ffentlichte jede paketierte Version ihre Dateien unter demselben Cache-Schl\u00fcssel, ' +
|
'Er wurde \u00fcbersprungen, sobald der Browser ein gespeichertes Solospiel hielt, und jeder Browser, ' +
|
||||||
'und der Server teilte Browsern nie mit, wann sie erneut nachsehen sollten. Wer zur\u00fcckkam, ' +
|
'der je gespielt hat, h\u00e4lt eines \u2014 die meisten Spieler sahen ihn also nie. Ein Klick auf Solo ' +
|
||||||
'f\u00fchrte also weiter die Version aus, die sein Browser bereits gespeichert hatte: der ' +
|
'spielen fragt jetzt immer, wie das Spiel eingerichtet werden soll. Dein laufendes Spiel ist ' +
|
||||||
'Solo-Einrichtungsbildschirm aus v0.7.5 und dessen Korrektur in v0.7.6 wurden beide korrekt ' +
|
'sicher: der Bildschirm bietet Gespeichertes Spiel fortsetzen und sagt deutlich, dass ein neues ' +
|
||||||
'installiert und nie gesehen. Jeder Build tr\u00e4gt nun seinen eigenen Schl\u00fcssel, und die Seiten ' +
|
'Austeilen es ersetzt. Die Seite einfach erneut zu \u00f6ffnen setzt wie bisher dort fort, wo du ' +
|
||||||
'sind zur erneuten Pr\u00fcfung markiert \u2014 dies ist also die letzte Aktualisierung, f\u00fcr die du ein ' +
|
'aufgeh\u00f6rt hast. Die Fu\u00dfzeile der Startseite nennt jetzt au\u00dferdem beide Spielarten. Keine ' +
|
||||||
'privates Fenster \u00f6ffnen musst. Keine Regel\u00e4nderungen; laufende Spiele sind nicht betroffen.',
|
'Regel\u00e4nderungen; laufende Spiele sind nicht betroffen.',
|
||||||
pl_PL:
|
pl_PL:
|
||||||
'Zawiera Station Master v0.7.7 \u2014 aktualizacje naprawd\u0119 docieraj\u0105 teraz do twojej przegl\u0105darki. ' +
|
'Zawiera Station Master v0.7.8 \u2014 ekran ustawie\u0144 gry solo wreszcie dzia\u0142a dla wszystkich. By\u0142 ' +
|
||||||
'Do tej pory ka\u017cde wydanie publikowa\u0142o swoje pliki pod tym samym kluczem pami\u0119ci podr\u0119cznej, a ' +
|
'pomijany zawsze, gdy przegl\u0105darka przechowywa\u0142a zapisan\u0105 gr\u0119 solo, a ka\u017cda przegl\u0105darka, kt\u00f3ra ' +
|
||||||
'serwer nigdy nie m\u00f3wi\u0142 przegl\u0105darkom, kiedy sprawdzi\u0107 ponownie, wi\u0119c powracaj\u0105cy gracz nadal ' +
|
'kiedykolwiek gra\u0142a, tak\u0105 przechowuje \u2014 wi\u0119c wi\u0119kszo\u015b\u0107 graczy nigdy go nie zobaczy\u0142a. ' +
|
||||||
'uruchamia\u0142 t\u0119 wersj\u0119, kt\u00f3r\u0105 jego przegl\u0105darka ju\u017c zapisa\u0142a: ekran ustawie\u0144 gry solo z v0.7.5 i ' +
|
'Klikni\u0119cie Zagraj solo zawsze pyta teraz, jak chcesz ustawi\u0107 gr\u0119. Twoja gra w toku jest ' +
|
||||||
'jego poprawka z v0.7.6 zosta\u0142y poprawnie zainstalowane i nigdy nie zosta\u0142y zobaczone. Ka\u017cda ' +
|
'bezpieczna: ekran oferuje Kontynuuj zapisan\u0105 gr\u0119 i jasno m\u00f3wi, \u017ce rozdanie nowej j\u0105 zast\u0105pi. ' +
|
||||||
'kompilacja ma teraz w\u0142asny klucz, a strony s\u0105 oznaczone do ponownej weryfikacji \u2014 to wi\u0119c ' +
|
'Zwyk\u0142e ponowne otwarcie strony nadal wznawia gr\u0119 w miejscu, w kt\u00f3rym sko\u0144czy\u0142e\u015b. Stopka strony ' +
|
||||||
'ostatnia aktualizacja, kt\u00f3r\u0105 trzeba otworzy\u0107 w oknie prywatnym, \u017ceby j\u0105 zobaczy\u0107. Zasady si\u0119 ' +
|
'g\u0142\u00f3wnej wymienia teraz r\u00f3wnie\u017c oba sposoby gry. Zasady si\u0119 nie zmieni\u0142y; gry w toku nie s\u0105 ' +
|
||||||
'nie zmieni\u0142y; gry w toku nie s\u0105 dotkni\u0119te.',
|
'dotkni\u0119te.',
|
||||||
fr_FR:
|
fr_FR:
|
||||||
'Inclut Station Master v0.7.7 \u2014 les mises \u00e0 jour atteignent enfin r\u00e9ellement votre navigateur. ' +
|
"Inclut Station Master v0.7.8 \u2014 l'\u00e9cran de configuration du solo fonctionne enfin pour tout le " +
|
||||||
"Jusqu'ici, chaque version empaquet\u00e9e publiait ses fichiers sous la m\u00eame cl\u00e9 de cache, et le " +
|
'monde. Il \u00e9tait ignor\u00e9 d\u00e8s que le navigateur d\u00e9tenait une partie solo sauvegard\u00e9e, et tout ' +
|
||||||
'serveur ne disait jamais aux navigateurs quand regarder \u00e0 nouveau : un joueur qui revenait ' +
|
'navigateur ayant d\u00e9j\u00e0 jou\u00e9 en d\u00e9tient une : la plupart des joueurs ne l\u2019ont donc jamais vu. ' +
|
||||||
"continuait donc d'ex\u00e9cuter la version que son navigateur avait d\u00e9j\u00e0 stock\u00e9e. L'\u00e9cran de " +
|
'Cliquer sur Jouer en solitaire demande d\u00e9sormais toujours comment configurer la partie. Votre ' +
|
||||||
'configuration du solo de la v0.7.5 et son correctif en v0.7.6 ont tous deux \u00e9t\u00e9 install\u00e9s ' +
|
'partie en cours est en s\u00e9curit\u00e9 : l\u2019\u00e9cran propose Continuer la partie sauvegard\u00e9e et indique ' +
|
||||||
'correctement et ne furent jamais vus. Chaque build porte d\u00e9sormais sa propre cl\u00e9 et les pages ' +
|
'clairement qu\u2019en distribuer une nouvelle la remplace. Rouvrir simplement la page reprend ' +
|
||||||
'sont marqu\u00e9es \u00e0 revalider : voici donc la derni\u00e8re mise \u00e0 jour que vous devrez ouvrir dans une ' +
|
'toujours o\u00f9 vous en \u00e9tiez. Le pied de page de l\u2019accueil nomme maintenant les deux fa\u00e7ons de ' +
|
||||||
"fen\u00eatre priv\u00e9e pour la voir. Aucune r\u00e8gle n'a chang\u00e9 ; les parties en cours ne sont pas " +
|
"jouer. Aucune r\u00e8gle n'a chang\u00e9 ; les parties en cours ne sont pas affect\u00e9es.",
|
||||||
'affect\u00e9es.',
|
|
||||||
},
|
},
|
||||||
migrations: {
|
migrations: {
|
||||||
/**
|
/**
|
||||||
* STILL NOTHING TO CARRY. v0.7.7 fixes how the built client is CACHED, not what it does: every
|
* STILL NOTHING TO CARRY. v0.7.8 changes which SCREEN a solitaire visit lands on — the setup
|
||||||
* packaged build published the same cache key (`?v=nogit` — the `.s9pk` build has no `.git` for
|
* screen was skipped whenever the browser held a save, so a returning player never saw it — plus
|
||||||
* `git rev-parse`) and the server sent no `Cache-Control` at all, so two correct releases never
|
* the splash footer's wording. Both are client-side; no rule the engine enforces and no
|
||||||
* reached the browsers that asked for them. A build tag that varies and a revalidate header are
|
* save-format change.
|
||||||
* both static-file concerns: no rule the engine enforces, no save-format change. A game in
|
*
|
||||||
* progress, on the server or in a browser, resumes exactly as it would have on v0.7.6.
|
* A SOLITAIRE SAVE LIVES IN THE BROWSER, not on this server, so nothing here can touch it either
|
||||||
|
* way: `#ss-resume` is what keeps it reachable, and only the player's own Deal clears it. A
|
||||||
|
* multiplayer game in progress resumes exactly as it would have on v0.7.7.
|
||||||
*/
|
*/
|
||||||
up: async ({ effects }) => {},
|
up: async ({ effects }) => {},
|
||||||
down: IMPOSSIBLE,
|
down: IMPOSSIBLE,
|
||||||
|
|||||||
+1
-1
Submodule station-master updated: af68aac78d...193800a649
Reference in New Issue
Block a user