Files
station-master/TODO.md
T

5.4 KiB
Raw Blame History

To do

Things worth coming back to. Anything noted here should either get done or get an explicit decision not to — the point is that nothing quietly evaporates.

Ordered within each section by how much it is currently costing us.


Next

  • Find out why switching work does not become Revenue. The crew now drops 11 cars a game and couples 8 (was 3.3 and ~0.4), at about 4 Moves per productive act — real railroading. Revenue did not move (3.9 → 3.2). Either the freight it is now shuffling is not the freight the industries want, or the loads finish too late in the Day to be worked, or the Revenue is going somewhere and being lost again. Measure the freight chain end to end before changing anything.

Open questions for Jesse

Blocked on a decision, not on work.

  • Q13 — rear-end collisions on a Mainline card. §10 says a Mainline collision is the Superintendent's fault and removes both trains, and ABS Signals exists to prevent rear-enders — but §8.3's trigger list does not include one, and none is implemented. Granting clearance is currently free: verified, both trains survive, no penalty. Three candidates: collide on entry (clearance becomes a gamble), collide on catching up (rewards judging the gap), or accept that clearance is safe and ABS Signals is worth less than it reads. The buttons currently describe only what the engine does, so nothing promises a consequence that cannot happen.
  • Poling. The only card in the deck with no defined behaviour — the sheet records its effect as "TBD in the source". A test asserts it stays TBD so nobody invents one.
  • Heavy Grade orientation at setup. The card says "Player sets orientation", but createGame is synchronous and has no decision point, so it is currently rolled from the seed. Should become a real choice when setup gains an interactive phase.

Balance, provisional

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.

  • Office card density (Depot 4→8, Station 2→4, Terminal 1→2). Chosen to remove a 25% chance of an unwinnable opening deal. Blunt: it lifts the whole ladder and dilutes every other category. The better answer may be fewer Terminals, a cheaper first upgrade, or more A/D capacity at the Whistle Post itself.
  • Industry density (9 → 27, Gap 12). Restored roughly the prototype ratio; freight still only 1318% of gross revenue.
  • Train density. Left alone by decision, but noted: 22 train cards in 140 are drawn less often than 22 in 115 were, and trains scheduled fell 2.9 → 2.1 as a side effect of the other density changes.
  • The victory target itself (20 over 5 Days). Still only 1 win in 100. Worth revisiting once the bot exploits sidings, since that is a known unclaimed gain.

Not yet built

  • Action cards (10) and Space-use cards (12). Genuinely multiplayer-only — they are played AT an opponent. Rejected with NOT_IMPLEMENTED.
  • Multiplayer proper. The engine runs 25 player games and the bot plays them, but there is no server, no turn submission, and no per-player view.

Smaller things

  • Carry links forward in replay frames. Static per card and never changes once laid, but re-sent whenever anything on the board changes. The replay is 3.4 MB, mostly board state.
  • The 5 MB replay size limit is arbitrary. Invented, not a browser constraint. It has earned its place — it caught a 5.2 MB payload that turned out to be the whole grid re-serialised every frame — but the number itself deserves a reason.
  • Curves are drawn as two straight segments meeting, not true arcs. Fine at this size, angular close up.
  • Wide boards scroll. A 40-card district and a 13-section Division both need horizontal scrolling. Legible, not compact.
  • No way to start a fresh game from inside the page. ?seed= gives a reproducible deal and "new game" only appears once a game has ended, so abandoning a bad opening means editing the URL.
  • Save/restore is not version-aware. A save from an older ruleset stops replaying rather than failing loudly, which is the safe direction but says little about what changed.

Done, kept for the reasoning

  • Teach the bot what a siding is for. Nose coupling (§A.3) implemented, so approach direction decides which car is droppable; the bot runs around rather than setting out, when the drop can follow. Switching activity transformed, revenue unchanged.
  • Curve geometry. Curves were topologically identical duplicates of turnouts, and nothing reached north, so a district could only be a vertical column. Now two-port rotatable arcs.
  • Q10 — when track may be laid. During the "draw a card" option, one piece a turn. Track was a card when §6.2 was written; a 26-piece supply has no hand to bound it.
  • Q11 — which way a Heavy Grade climbs. Answered from the card: it prints "(Up)" and "Player sets orientation", so it is a property of the placed card, not a compass constant.
  • Q12 — Whistle Post lock-in. Players always start at a Whistle Post; office density doubled instead.