0.7.4:0 — bundle Station Master v0.7.4
Submodule pinned to v0.7.4 (19a6a47), `current.ts` at `0.7.4: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.3:0's `up` is empty, `versions.md`'s common case, so `current.ts` bumps in place. Three rules corrections, all places where the code and the cards disagreed. The Yard Office is offered rather than imposed, must be reachable in one move, and cars on the lead collide — none of which it checked. Circus, Campaign and Military trains run loaded where the yard can supply it, and the per-stop point is earned once per Office Area by a fully loaded train. Red Flags becomes a directional flag on your own Limits, spent on the train it stops, playable at the moment the engine sees a certain collision. GAMES IN PROGRESS MAY NOT SURVIVE THIS ONE, and the notes lead with it in every locale — the opposite of 0.7.3 and for a different reason from 0.7.2. Nothing about the save format changed; what changed is what the rules accept. The Red Flags intent changed shape, a make-up that was legal may now be refused, and a Yard Office arrival asks a question no older history has an answer for. It fails safe: the server declines a save the rules reject, names the move, and leaves the file untouched. A game that never meets one of the three carries on, which is why this is "may not" rather than 0.7.2's "will not". README.md's diagnosing note is extended: the Mainline Phase now stops to ask three different questions of three different players, and a game sitting on one is waiting on a person rather than stuck — it shows as active with nobody to wait for, because an interruption is not a turn. Verified: `npm run check` clean, prettier clean, `make x86` packs as v0.7.4:0. NOT verified: not yet installed on a box, and none of the three rules has been played by a human — upstream TODO.md #35 still stands for extended play too. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAgJSmeV8zrMh55Mj85ESb
This commit is contained in:
@@ -13,28 +13,40 @@ 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.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.
|
||||
**Bundled version: 0.7.4.** Three rules corrections off the tracker (Gitea#13, #5, #19), all of them
|
||||
places where the code and the cards disagreed.
|
||||
|
||||
**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.
|
||||
**The Yard Office is offered rather than imposed (Gitea#5).** It was implemented in a form missing
|
||||
all three of its conditions: a qualifying train was teleported onto the card, so nobody was asked, no
|
||||
route was walked — the card's printed "that can reach the yard office in one move" was unenforced —
|
||||
and nothing was ever met on the way in. The arrival now interrupts the Mainline Phase to ask the
|
||||
district's owner, reachability is the engine's own move walk, and cars on the lead collide. Where no
|
||||
route exists the offer is withheld and the history says why.
|
||||
|
||||
**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.
|
||||
**Some Extras must run loaded (Gitea#13).** Circus, Campaign and Military trains take a loaded car
|
||||
while the Division Yard can supply one, an empty once it cannot, and may depart short. The per-stop
|
||||
point is earned once per Office Area rather than once per game, and only by a fully loaded train.
|
||||
Two long-standing bugs went with it: `emptiesOnly` was rendered to the player and enforced nowhere,
|
||||
and a set-up out on the Mainline paid its point to player 0 whoever was playing.
|
||||
|
||||
**Red Flags is a different card (Gitea#19).** The old rule protected a stopped train on the Mainline
|
||||
and was played 4 times in 4,212 offers across 600 games. It is now a directional flag on your own
|
||||
Limits, spent on the train it stops, playable either in phase or at the moment the engine sees a
|
||||
certain collision.
|
||||
|
||||
**GAMES IN PROGRESS MAY NOT SURVIVE THIS UPDATE.** Unlike 0.7.3, which changed no rules, each of the
|
||||
three above can stop an older history replaying: the Red Flags intent changed shape, a make-up that
|
||||
was legal may now be refused, and a Yard Office arrival asks a question no older history has an
|
||||
answer for. It fails safe — `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 can put 0.7.3 back on to
|
||||
finish a game that matters. A game that never meets one of the three carries on normally, which is
|
||||
why this is "may not" rather than 0.7.2's "will not".
|
||||
|
||||
**Diagnosing the interruptions.** The Mainline Phase can now stop and ask three different questions,
|
||||
of three different players: §8.1's clearance goes to the Superintendent, the Yard Office offer and
|
||||
the Red Flag prompt to the owner of the district a train is arriving at. A game sitting on one is
|
||||
waiting on a person, not stuck. `Games in Progress` shows it as active with nobody to wait for,
|
||||
because an interruption is not a turn — the same reading as an extension vote.
|
||||
|
||||
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