From ea8e9dbcb8ea8118a107788883869a7ec328365d Mon Sep 17 00:00:00 2001 From: Jesse Date: Tue, 25 Aug 2026 10:58:14 -0400 Subject: [PATCH] =?UTF-8?q?0.7.1:0=20=E2=80=94=20bundle=20Station=20Master?= =?UTF-8?q?=20v0.7.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four playtest fixes off the Gitea tracker. The submodule pin moves to v0.7.1 and the version follows it; the downstream digit resets to :0, since v0.7.0 only ended on :3 because three test packs were played before it was released. - An empties-only train may couple a caboose again — a caboose carries the crew, not freight. - The end of a Day is a modal carrying the standings, the Days left and the combined target, instead of passing between one click and the next inside the automatic phases. - A Timetabled train may be discarded to a Department pile for a rival to pick up, governed by a new discardTimetabled setting that appears in both the New Game dialog and the lobby, on by default. An Extra never may. - A blocked passenger platform now gives its reason, including the coach shortage and what ends it. No new version file and no migration: current.ts's migrations.up is empty and nothing is carried from 0.7.0. GAMES IN PROGRESS SURVIVE THIS UPDATE — all three engine-visible changes only widen what is legal, so every intent a 0.7.0 game recorded still replays, and the server resumes a save by replaying it rather than by comparing version strings (src/server/index.ts in the game repo). README.md and instructions.md both named 0.7.0 and carry the three user-visible changes now. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01FLnYR4XtXQNamYJXGYT8oC --- README.md | 20 +++++++--- instructions.md | 12 ++++++ startos/versions/current.ts | 74 +++++++++++++++++++++++-------------- station-master | 2 +- 4 files changed, 75 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 6535b3a..96e9523 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,21 @@ 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.0.** The lobby sets a game up from one of four game types (Solitaire, Co-op, -Competitive, Cutthroat) plus Custom, offers the whole rule set for reading before a seat is taken, -and lets a player leave a lobby or a running game and come back to it. Sound, the timetable flash, -announcements and the just-drawn card badge reach a multiplayer client for the first time. None of -that changes anything this package does: the submodule pin is the version, and the service is the +**Bundled version: 0.7.1.** Four playtest fixes on top of 0.7.0. An empties-only train may couple a +caboose again (a caboose carries the crew, so it is never a load); the end of a Day is a modal +carrying the standings, the Days left and the combined target, because a Day turns over inside the +automatic phases and used to pass unremarked; a Timetabled train may be discarded to a Department +pile for a rival to pick up, governed by a new `discardTimetabled` New Game setting that is on by +default, while an Extra never may; and a blocked passenger platform now reports its reason — the +coach shortage behind Gitea#2 is a ruled-in part of the game, and what was actually broken was the +silence. **Games in progress survive this update**: all three engine-visible changes only WIDEN what +is legal, so every intent a 0.7.0 game recorded still replays, and the server resumes a save by +replaying it rather than by comparing version strings. + +0.7.0 remains the shape of the service: the lobby sets a game up from one of four game types +(Solitaire, Co-op, Competitive, Cutthroat) plus Custom, offers the whole rule set for reading before +a seat is taken, and lets a player leave a lobby or a running game and come back to it. None of this +changes anything the package itself does: the submodule pin is the version, and the service is the same server it always was. --- diff --git a/instructions.md b/instructions.md index ed4f168..9015ab9 100644 --- a/instructions.md +++ b/instructions.md @@ -43,6 +43,18 @@ changing any of them marks the game **Custom**, which keeps the scoring of the t from. The seed, the number of players and the number of Days sit above the type and do not make a game Custom — the targets re-derive from them. +**What changed in 0.7.1.** Three things you will see at the table. The **end of a Day now stops and +says so** — a dialog with the standings, how many Days are left and the combined target, because a +Day used to turn over inside the phases that run themselves and pass between one click and the next. +A **Timetabled train may now be thrown away**: toss it face-up to a Department slot and a rival may +pick it up. That is a New Game setting (*A Timetabled train may be discarded*, on by default) — turn +it off and a train card can only ever be played onto the timetable. An **Extra is never discardable** +either way. And a **platform where nothing can be worked now tells you why** — no train for the +passengers waiting, a train whose card bars Porters, coaches already full, the same-district rule, or +the Division Yard being out of coaches, in which case it says how many are stranded in the +Classification Yard and what brings them back. Running out of coaches is part of the game, not a +fault; what was missing was the explanation. + **Leaving, and coming back.** Anyone may leave a lobby, and the host can clear a chair, so a mis-join or somebody who wanders off no longer blocks a table that cannot start until every seat is taken. A **Leave game** button appears once a game is running: it keeps your seat and the table diff --git a/startos/versions/current.ts b/startos/versions/current.ts index e453dd8..348ee36 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -3,41 +3,61 @@ import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk' 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.7.0:3', + // action. The downstream half moves only for packaging-only changes, and RESETS to `:0` when the + // upstream half moves — v0.7.0 ended on `:3` only because three test packs were played before it + // was released. + version: '0.7.1:0', releaseNotes: { en_US: - 'Bundles Station Master v0.7.0. Setting a multiplayer game up is a different screen: pick a game ' + - 'type \u2014 Co-op, Competitive or Cutthroat \u2014 and every rule it sets is yours to change. Read a ' + - 'game\u2019s whole rule set before taking a seat, leave a table or a running game and come back to ' + - 'it, and let the host clear a chair. Multiplayer games now have sound, say who else is at the ' + - 'table, and name the Superintendent.', + 'Bundles Station Master v0.7.1, four fixes from playtesting. A train restricted to empties can ' + + 'couple its caboose again — a caboose carries the crew, not freight, so it was never a load. ' + + 'The end of a Day now stops and says so, with the standings and how long is left, instead of ' + + 'passing between one click and the next. A Timetabled train may be thrown away to a Department ' + + 'slot for a rival to pick up, which is a New Game setting you can turn off; an Extra still ' + + 'cannot. And a platform where nothing can be worked now says why, including when the coaches ' + + 'have run out and what brings them back.', es_ES: - 'Incluye Station Master v0.7.0. Crear una partida multijugador es otra pantalla: elige un tipo de ' + - 'partida \u2014 Cooperativa, Competitiva o A muerte \u2014 y cambia cualquiera de sus reglas. Lee todas ' + - 'las reglas antes de sentarte, sal de una mesa o de una partida en curso y vuelve cuando quieras, ' + - 'y el anfitri\u00f3n puede liberar una silla. El multijugador ya tiene sonido, dice qui\u00e9n est\u00e1 en la ' + - 'mesa y se\u00f1ala al Superintendente.', + 'Incluye Station Master v0.7.1, cuatro correcciones surgidas de las partidas de prueba. Un tren ' + + 'limitado a vagones vacíos vuelve a poder enganchar su furgón de cola: lleva a la tripulación, ' + + 'no carga, así que nunca fue una carga. El final de cada Día se detiene y lo anuncia, con la ' + + 'clasificación y lo que queda por jugar, en vez de pasar entre un clic y el siguiente. Un tren ' + + 'con horario puede descartarse a una casilla de Departamento para que otro lo recoja — es una ' + + 'opción de partida nueva que puedes desactivar —; un Extra sigue sin poder. Y un andén donde no ' + + 'se puede trabajar ahora explica por qué, incluso cuando se han agotado los coches y qué los ' + + 'devuelve.', de_DE: - 'Enth\u00e4lt Station Master v0.7.0. Ein Mehrspielerspiel wird jetzt anders eingerichtet: W\u00e4hle einen ' + - 'Spieltyp \u2014 Koop, Wettkampf oder Cutthroat \u2014 und \u00e4ndere jede seiner Regeln. Das ganze Regelwerk ' + - 'ist vor dem Platznehmen lesbar, man kann einen Tisch oder ein laufendes Spiel verlassen und ' + - 'zur\u00fcckkehren, und der Gastgeber kann einen Platz r\u00e4umen. Mehrspielerpartien haben jetzt Ton, ' + - 'zeigen wer am Tisch ist und nennen den Superintendenten.', + 'Enthält Station Master v0.7.1 mit vier Korrekturen aus dem Spieltest. Ein Zug, der nur Leerwagen ' + + 'aufnehmen darf, kann seinen Kabuse wieder ankuppeln — ein Kabuse trägt die Mannschaft, keine ' + + 'Fracht, war also nie eine Ladung. Das Ende eines Tages hält jetzt an und sagt es, mit dem Stand ' + + 'und der verbleibenden Zeit, statt zwischen zwei Klicks zu verstreichen. Ein fahrplanmäßiger Zug ' + + 'darf auf ein Abteilungsfeld abgeworfen werden, wo ein Mitspieler ihn aufnehmen kann — eine neue ' + + 'Spieleinstellung, die sich abschalten lässt; ein Extrazug weiterhin nicht. Und ein Bahnsteig, an ' + + 'dem nichts geht, nennt jetzt den Grund, auch wenn die Wagen ausgegangen sind und was sie ' + + 'zurückbringt.', pl_PL: - 'Zawiera Station Master v0.7.0. Tworzenie gry wieloosobowej wygl\u0105da inaczej: wybierz typ gry \u2014 ' + - 'Kooperacja, Rywalizacja lub Cutthroat \u2014 i zmie\u0144 dowoln\u0105 z jego zasad. Przeczytaj ca\u0142y zestaw ' + - 'zasad przed zaj\u0119ciem miejsca, opu\u015b\u0107 st\u00f3\u0142 lub trwaj\u0105c\u0105 gr\u0119 i wr\u00f3\u0107 do niej, a gospodarz ' + - 'mo\u017ce zwolni\u0107 krzes\u0142o. Gra wieloosobowa ma teraz d\u017awi\u0119k, pokazuje kto jest przy stole i ' + - 'wskazuje Superintendenta.', + 'Zawiera Station Master v0.7.1 z czterema poprawkami z testów. Pociąg ograniczony do pustych ' + + 'wagonów znowu może podpiąć swój służbowy — wiezie załogę, nie ładunek, więc nigdy ' + + 'ładunkiem nie był. Koniec Dnia zatrzymuje się i to ogłasza, z wynikami i tym, ile zostało, ' + + 'zamiast przemykać między jednym kliknięciem a drugim. Pociąg rozkładowy można odrzucić na ' + + 'pole Wydziału, skąd weźmie go rywal — to nowe ustawienie gry, które można wyłączyć; ' + + 'Dodatkowy nadal nie. A peron, na którym nic się nie da zrobić, mówi teraz dlaczego — także ' + + 'wtedy, gdy skończyły się wagony, i co je przywraca.', fr_FR: - 'Inclut Station Master v0.7.0. La cr\u00e9ation d\u2019une partie multijoueur a chang\u00e9 : choisissez un type ' + - 'de partie \u2014 Coop, Comp\u00e9titif ou Cutthroat \u2014 et modifiez chacune de ses r\u00e8gles. Lisez tout le ' + - 'r\u00e8glement avant de vous asseoir, quittez une table ou une partie en cours et revenez-y, et ' + - 'l\u2019h\u00f4te peut lib\u00e9rer une chaise. Le multijoueur a maintenant du son, indique qui est \u00e0 la table ' + - 'et nomme le Superintendent.', + 'Inclut Station Master v0.7.1, quatre corrections issues des parties d’essai. Un train limité aux ' + + 'wagons vides peut de nouveau atteler son fourgon de queue : il transporte l’équipe, pas du fret, ' + + 'il n’a donc jamais été un chargement. La fin d’une Journée s’arrête et l’annonce, avec le ' + + 'classement et ce qu’il reste à jouer, au lieu de passer entre deux clics. Un train à horaire ' + + 'peut être jeté sur une case de Département où un rival peut le reprendre — un nouveau réglage ' + + 'de partie, désactivable ; un Extra ne le peut toujours pas. Et un quai où rien ne peut être ' + + 'fait en donne désormais la raison, y compris quand les voitures sont épuisées et ce qui les ' + + 'ramène.', }, migrations: { + // NOTHING TO CARRY FROM 0.7.0. The three engine-visible changes all WIDEN what is legal — a + // caboose may now be coupled by an empties-only train, and a Timetabled train may now be + // discarded — so every intent a 0.7.0 game recorded is still accepted. The server resumes a + // saved game by REPLAYING it rather than by comparing version strings (`src/server/index.ts`), + // so games in progress survive this update rather than being set aside. up: async ({ effects }) => {}, down: IMPOSSIBLE, }, diff --git a/station-master b/station-master index 06db36e..4414476 160000 --- a/station-master +++ b/station-master @@ -1 +1 @@ -Subproject commit 06db36e5b50d95a4f6c75ef2ed7ffa4a03397ef0 +Subproject commit 441447648db48717b51ec1fd085a8a47c4749237