diff --git a/README.md b/README.md index 7f223ae..a6c468a 100644 --- a/README.md +++ b/README.md @@ -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 — 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 -ever reaching a browser. `build-web.ts` stamps a build tag onto every module URL as a cache key, and +**Bundled version: 0.7.8.** Makes the solitaire setup screen reachable at all. 0.7.5 skipped it +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` 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 diff --git a/instructions.md b/instructions.md index 8ab82e4..feec2bd 100644 --- a/instructions.md +++ b/instructions.md @@ -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 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 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 — diff --git a/startos/versions/current.ts b/startos/versions/current.ts index b8bfb7b..6ab538c 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -5,62 +5,63 @@ export const current = VersionInfo.of({ // (`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 // upstream half moves. - version: '0.7.7:0', + version: '0.7.8:0', releaseNotes: { en_US: - 'Bundles Station Master v0.7.7 \u2014 updates now actually reach your browser. Every packaged ' + - 'release until now published its files under the same cache key, and the server never told ' + - 'browsers when to look again, so a returning player kept running whichever version their ' + - 'browser had already stored: the v0.7.5 solitaire setup screen and the v0.7.6 fix to it were ' + - 'both installed correctly and neither was ever seen. Each build now carries its own key and ' + - "the pages are marked to revalidate, so this is the last update you'll have to open a private " + - 'window to see. No rules changed; games in progress are unaffected.', + 'Bundles Station Master v0.7.8 \u2014 the solitaire setup screen finally works for everyone. It was ' + + '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 resumes where you left off, as before. The homepage footer now also names both ways to ' + + 'play. No rules changed; games in progress are unaffected.', es_ES: - 'Incluye Station Master v0.7.7: las actualizaciones ahora llegan de verdad a tu navegador. Hasta ' + - 'ahora, cada versi\u00f3n empaquetada publicaba sus archivos bajo la misma clave de cach\u00e9, y el ' + - 'servidor nunca indicaba a los navegadores cu\u00e1ndo volver a mirar, as\u00ed que quien regresaba segu\u00eda ' + - 'ejecutando la versi\u00f3n que su navegador ya ten\u00eda guardada: la pantalla de configuraci\u00f3n del ' + - 'solitario de la v0.7.5 y su correcci\u00f3n en la v0.7.6 se instalaron correctamente y nunca se ' + - 'vieron. Ahora cada compilaci\u00f3n lleva su propia clave y las p\u00e1ginas se marcan para revalidarse, ' + - 'as\u00ed que esta es la \u00faltima actualizaci\u00f3n que tendr\u00e1s que abrir en una ventana privada para ver. ' + - 'Las reglas no han cambiado; las partidas en curso no se ven afectadas.', + 'Incluye Station Master v0.7.8: la pantalla de configuraci\u00f3n del solitario por fin funciona para ' + + 'todos. Se omit\u00eda siempre que el navegador ten\u00eda una partida de solitario guardada, y cualquier ' + + 'navegador que haya jugado alguna vez tiene una, as\u00ed que la mayor\u00eda de los jugadores nunca la ' + + 'vio. Al pulsar Jugar en solitario ahora siempre se te pregunta c\u00f3mo quieres configurar la ' + + 'partida. Tu partida en curso est\u00e1 a salvo: la pantalla ofrece Continuar partida guardada e ' + + 'indica claramente que repartir una nueva la reemplaza. Volver a abrir la p\u00e1gina sigue ' + + 'retom\u00e1ndola donde la dejaste, como antes. El pie de la p\u00e1gina de inicio ahora tambi\u00e9n nombra ' + + 'las dos formas de jugar. Las reglas no han cambiado; las partidas en curso no se ven afectadas.', de_DE: - 'Enth\u00e4lt Station Master v0.7.7 \u2014 Aktualisierungen erreichen jetzt tats\u00e4chlich deinen Browser. ' + - 'Bisher ver\u00f6ffentlichte jede paketierte Version ihre Dateien unter demselben Cache-Schl\u00fcssel, ' + - 'und der Server teilte Browsern nie mit, wann sie erneut nachsehen sollten. Wer zur\u00fcckkam, ' + - 'f\u00fchrte also weiter die Version aus, die sein Browser bereits gespeichert hatte: der ' + - 'Solo-Einrichtungsbildschirm aus v0.7.5 und dessen Korrektur in v0.7.6 wurden beide korrekt ' + - 'installiert und nie gesehen. Jeder Build tr\u00e4gt nun seinen eigenen Schl\u00fcssel, und die Seiten ' + - 'sind zur erneuten Pr\u00fcfung markiert \u2014 dies ist also die letzte Aktualisierung, f\u00fcr die du ein ' + - 'privates Fenster \u00f6ffnen musst. Keine Regel\u00e4nderungen; laufende Spiele sind nicht betroffen.', + 'Enth\u00e4lt Station Master v0.7.8 \u2014 der Solo-Einrichtungsbildschirm funktioniert endlich f\u00fcr alle. ' + + 'Er wurde \u00fcbersprungen, sobald der Browser ein gespeichertes Solospiel hielt, und jeder Browser, ' + + 'der je gespielt hat, h\u00e4lt eines \u2014 die meisten Spieler sahen ihn also nie. Ein Klick auf Solo ' + + 'spielen fragt jetzt immer, wie das Spiel eingerichtet werden soll. Dein laufendes Spiel ist ' + + 'sicher: der Bildschirm bietet Gespeichertes Spiel fortsetzen und sagt deutlich, dass ein neues ' + + 'Austeilen es ersetzt. Die Seite einfach erneut zu \u00f6ffnen setzt wie bisher dort fort, wo du ' + + 'aufgeh\u00f6rt hast. Die Fu\u00dfzeile der Startseite nennt jetzt au\u00dferdem beide Spielarten. Keine ' + + 'Regel\u00e4nderungen; laufende Spiele sind nicht betroffen.', pl_PL: - 'Zawiera Station Master v0.7.7 \u2014 aktualizacje naprawd\u0119 docieraj\u0105 teraz do twojej przegl\u0105darki. ' + - 'Do tej pory ka\u017cde wydanie publikowa\u0142o swoje pliki pod tym samym kluczem pami\u0119ci podr\u0119cznej, a ' + - 'serwer nigdy nie m\u00f3wi\u0142 przegl\u0105darkom, kiedy sprawdzi\u0107 ponownie, wi\u0119c powracaj\u0105cy gracz nadal ' + - '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 ' + - 'jego poprawka z v0.7.6 zosta\u0142y poprawnie zainstalowane i nigdy nie zosta\u0142y zobaczone. Ka\u017cda ' + - 'kompilacja ma teraz w\u0142asny klucz, a strony s\u0105 oznaczone do ponownej weryfikacji \u2014 to wi\u0119c ' + - 'ostatnia aktualizacja, kt\u00f3r\u0105 trzeba otworzy\u0107 w oknie prywatnym, \u017ceby j\u0105 zobaczy\u0107. Zasady si\u0119 ' + - 'nie zmieni\u0142y; gry w toku nie s\u0105 dotkni\u0119te.', + 'Zawiera Station Master v0.7.8 \u2014 ekran ustawie\u0144 gry solo wreszcie dzia\u0142a dla wszystkich. By\u0142 ' + + 'pomijany zawsze, gdy przegl\u0105darka przechowywa\u0142a zapisan\u0105 gr\u0119 solo, a ka\u017cda przegl\u0105darka, kt\u00f3ra ' + + 'kiedykolwiek gra\u0142a, tak\u0105 przechowuje \u2014 wi\u0119c wi\u0119kszo\u015b\u0107 graczy nigdy go nie zobaczy\u0142a. ' + + 'Klikni\u0119cie Zagraj solo zawsze pyta teraz, jak chcesz ustawi\u0107 gr\u0119. Twoja gra w toku jest ' + + 'bezpieczna: ekran oferuje Kontynuuj zapisan\u0105 gr\u0119 i jasno m\u00f3wi, \u017ce rozdanie nowej j\u0105 zast\u0105pi. ' + + 'Zwyk\u0142e ponowne otwarcie strony nadal wznawia gr\u0119 w miejscu, w kt\u00f3rym sko\u0144czy\u0142e\u015b. Stopka strony ' + + 'g\u0142\u00f3wnej wymienia teraz r\u00f3wnie\u017c oba sposoby gry. Zasady si\u0119 nie zmieni\u0142y; gry w toku nie s\u0105 ' + + 'dotkni\u0119te.', fr_FR: - 'Inclut Station Master v0.7.7 \u2014 les mises \u00e0 jour atteignent enfin r\u00e9ellement votre navigateur. ' + - "Jusqu'ici, chaque version empaquet\u00e9e publiait ses fichiers sous la m\u00eame cl\u00e9 de cache, et le " + - 'serveur ne disait jamais aux navigateurs quand regarder \u00e0 nouveau : un joueur qui revenait ' + - "continuait donc d'ex\u00e9cuter la version que son navigateur avait d\u00e9j\u00e0 stock\u00e9e. L'\u00e9cran de " + - 'configuration du solo de la v0.7.5 et son correctif en v0.7.6 ont tous deux \u00e9t\u00e9 install\u00e9s ' + - 'correctement et ne furent jamais vus. Chaque build porte d\u00e9sormais sa propre cl\u00e9 et les pages ' + - 'sont marqu\u00e9es \u00e0 revalider : voici donc la derni\u00e8re mise \u00e0 jour que vous devrez ouvrir dans une ' + - "fen\u00eatre priv\u00e9e pour la voir. Aucune r\u00e8gle n'a chang\u00e9 ; les parties en cours ne sont pas " + - 'affect\u00e9es.', + "Inclut Station Master v0.7.8 \u2014 l'\u00e9cran de configuration du solo fonctionne enfin pour tout le " + + 'monde. Il \u00e9tait ignor\u00e9 d\u00e8s que le navigateur d\u00e9tenait une partie solo sauvegard\u00e9e, et tout ' + + 'navigateur ayant d\u00e9j\u00e0 jou\u00e9 en d\u00e9tient une : la plupart des joueurs ne l\u2019ont donc jamais vu. ' + + 'Cliquer sur Jouer en solitaire demande d\u00e9sormais toujours comment configurer la partie. Votre ' + + 'partie en cours est en s\u00e9curit\u00e9 : l\u2019\u00e9cran propose Continuer la partie sauvegard\u00e9e et indique ' + + 'clairement qu\u2019en distribuer une nouvelle la remplace. Rouvrir simplement la page reprend ' + + 'toujours o\u00f9 vous en \u00e9tiez. Le pied de page de l\u2019accueil nomme maintenant les deux fa\u00e7ons de ' + + "jouer. Aucune r\u00e8gle n'a chang\u00e9 ; les parties en cours ne sont pas affect\u00e9es.", }, migrations: { /** - * STILL NOTHING TO CARRY. v0.7.7 fixes how the built client is CACHED, not what it does: every - * packaged build published the same cache key (`?v=nogit` — the `.s9pk` build has no `.git` for - * `git rev-parse`) and the server sent no `Cache-Control` at all, so two correct releases never - * reached the browsers that asked for them. A build tag that varies and a revalidate header are - * 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. + * STILL NOTHING TO CARRY. v0.7.8 changes which SCREEN a solitaire visit lands on — the setup + * screen was skipped whenever the browser held a save, so a returning player never saw it — plus + * the splash footer's wording. Both are client-side; no rule the engine enforces and no + * save-format change. + * + * 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 }) => {}, down: IMPOSSIBLE, diff --git a/station-master b/station-master index af68aac..193800a 160000 --- a/station-master +++ b/station-master @@ -1 +1 @@ -Subproject commit af68aac78d3221d138cd67929d6f94f236fed7b6 +Subproject commit 193800a64934fb214ab1e353317c7ec026af0ecf