0.7.9.8:0 — bundle Station Master v0.7.9.8

Eight releases of fixes since v0.7.9, most of them multiplayer, which is
what this package is for. Submodule pin and `startos/versions/current.ts`
only — no Dockerfile, main.ts or manifest change, as an ordinary bump
should be.

Bumped in place rather than spun off: v0.7.9's migration body is empty,
which is `versions.md`'s common case, and git history keeps its release
notes.

FOUR-COMPONENT VERSION, CHECKED. Every example in `versions.md` has
three, so `0.7.9.8:0` was parsed with the SDK's own ExVer parser before
being written down: upstream `[0,7,9,8]`, which sorts above `[0,7,9]`, so
a box on 0.7.9:0 takes this as an update rather than refusing it as a
downgrade.

GAMES IN PROGRESS ON THE BOX RESUME, and that was established rather than
hoped for. v0.7.9 broke solitaire saves because it changed a RULE, and
the rule behind that is that a save is a seed plus the moves played,
replayed through the CURRENT rules — so the question for any bump is
whether something became illegal. `git diff v0.7.9..HEAD -- src/engine/`
is, in full: `isExpedited` exported and widened to a structural parameter
type, `isFreight` exported, one new read-only helper
(`freightRuleSpentHere`, which only the blocked panel asks), and
`check('draw.end')`'s inline hand-limit test replaced by a call to
`overHandLimit(state, player)` holding the identical expression. No
predicate changed its answer. The release notes say so in all five
locales rather than leaving it to be discovered.

UPDATING.md CORRECTED: it said a running server's saves "are stamped with
`engineVersion` and refuse to resume under a mismatched one". They are
stamped with it and it is reported, but `src/server/index.ts` decides by
attempting the replay and names the versions only inside the failure
message — its own comment says why, that "some version differs" was never
enough to act on. A doc that sends the next person to schedule downtime
for a bump that needs none costs about as much as the reverse. It now
carries the diff command to ask the question of the code instead.

What players get, briefly: two multiplayer information leaks closed (the
seed in the shared log, and a blind Home Office draw naming its card); a
history panel that came back EMPTY after a mid-game browser reload; the
extended-play vote no longer naming an arbitrary player when the vote is
open to everyone at once; a train held at your Limits by an Interlocking
no longer vanishing off the board until a track frees; trains queued for
a Crew Tray saying so with the free count; a Red Flag drawn on the map; a
spent Telegraph/Telephone/Radio struck through; the Campaign Train saying
whether its speeches are made; and two bugs from the last playtest — the
Express's one-freight-car-per-location rule explained where it refuses
you, and westbound trains drawn in the correct half of a card.

README.md and instructions.md updated in the same change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y5boPxP6JHRYMm8adXaF5R
This commit is contained in:
Jesse
2026-09-08 03:56:40 -04:00
co-authored by Claude Opus 5
parent bd802cb512
commit 8f2f733a66
5 changed files with 232 additions and 92 deletions
+34
View File
@@ -35,6 +35,40 @@ 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.9.8. Games already running on this server are not affected** — they resume
normally, and nothing in this update changes a rule, so no saved game stops being playable. (That is
the opposite of 0.7.9 below, which did change one. It was checked, not assumed.)
Most of this update is multiplayer, and two of it are things the table could see that only one player
should have. **The random number that deals the game was announced in the shared history**, and **a
blind draw from the Home Office named the card it drew** to everybody, not just the player who drew
it. Both are gone.
**Your history panel came back empty if you reloaded the page mid-game.** The server had the whole
log the entire time and was sending it in a field the page never read, while the field the page does
read was told there was nothing new. Reload now and your history comes back with you.
**During the "play one more Day?" vote, the turn chart named a player at random.** That vote is open
to everyone at once — anybody who has not voted may vote, in any order — so there is nobody whose
turn it is, and the chart said so wrongly while the tally beside it correctly listed everyone still
to vote. It now says nobody is being waited on.
**A train your Interlocking stopped at your Limits used to disappear from the board.** It was still
there in the rules — first in line for the next free A/D track — but nothing drew it, so it looked
like the train had gone until it reappeared in your Office some Stages later. It now stands at the
Limits, marked as held.
Things that are easier to see: **trains waiting for a Crew Tray say so**, with how many trays are
free — a played Extra or an ordered second section used to wait with nothing on screen about it.
**A Red Flag standing at an Office is drawn on the map**, at the end it guards. **A Telegraph,
Telephone or Radio you have already used today is struck through** instead of still advertising its
bonus, and tells you when another district is dispatching, since it is the Superintendent's devices
that get used. **The Campaign Train says whether its speeches are made** — before them it stops
normally, after them it must be kept at the station. And two from the last playtest session: **the
Express's "one freight car per location" rule is now explained where it stops you** (the panel used
to talk about the industry instead, sending you to fix the wrong thing), and **westbound trains are
drawn in the correct half of a Mainline card**.
**What changed in 0.7.9. Read this part first: your saved solitaire game may not reopen.** Solitaire
has always had two collision limits — 3 in a Day and 5 in a game — and the setup screen has always
offered them and said that reaching one ends the game in a loss. They were never actually checked.