0.7.3:0 — bundle Station Master v0.7.3
Submodule pinned to v0.7.3 (45580d8), `current.ts` at `0.7.3:0`, release notes rewritten in all five locales, README.md and instructions.md updated. No new version file and no migration: the outgoing 0.7.2:0's `up` is empty, which is `versions.md`'s common case, so `current.ts` bumps in place and `index.ts` is untouched. Two features, both about the end of a game. A game no longer stops dead when the timetable runs out — it enters a fourth state, `awaitingExtension`, and asks the table whether to play one more Day, unanimously in multiplayer with one refusal decisive. The official result is frozen at the original `config.days` and never rewritten, so playing on is explicitly an exhibition, and a §3.4 collision breach is neither extendable nor able to overwrite a recorded result. And the end of a game renders a full results screen in place of the raw `outcome.reason` enum the page used to print. GAMES IN PROGRESS SURVIVE THIS ONE, which is the opposite of the last release and is why the notes lead with it in every locale. No card data changed and the engine changes are additive, so every intent in a 0.7.2 save is still legal: the save replays intact and the game simply pauses on the new question at the end. Upstream proves it rather than asserting it — the suite replays the three recorded games in `public/replays`, all made under an older ruleset, and asserts every intent still applies. Anyone updating from 0.7.1 or earlier is still in the old boat, and both docs say so. README.md gains a short diagnosing note, since `awaitingExtension` is a state an administrator can meet and misread: such a game is persisted and listed as `active`, resumes on restart like any live game, and shows nobody to wait for — because a vote is not a turn. Verified: `npm run check` clean, prettier clean, `make x86` packs as v0.7.3:0. NOT verified: not installed on a box and not played. Extended play has never been exercised against a running service — upstream `TODO.md` #35. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAgJSmeV8zrMh55Mj85ESb
This commit is contained in:
@@ -13,24 +13,28 @@ 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.2.** Two engine bugs and two rules corrections on top of 0.7.1. Backing into
|
||||
a cut through a curve's 45° leg no longer couples it back to front, and a crew pulling out through
|
||||
one takes its own cut with it instead of driving away and leaving it standing (Gitea#17). The card
|
||||
deck is the published counts exactly — which halves the track and removes two long-standing density
|
||||
multipliers, taking the deck from 206 cards to 121 (Gitea#14). Crossing a Mainline card counts the
|
||||
regions printed on it rather than the printed speed, which was only ever scenery: most trains cross
|
||||
faster, slow trains much faster, and a train's Fast/Slow rating now matters on the Hilly card alone
|
||||
(Gitea#3). And the Division map is drawn as a single row read left to right, so east is always to the
|
||||
right (Gitea#18).
|
||||
**Bundled version: 0.7.3.** Two features, both about the end of a game (Gitea#11 and #16). A game no
|
||||
longer stops dead when the timetable runs out — it enters a fourth state, `awaitingExtension`, and
|
||||
asks the table whether to play one more Day; agreement is unanimous in multiplayer and one refusal
|
||||
ends it. The official result is frozen at the ORIGINAL `config.days` and never rewritten, so playing
|
||||
on is explicitly an exhibition; a §3.4 collision breach is not extendable and does not overwrite a
|
||||
recorded result. And the end of a game now renders a full results screen in place of the raw
|
||||
`outcome.reason` enum the page used to print, backed by a new event tally on the game state.
|
||||
|
||||
**GAMES IN PROGRESS DO NOT SURVIVE THIS UPDATE**, and this is the first release of which that is
|
||||
true. A saved game is a seed plus the moves played, replayed on startup — and the deck changing size
|
||||
means a card id recorded under 0.7.1 refers to a different card, or to none, so a save stops
|
||||
replaying at its first `card.play`. It fails safe rather than silently: `src/server/index.ts` refuses
|
||||
to resume a save the rules reject, logs which move it stopped at and why, and **leaves the file
|
||||
untouched**, so an operator who wants a particular game back can put 0.7.1 on and finish it. There is
|
||||
no migration, because there is no data to move — the moves were made against a deck that no longer
|
||||
exists, and re-dealing would invent a game nobody played.
|
||||
**GAMES IN PROGRESS SURVIVE THIS UPDATE.** No card data changed and the engine changes are additive:
|
||||
every intent in a 0.7.2 save is still legal, so the save replays intact and the game simply pauses on
|
||||
the new question when its timetable runs out. This is worth stating plainly because the previous
|
||||
release was the opposite — 0.7.2 took the deck from 206 cards to 121 and declined every game in
|
||||
progress. That still applies to anyone updating from **0.7.1 or earlier**: `src/server/index.ts`
|
||||
refuses to resume a save the rules reject, logs which move it stopped at, and **leaves the file
|
||||
untouched**, so an operator who wants a particular game back can put the older version on and finish
|
||||
it.
|
||||
|
||||
**Diagnosing the new state.** A game sitting in `awaitingExtension` is waiting on its players, not
|
||||
broken: it is persisted and listed as `active`, it is resumed on restart like any other live game,
|
||||
and the only move the rules will accept from it is `game.extend`. If a table appears stuck at the end
|
||||
of its last Day, check whether every seat has voted — `Games in Progress` will show it as active with
|
||||
nobody to wait for, because a vote is not a turn.
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user