v0.4.9f — an Extra starts where you put it, a train card is never discarded

The 0.6.2 change, ported to the playtest line. Three from the v0.4.9e gameplay-testing round —
Gitea#4 extras did not start where the player said, #6 train cards could be discarded, #7 four
train cards had the wrong coach counts — plus two bugs found underneath #4. Gitea#2 is diagnosed
but NOT fixed; it needs a ruling, and the reasoning is in TODO.md.

GITEA#4 — AN EXTRA STARTS WHERE THE PLAYER PUTS IT. Both Division Points are offered now, and the
START decides the direction rather than the number: an odd westbound Extra placed at the WEST end
would otherwise leave the Division on its first move having crossed nothing and be paid for the
run. At an Interchange or a Control Point the player picks the direction. The Interchange start is
a YARD, off the running line, which is what makes the Superintendent clause work — placing an
Extra there can never force a collision, a guaranteed one holds it for another Stage, and a
potential one is the Superintendent's to rule on, which are §8.1's two existing answers. Where an
Extra may start is a new setting in the New Game dialog, defaulting to what the engine already did
so this build does not change under its testers mid-line.

FOUND UNDERNEATH IT, both already shipping: an Extra started away from a Division Point could
never be given a consist and ran empty, so the Control Point start has been broken since it was
added; and collide left destroyed trains' transits on the Mainline card, permanently poisoning
that card for every later train.

THE MAINLINE CARDS ARE DEALT FROM THE PRINTED DECK NOW, without replacement. They were drawn from
the nine types with replacement, so a Division could hold two Interchanges — and "an Extra may
start at the Interchange if one is on the board" only reads as a rule if the board holds at most
one. This re-deals every seed, so both published replays were retired and re-recorded.

GITEA#6 — A TRAIN CARD IS NEVER DISCARDED, Timetabled and Extra alike. No forcing mechanism was
needed: nothing discardable plus a hand over the limit leaves exactly one legal way to end the
turn, and playing a train is unconditionally legal, so a hand of four cannot trap anyone. The hand
panel says so on the train, and the blocked end-turn button changes its wording.

GITEA#7 — COACH COUNTS. 1/2 Crack Limited 3 -> 2, 5/6 The Sparrow 2 -> 3.

WHAT DIFFERS FROM THE MAIN LINE. The car-placement round rotation test that accompanies #7 there
arrived with the 0.6 multiplayer work and does not exist here, so there was nothing for the
coach-count change to follow. src/web/main.ts and test/web.test.ts needed hand-resolution: this
line's New Game dialog has neither the mode radios nor the victory dials, so only the Extra-start
parts were taken. The content.ts comment pass came across whole; main's TODO documentation item
did not, since this line keeps its own TODO.

623 tests pass, tsc clean, site builds.
This commit is contained in:
Jesse.Markowitz
2026-08-22 21:42:27 -04:00
parent 7c35e002af
commit e255076b5c
29 changed files with 3521 additions and 2163 deletions
+42 -2
View File
@@ -14,8 +14,22 @@ to Rules Questions.
## Next
Nothing scheduled at the moment — v0.4.9's plan (coordinate labels, the no-switching fix, the
expedite rewrite, the `evaluateClearance` bug, the splash artwork) is built; see Done below.
Queued 2026-08-22, from the v0.4.9e gameplay-testing report filed as Gitea issues.
1. ~~**Gitea#4 — confirm that extra trains start properly**~~ — done in v0.4.9f. Either Division
Point, the Interchange with a direction chosen there, a Control Point gated by a new `extraStart`
setting, and the Superintendent's hold on the way out of the Interchange yard. Reasoning in
`docs/rules/implications.md` §7.
2. ~~**Gitea#6 — players may not discard train cards**~~ — done in v0.4.9f. Timetabled and Extra
alike; the forced play falls out of the hand limit rather than needing a mechanism of its own.
Reasoning in `docs/rules/implications.md` §6.2.
3. ~~**Gitea#7 — coach counts on four train cards**~~ — done in v0.4.9f. 1/2 Crack Limited 3 → 2,
5/6 The Sparrow 2 → 3.
4. **Gitea#2 — four porters, two passengers on the platform, and only one may be worked.**
DIAGNOSED, AWAITING JESSE'S RULING — see Play Balance below.
The rest of v0.4.9's plan (coordinate labels, the no-switching fix, the expedite rewrite, the
`evaluateClearance` bug, the splash artwork) is built; see Done below.
---
@@ -208,6 +222,32 @@ not read that drop as a deck problem.
## Play Balance
- [ ] **Gitea#2 — passenger operations starve themselves of coaches, and the game says nothing.**
Reported from v0.4.9e play: the Sparrow pulls into the Terminal with two loaded coaches, two
passengers wait on the platform, four porters are unused, and only ONE of the four intended
actions can be taken. Reproduced from the save: the Division Yard holds **1 empty coach and 0
loaded**, while the Classification Yard holds **4 loaded and 4 empty** that cannot come back.
**The engine is not deviating from the rules.** §9.2 discards the white coach into the
Classification Yard on boarding, draws the white coach from the Division Yard on de-training,
and §2.2 returns the Classification Yard only when the Division Yard is empty — all three
implemented exactly. The problem is the interaction: a single global refill condition over a
pile holding six commodities with very different demand, where coaches are consumed by BOTH
halves of every passenger cycle. Traced over the reported game, the coach pool runs from 8+/8−
to 0+/1− by Day 5.
**Three ways out, and it is Jesse's call which:** (a) refill when the Division Yard is dry of
the type-and-state being asked for rather than dry of everything; (b) the same trigger but
return only the cars of that type; (c) leave the rules alone and raise the coach count in
`ROLLING_STOCK_SUPPLY`. Measure (a) or (b) over 400 paired seeds before shipping.
- [ ] **A blocked PASSENGER facility produces no impediment at all.** `impediments()`
(`src/sim/narrate.ts`) opens with `if (!f || f.kind !== 'freight') continue`, so the "why
nothing is moving" panel has never had anything to say about a platform. That is the second
half of Gitea#2 and the half that is unambiguously a bug: the player was not merely blocked,
he was given no reason — the button simply was not there. Worth fixing whichever way the
supply question is settled.
Numbers chosen to fix a measured problem rather than taken from the design. Revisit once the victory
target is settled and freight carries its intended share; read no balance conclusion from a revenue
number until the rules stop moving.