• v0.4.9d — three playtest bugs: a train that looked gone, an unload that ignored the pick, a hang that wasn't one

    Jesse.Markowitz released this 2026-08-21 03:26:39 +00:00 | 75 commits to main since this release

    Patched directly onto 0.4.9a rather than the in-progress 0.5.0 line.

    A switching train vanished from the board the moment it left the Office. selectedTrain in
    officeSvg (board-svg.ts), which gates whether a card draws a train's crew badge, was only ever
    assigned inside the cell.adTracks !== null branch — true for the Office card alone. A train
    standing anywhere else, which is everywhere it stands while actually being switched, drew no badge
    at all. Game state was never affected; confirmed against the reported save with the engine directly.
    Fix hoists the assignment out of the guard so it runs for any card with a train on it.

    Unloading always took the westmost car, whichever one was picked. laborer.beginUnload carried the
    player's chosen carIndex, and check() validated that specific car, but the unloadBegan event
    it produced carried only the car's type — the reducer that performs the swap re-derived the target
    with industryTrack.cars.findIndex(c => c.loaded), which always answers the first loaded car in
    track order regardless of what was requested. Fix adds carIndex to the event and uses it directly.

    A legal decision could render with zero buttons, which looked exactly like a hang. The "where does
    this Extra start" decision is titled by trainCardTitle, beginning "Making up Extra X22…" — the
    same prefix renderActions() stripped from the action list on the assumption it only ever belonged
    to the separate yard-chip car-placement panel. With no tray yet being filled, that panel is null, so
    nothing rendered the Extra's decision either: a legal, correctly-computed option with no button
    anywhere on the page. Replaying the reported save found no engine deadlock at any step — the engine
    always had a move. Fix matches the exact title of the one group the yard-chip panel covers instead
    of a title-prefix regex.

    New tests for all three: a train parked on an ordinary facility card must draw its crew badge; three
    differently-typed loaded cars, unloading index 2, must leave indices 0 and 1 alone; the existing
    softlock regression test now mirrors the real render filter instead of only the raw menu, plus a
    deterministic test for the exact reported scenario. 590 tests, 0 failures.

    Downloads