0.7.0:3 — bundle Station Master v0.7.0
The submodule pin is the version; nothing else about the package changed. Four game types in the lobby, the whole rule set readable before taking a seat, leaving and rejoining a game, and sound in a multiplayer game for the first time — all upstream, all through the same server this package has always run. - startos/versions/current.ts — 0.7.0:3, with release notes in all five languages. - instructions.md — how a game is set up now, and what Leave / Forget mean for a seat. - README.md — the bundled version, and a limitation spelled out: a player's identity lives in their browser, so a lost token cannot be recovered from this package. - UPDATING.md — how to pack a test build from work that is not pushed yet, which is how v0.7.0 was played before release, and why the downstream digit moves for each one. The downstream digit is :3 rather than :0 because three test packs were installed on the box while v0.7.0 was being played; publishing :0 now would be a downgrade it would refuse. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016JczK5i33ZNSf2PtzZqdhS
This commit is contained in:
@@ -13,6 +13,13 @@ 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
|
||||
same server it always was.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
@@ -178,7 +185,14 @@ server resumes every saved game on boot the same way it does after an ordinary r
|
||||
visibility into who a player is once they've joined.
|
||||
3. **No accounts, and one game at a time per person is expected but not enforced** — a deliberate
|
||||
upstream design decision (`docs/architecture/multiplayer.md` §11 D13), not a StartOS-specific
|
||||
limitation.
|
||||
limitation. Since 0.7.0 a browser can hold seats in several games at once and picks between them
|
||||
in the lobby, which is a client convenience rather than a change to that decision.
|
||||
4. **A player's identity lives in their browser.** The session token issued at join is the only
|
||||
proof of who a player is; it is kept in that browser's `localStorage` and nowhere else. A player
|
||||
may leave a running game and rejoin it (the lobby lists every game the browser is in), but a
|
||||
token lost with the browser — cleared site data, a different device — cannot be recovered from
|
||||
this package, and the seat stays in the game waiting. Upstream `TODO.md` tracks an
|
||||
administrator-issued rejoin link; it does not exist yet.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+37
@@ -40,6 +40,43 @@ change is packaging-only and the bundled game has not moved.
|
||||
> anywhere, which is the only reason a downgrade was harmless: `0.5.2:0` sorts *below* `1.0.0:0`,
|
||||
> so an installed copy had to be removed rather than updated over.
|
||||
|
||||
## Building a test package from work that is not pushed yet
|
||||
|
||||
The Dockerfile copies `station-master/` out of the build context, so what is packed is whatever is
|
||||
in that directory — the submodule's *pin* only matters for reproducibility, not for `make`. That is
|
||||
what makes it possible to put a build on a test box before the game is committed, tagged or pushed,
|
||||
which is how v0.7.0 was played before release:
|
||||
|
||||
```bash
|
||||
# point the submodule at a local commit that exists nowhere else yet
|
||||
cd station-master && git fetch --no-tags /path/to/station-master main && git checkout --detach FETCH_HEAD
|
||||
|
||||
# or, for work that is not even committed, copy the working tree in
|
||||
rsync -a --delete --exclude .git --exclude node_modules --exclude dist \
|
||||
/path/to/station-master/ station-master/
|
||||
|
||||
cd .. && make x86 && make install
|
||||
```
|
||||
|
||||
**Move the DOWNSTREAM digit for each test build** — `0.7.0:1`, `:2`, `:3`. StartOS installs an
|
||||
update, not a re-install, so a rebuild at the same version has nothing to install over; and the
|
||||
downstream half is exactly the right one to move, since the upstream game has not been released
|
||||
again between two test packs. Whichever digit the box ends up on is the one the real release should
|
||||
carry: publishing a *lower* one afterwards is a downgrade the box will refuse.
|
||||
|
||||
**Before committing the wrapper**, put the pin back on a real tag — a submodule pointing at a commit
|
||||
that only exists on one machine is a package nobody else can build:
|
||||
|
||||
```bash
|
||||
cd station-master && git fetch --tags origin && git checkout v<version>
|
||||
cd .. && git add station-master
|
||||
```
|
||||
|
||||
The pack's git stamp says `-modified` for the whole of this, which is the flag that a build came
|
||||
from a dirty tree. Never publish one of those.
|
||||
|
||||
---
|
||||
|
||||
If the jump carries a multiplayer protocol or persistence-format change (check the game repo's
|
||||
`CHANGELOG.md` and `docs/architecture/multiplayer.md`), read it before bumping: a running
|
||||
server's saved games are stamped with `engineVersion` and refuse to resume under a mismatched
|
||||
|
||||
@@ -35,6 +35,22 @@ 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.
|
||||
|
||||
**Setting a game up (new in 0.7.0).** The lobby opens on **Join a game**: type the code you were
|
||||
given and you will see the whole rule set — the opening hand, what the work pays, every way the game
|
||||
can end — *before* you take a seat. Creating a game instead starts from a **game type**: Co-op,
|
||||
Competitive or Cutthroat. A type just fills in the rules; every one of them is yours to change, and
|
||||
changing any of them marks the game **Custom**, which keeps the scoring of the type you started
|
||||
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.
|
||||
|
||||
**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
|
||||
waits for you, and the lobby lists every game this browser is in so you can rejoin it — or join a
|
||||
different one without losing the first. **Forget** on that list is the one thing that cannot be
|
||||
undone: the token kept in your browser is the only proof of who you are, so a forgotten game cannot
|
||||
be rejoined from that browser.
|
||||
|
||||
### Get Join Secret
|
||||
|
||||
Run this whenever you need the current join secret again, or want to shut out anyone still
|
||||
|
||||
+26
-16
@@ -4,28 +4,38 @@ export const current = VersionInfo.of({
|
||||
// `<upstream>:<downstream>` — 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.6.0:0',
|
||||
version: '0.7.0:3',
|
||||
releaseNotes: {
|
||||
en_US:
|
||||
'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.',
|
||||
'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.',
|
||||
es_ES:
|
||||
'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.',
|
||||
'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.',
|
||||
de_DE:
|
||||
'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.',
|
||||
'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.',
|
||||
pl_PL:
|
||||
'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.',
|
||||
'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.',
|
||||
fr_FR:
|
||||
'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.',
|
||||
'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.',
|
||||
},
|
||||
migrations: {
|
||||
up: async ({ effects }) => {},
|
||||
|
||||
+1
-1
Submodule station-master updated: 40f07b0710...06db36e5b5
Reference in New Issue
Block a user