v0.8.0.15 — the reference documents, and a card that advertised what it cannot do
The four hand-written references brought up to the game as it actually runs, ahead of the next testing round, plus a Quickstart to hand a tester who has never played. They had not been touched since v0.6.2 — a month and two minor versions — and each now says at the top which build it describes. ONE LIVE BUG CAME OUT OF THE PASS. mainlineDescription told players "Cars may be sorted into any new order here" on the Interchange. It is the printed capability and has never been implemented: nothing reads sortsCars to permit a sort, and its one live use is marking the card an Extra may be made up on, because it is the Mainline card with a yard. That sentence is not only documentation — view.ts renders it as a Mainline card's `what`, so it is what a player reads on the board, and the generated reference printed a "Sorts cars: yes" column beside it. A card advertising a button that does not exist sends a player hunting for it and then concluding the game is broken. What the documents had wrong, all of it verified against the code rather than read for tone: the victory model in the Rules book (firstToTarget / highestAfterDays and the target-bearing length presets stopped existing in 2026-08 — it is a free days count and a combined floor of 3 x players x days); "there is no lobby, no server, no multiplayer"; crossing time in mph rather than regions; Extras launched automatically eastbound; the Uncontrolled Siding listed as a passing card; industry track length taken from the box count; and a "Sister Trains" optional rule that never existed. The Home deck's counts table came out under TODO #15a — Jesse's own ruling that counts move with balance — and it had been wrong for a month, which is the argument made twice. The Home and Mainline deck references are restructured to explain how a deck is USED and to defer every per-card table to rules/as-built.md. Duplicating it by hand is precisely the drift #15a was raised about: as-built needed no correction beyond the Interchange, because build:cards regenerates it and a test fails when the checked-in file disagrees. Everything hand-maintained around it had drifted; it had not. docs/design.md, the index everything starts from, said v0.4.3, "what is not: the server", and 493 tests. It now also lists the player-facing references, which it never has, so the Quickstart is findable at all. 999 fast tests and 35 sim tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DmdqqCNoiqE7GBo6wthBnR
This commit is contained in:
co-authored by
Claude Opus 5
parent
a6657241de
commit
f308a2d94d
+35
-21
@@ -20,13 +20,30 @@ These stay as-is. Everything below is derived from them.
|
||||
> placeholder for exactly this material, and the balance measurements in Gap 12 were taken against a
|
||||
> ruleset that does not match the design.
|
||||
|
||||
## For players and testers
|
||||
|
||||
Written to be handed to somebody who is about to play, rather than to somebody building the game.
|
||||
|
||||
| Document | What it is |
|
||||
| --- | --- |
|
||||
| [`StationMaster-Quickstart.md`](StationMaster-Quickstart.md) | **Start here if you have never played.** The point of the game, how a Stage runs, what is on screen, how you win, a first twenty minutes, and what to report. |
|
||||
| [`StationMaster-Rules-v0.4.5.md`](StationMaster-Rules-v0.4.5.md) | **The rules in full**, as the engine actually runs them, with a FAQ. |
|
||||
| [`rules/as-built.md`](rules/as-built.md) | **Every card, GENERATED from `src/engine/content.ts`** and checked by a test, so it cannot disagree with the game. The table of record for per-card facts. |
|
||||
| [`StationMaster-Home-Deck-v0.4.5.md`](StationMaster-Home-Deck-v0.4.5.md) | How the Home Office deck is dealt, drawn and played out. |
|
||||
| [`StationMaster-Mainline-Deck-v0.4.5.md`](StationMaster-Mainline-Deck-v0.4.5.md) | The Mainline cards, how the deck is dealt, and what a card does to a train crossing it. |
|
||||
| [`StationMaster-Components-v0.4.5.md`](StationMaster-Components-v0.4.5.md) | Rolling stock, the two yards, Crew Trays, the Fedora, the D12. |
|
||||
|
||||
The `v0.4.5` in four of those filenames is the **prototype rules edition they were first written
|
||||
against**, not the version they describe — each says at the top which build it is current to. The
|
||||
names are kept because `src/`, `CHANGELOG.md` and `docs/rules/` cite them.
|
||||
|
||||
## Rules
|
||||
|
||||
| Document | What it is |
|
||||
| --- | --- |
|
||||
| [`rules/rules-v0.1.md`](rules/rules-v0.1.md) | Faithful markdown transcription of the PDFs. No corrections. The baseline everything diffs against. |
|
||||
| [`rules/rules-v0.2.md`](rules/rules-v0.2.md) | **The working ruleset.** v0.1 with all ten gaps resolved, each change marked with its gap number. |
|
||||
| [`rules/card-reference.md`](rules/card-reference.md) | What is printed on every card, plus the economy summary. The spec an engine or a print-and-play layout consumes. |
|
||||
| [`rules/card-reference.md`](rules/card-reference.md) | **⚠ SUPERSEDED** — an invented 52-card placeholder, kept for its economy summary and its history. For what is printed on every card, read [`rules/as-built.md`](rules/as-built.md), which is generated from the code. |
|
||||
| [`rules/glossary.md`](rules/glossary.md) | Every defined term, alphabetized. |
|
||||
| [`rules/open-questions.md`](rules/open-questions.md) | All thirteen gaps, each with the options considered, the decision, and the rationale. |
|
||||
| [`rules/implications.md`](rules/implications.md) | **Read this first.** What the four recovered design files (`Deck cards2.xlsx`, `Mainline Cards.pdf`, `Trains3.pdf`, `tracks.png`) change — and which decisions they supersede. |
|
||||
@@ -49,23 +66,20 @@ must do.
|
||||
|
||||
## Current status
|
||||
|
||||
**v0.4.3.** Rules formalized, card faces specified, architecture documented, and the game playable
|
||||
solitaire in a browser. See [`../CHANGELOG.md`](../CHANGELOG.md) for what each version changed and
|
||||
[`../TODO.md`](../TODO.md) for what is open; this section is the shape of the project, not a
|
||||
running tally, because a hand-maintained tally is what drifted last time.
|
||||
**v0.8.0.15.** Rules formalized, card faces specified, architecture documented, and the game
|
||||
playable **solitaire and multiplayer** in a browser against an authoritative server. See
|
||||
[`../CHANGELOG.md`](../CHANGELOG.md) for what each version changed and [`../TODO.md`](../TODO.md) for
|
||||
what is open; this section is the shape of the project, not a running tally, because a
|
||||
hand-maintained tally is what drifted last time.
|
||||
|
||||
**What is built.** The rules engine, the developer bot, the balance harness, the replay viewer and
|
||||
the playable page — components 1–7, 17 and 18 of
|
||||
[`architecture/components.md`](architecture/components.md). A game can be saved, shared, replayed and
|
||||
stepped back through. **493 tests.**
|
||||
**What is built.** The rules engine, the developer bot, the balance harness, the replay viewer, the
|
||||
playable page — and the server: lobby, game codes, seating, bots, per-seat reconnection, persistence
|
||||
by replaying the intent history, and an ordered replay of other players' turns on each player's own
|
||||
screen. It ships as a StartOS package. **999 fast tests and 35 simulation tests.**
|
||||
|
||||
**What is not.** The server. Phases 0 and 1 of
|
||||
[`architecture/multiplayer.md`](architecture/multiplayer.md) landed in v0.4.0 — seat and player are
|
||||
separate, turn state is per player, and the page talks to a `Session` rather than to the engine, so a
|
||||
`RemoteSession` drops in without the page changing. Phase 2 onward is **deliberately held** until the
|
||||
two provisional rules introduced in v0.3.0 have been played at a table: changing a rule after the wire
|
||||
format is live costs far more than changing it before. Also unbuilt: the 22 opponent-directed cards
|
||||
and real audio.
|
||||
**What is not.** The 22 opponent-directed cards — the Action and Space-use categories — are held out
|
||||
of every dealt deck until they have an implementation, along with the two defensive cards whose only
|
||||
purpose is to answer them. Real audio: everything the game plays is synthesised from oscillators.
|
||||
|
||||
**Balance is not where it should be, and no conclusion should be read from the revenue numbers yet.**
|
||||
The rebalance pass is deliberately deferred until the rules stop moving — card counts, industry counts
|
||||
@@ -85,17 +99,17 @@ on that. [`architecture/protocol.md`](architecture/protocol.md) §3 has the reas
|
||||
`test/events.test.ts` pins it.
|
||||
|
||||
**The economy, in one line:** Local Operations actions are the main currency — one per Stage, twelve
|
||||
per Day — but **inbound work bypasses them**, which is where the game's variance comes from. See
|
||||
`card-reference.md` §7.
|
||||
per Day — but **inbound work bypasses them**, which is where the game's variance comes from.
|
||||
|
||||
**Stack: TypeScript**, chosen so the engine runs in both the server and the browser — one
|
||||
implementation of the movement rules, and instant affordances without a round-trip. Node 22 runs
|
||||
TypeScript natively, so there is no build step during development, which also means **erasable syntax
|
||||
only**: no `enum`, no parameter properties, no namespaces.
|
||||
|
||||
Running alongside, and independent of all of it: **print-and-play components.** `card-reference.md`
|
||||
specifies every card face, so layout and art are the only remaining work before a table playtest —
|
||||
which answers the one question simulation cannot, whether it is fun.
|
||||
Running alongside, and independent of all of it: **print-and-play components.**
|
||||
[`rules/as-built.md`](rules/as-built.md) carries every card face as the game actually deals it, so
|
||||
layout and art are the only remaining work before a table playtest — which answers the one question
|
||||
simulation cannot, whether it is fun.
|
||||
|
||||
Run the harness with `node src/sim/harness.ts [games] [length]`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user