v0.8.0.16 — the guide a tester can reach, and a flag that named the card instead of the gate

v0.8.0.15 wrote a Quickstart for a tester who has never played and then left it
in docs/, where a tester does not look — reachable only by somebody who already
has the repository. Nobody handed the box had it. build-web.ts now copies it to
dist/quickstart.md and the splash page offers it under the three doors, as a
line rather than a fourth door: reading the guide is not a way to play, and
giving it equal weight in that grid would say it is.

COPIED, NEVER RE-WRITTEN. The Markdown document stays the one copy. A
hand-written HTML twin drifts from it on the first edit, which is the failure
#15a was raised about and precisely what the v0.8.0.15 pass spent itself
undoing. It is served as PLAIN TEXT, which is honest rather than good — tables
render as pipes and the links do not click. Rendering it into a styled page
wants a small Markdown converter and is filed as TODO #109; build-web.ts's
comment names that number rather than gesturing at "the next step", so the file
and the worklist cannot drift the way the references just did.

Two things had to be true and tsc checks neither, so both are tests. The href on
the splash page and the filename the build writes are two strings with nothing
connecting them: rename the document and the build quietly publishes nothing
while the page keeps offering a link that 404s. And a .md file must not arrive
as a download — the server's MIME fallback is application/octet-stream, which a
browser saves instead of displaying, so the link would have handed a tester a
file to save rather than a page to read. '.md' is in http.ts's table now, and
the test reads that table out of the source rather than asserting on a copy of
it, which would pass while the real one was wrong.

VERIFIED AGAINST A RUNNING SERVER, not only compiled: 200,
text/plain; charset=utf-8, the guide's own first lines, and the splash link
resolving.

THE sortsCars COMMENT. Asked after v0.8.0.15 whether everything now agreed, and
the audit turned up one place that did not — the field's own doc comment named
the card's printed text as though it were the flag's meaning. Nothing reads it
to permit a sort; its two readers, resolveExtraStart in apply.ts and the
enumeration in legal.ts, both ask whether this is the one Mainline card with a
Yard Limit and therefore the one an Extra may be made up and started on. Comment
only, and worth the bump because of where it is: it is what a developer reads
before using the flag, and it is the likeliest source of the sentence v0.8.0.15
had to correct off the board. The name is kept for its link to the card face and
the comment now says outright that the name is not the meaning.

The five references and docs/design.md read v0.8.0.16. They describe this build
because the audit re-checked them against it, not because the number was swept
forward — a stamp bumped without a reading is worth less than none.

1001 fast tests and 35 sim tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MUizFYCMHRWhbWwXhp7WPR
This commit is contained in:
Jesse.Markowitz
2026-09-21 01:28:51 -04:00
co-authored by Claude Opus 5
parent f308a2d94d
commit dc31555625
14 changed files with 203 additions and 9 deletions
+85
View File
@@ -19,6 +19,91 @@ page as `v0.1.0 · <sha> · <date>`, so what is deployed can always be identifie
---
## 0.8.0.16 — 2026-09-20
The Quickstart put where a tester can actually reach it, the last place that still told the old
story about the Interchange, and the release that carries v0.8.0.15's corrected card text into a
package.
### The Quickstart is published beside the game
v0.8.0.15 wrote a Quickstart for a tester who has never played, and then left it in `docs/`, where
a tester does not look — reachable only by someone who already has the repository. Nobody being
handed the box has it.
`build-web.ts` now copies `docs/StationMaster-Quickstart.md` into `dist/quickstart.md`, and the
splash page offers it under the three doors: *New to Station Master? Read the Quickstart guide.*
**Not a fourth door** — reading the guide is not a way to play, and giving it equal weight in that
grid would say it is.
**Copied, never re-written.** The Markdown document stays the one copy. A hand-written HTML twin
would drift from it on the first edit, which is exactly the failure #15a was raised about and
exactly what the v0.8.0.15 pass spent its time undoing: four references a month and two minor
versions out of date.
**Served as plain text, which is honest rather than good.** Tables render as rows of pipes and the
links do not click. Rendering it into a styled page wants a small Markdown converter and is filed
as **TODO #109**; this is the fifteen-minute version that gets the guide in front of testers for
this round instead of leaving them without one.
Two things had to be true and neither is checked by `tsc`, so both are tests:
- **The link has to find the file.** The href on the splash page and the filename the build writes
are two strings with nothing connecting them — rename the document and the build quietly
publishes nothing while the page keeps offering a link that 404s. The test asserts the guide is
in `dist`, is the guide, and is the file the splash page names. The build also warns loudly
rather than silently skipping a missing document.
- **A `.md` file must not arrive as a download.** The server's MIME fallback is
`application/octet-stream`, which a browser saves instead of displaying, so the link would hand a
tester a file rather than a page. `'.md': 'text/plain; charset=utf-8'` was added to the table in
`http.ts`, and the test reads that table out of the source rather than asserting on a copy of it,
which would pass while the real one was wrong.
### `sortsCars` says what it gates, not what the card prints
Asked directly after v0.8.0.15 — does everything now agree? — and the audit turned up one place that
did not. The field's own doc comment read:
```ts
/** Interchange: "Sort cars in new order". */
sortsCars: boolean;
```
which names the printed text as though it were the flag's meaning. Nothing reads it to permit a
sort. Its two readers — `resolveExtraStart` in `apply.ts` and the enumeration in `legal.ts` — both
ask the same question, which is whether this is the one Mainline card with a Yard Limit and
therefore the one an Extra may be made up and started on.
**Comment only, and worth the bump because of where it is.** This is what a developer reads before
using the flag, and it is the most likely source of the sentence v0.8.0.15 had to correct — the one
telling players, on the board, that cars could be sorted at an Interchange. The name is kept for its
link to the card face, and the comment now says outright that the name is not the meaning.
Everything else already agreed, and was checked rather than assumed: `mainlineDescription`, the
generated `rules/as-built.md`, the Mainline deck reference and the Rules FAQ all say the printed
sorting is unimplemented and that a consist is re-ordered at a Small Yard. `rules/implications.md`
is the deliberate exception and was already correct — it transcribes what the card face prints and
then records that the concept is "still unimplemented".
### The reference stamps, and what was filed rather than done
The five documents v0.8.0.15 stamped — the Quickstart, the Rules, Components, the Home deck and the
Mainline deck — plus `docs/design.md` now read **v0.8.0.16**, and the Rules book's implementation
note about `card.discard` says the same. They describe this build because the audit above re-checked
them against it, not because the number was swept forward: the point of the stamp is that it was
earned, and a stamp bumped without a reading is worth less than none.
**TODO #109** holds the part deliberately not done — rendering the guide into a styled page instead
of serving it as plain text. `build-web.ts`'s comment names that number rather than gesturing at
"the next step", so the file and the worklist cannot drift apart the way the references just did.
### Why this is a release at all
One player-visible change, the link to the guide, and one that only a developer reads. The
Interchange correction a player actually sees on the board is v0.8.0.15's; this is the version the
wrapper bundles, so that correction reaches the box rather than only the repository — and a tag
with an uncommitted comment sitting on top of it is not a thing to package.
## 0.8.0.15 — 2026-09-20
The reference documentation brought up to the game as it actually runs, ahead of the next round of