v0.7.0 — four game types, a lobby you can read and leave, and a multiplayer game that makes a sound

The multiplayer set-up, the lobby, the start of a game, and four signals a remote client had never
been sent. Reasoning, the preset table and what was verified how: CHANGELOG.md.

- Co-op, Competitive, Cutthroat, Solitaire and Custom, on both screens, from one shared block —
  they had drifted, and each was missing a question the other asked.
- A player reads the whole rule set before taking a seat, may leave a lobby or a running game, and
  keeps a seat across a reload. The host may clear a chair. The browser remembers every game it is
  in, not just the last one.
- The start of a game is drawn: a handoff beat, an announcement, the code and type in the header.
- Sound, the timetable flash, announcements and the just-drawn badge now reach a remote client;
  justDrawn goes to the seat that drew it and nobody else.
- Played on StartOS, which found the rest: an Extra belongs to the player who played it, the board
  never named the Superintendent, bot seats were reported as absent players, and rule section
  numbers are out of every string a player reads.

Also carries the previous session's Heavy Grade documentation work — asked again, answer unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016JczK5i33ZNSf2PtzZqdhS
This commit is contained in:
Jesse.Markowitz
2026-08-23 05:46:42 -04:00
co-authored by Claude Opus 5
parent 42adfda390
commit 06db36e5b5
41 changed files with 4387 additions and 588 deletions
+27 -1
View File
@@ -89,6 +89,28 @@ district — so whichever direction climbs advantages one neighbour over the oth
has a fair claim to the decision. Orientation is **rolled** from the seed instead — deterministic,
and roughly even (51/49 east/west across 400 games) — identically for solitaire and multiplayer.
**Re-opened and closed again, 2026-08-23.** The question came back as "did we ever fix Heavy Grade
to allow user placement of direction?", and the option of handing the choice to the **Superintendent**
— the neutral office, which rotates with the Fedora every three Stages — was considered and rejected.
Jesse's call: v0.5.0's ruling stands. What the re-examination surfaced, worth recording so this is not
asked a third time:
- **The advantage is permanent; the office is not.** Orientation decides which modifier cards pay for
the whole game (Brakeman and Airbrakes on the descent, Helpers on the climb) and therefore which
direction of traffic is favoured — and odd trains run west while even run east. A rotating office
making a one-way, once-and-for-all call does not dissolve the fairness problem, it just moves it.
- **There is no setup phase to ask in.** `createGame` is pure and synchronous and the game opens at
Day 1, Stage 1, Local Operations. The question would have to interrupt play before the first turn,
and `clock.pendingDecision` is typed for clearance alone (`SuperintendentClearance | null`, read in
19 places), so a second decision kind would be most of the work.
- **Most games never meet the card.** Since v0.6.2 deals the Mainline deck without replacement there
is at most one Heavy Grade in ten cards, drawn `players + 1` times: **20%** of solitaire games,
rising to 50% at four players. A pre-game interrupt for a rule four games in five never see.
The docs were the actual defect. `README.md` still listed it among three open rules questions (all
three closed in v0.5.0) and `StationMaster-Mainline-Deck-v0.4.5.md` still said "the implementation
needs a player-selection step to match the card". Both now say settled, and why.
**Still not implemented**: the Action (10) and Space-use (12) cards, which are genuinely
multiplayer-only. Playing them is rejected with `NOT_IMPLEMENTED`.
@@ -542,7 +564,7 @@ We modelled a Mainline card as **2 regions, uniform**. The design has **ten dist
| Plains | 60 | |
| Curves | 30 | |
| Hilly | **P60 / F30** | different speeds for passenger and freight |
| Heavy Grade (Up) | **G** | player sets orientation; Brakeman/Airbrakes/Helpers unlock better start positions |
| Heavy Grade (Up) | **G** | player sets orientation †; Brakeman/Airbrakes/Helpers unlock better start positions |
| Double Track | 60 | **trains may pass** |
| Uncontrolled Siding | 60 | trains may pass; separate "no pass" and "passing" starts |
| Tunnel | 30 | |
@@ -550,6 +572,10 @@ We modelled a Mainline card as **2 regions, uniform**. The design has **ten dist
| Interchange | 60 | **sort cars into any new order**; has a Yard Limit. Printed "Yard" on the prototype card and renamed after play — it shared a word with the Division Yard, the Classification Yard, the Salvage Yard, the Yard Office and the Small Yard, and is none of them |
| East / West Division Point | — | the ends |
† **"Player sets orientation" is deliberately NOT implemented** — the table records what the card
prints, which is what this section is for. The game rolls the uphill direction from the seed instead;
settled v0.5.0, re-confirmed 2026-08-23, reasoning in §10 Q11 above.
Each card shows **Start positions** — where a train enters depending on direction, train type, and
which modifier cards are in play. The Heavy Grade card has five distinct starts (plain, brakemen,
airbrakes, plain, helpers), so playing Brakeman literally moves your entry point further along.