From the first two multiplayer playtests of v0.8.0.9, each traced before fixing.
The engine:
- A train on a card BEHIND the one departing no longer triggers a clearance
ruling or an opposite-direction bar (#26). Reproduced from the exported
save: X15 was held over X18 behind it, and X18 then collided into the full
Whistle Post. Games in progress holding a ruling the engine no longer asks
for will not resume (28 of 40 recorded four-seat games); shipped as is at
Jesse's call.
- `mainlineModified` carries the card's previous kind, so the log can say
what a Realignment converted (#27).
The screen:
- The turn chart and the Division map name the player whose move is on
screen while bot turns replay, not the live actor (#25).
- The owning player's name is no longer outlined by the turn arrow's stroke,
which made it unreadable (#24).
- A Mainline card flashes on the map when a Realignment changes it (#28).
- The history is held back with the board and revealed step by step, instead
of arriving whole while the board is still catching up (#29).
- A ruling made by holding the office reads "Superintendent Player X" (#30),
and no line names a player twice (#31).
- A seated player can download their own game as a save file: the play
page's Save replay button, fed by GET /api/save?token=… (#32). The StartOS
action cannot do this — an action result is text only.
Closes#24Closes#25Closes#26Closes#27Closes#28Closes#29Closes#30Closes#31Closes#32
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017nnuCv8UodHucFfx3LWEoX
TODO #13, #15 and #18 — Gitea#20 steps 2-4 pointed at a seated player's own screen.
Every accepted intent, and every automatic phase that does anything, becomes an
ordered presentation step. A bot's whole switching turn used to land in one push;
now it arrives as a run of steps, the district panel follows whoever is acting,
and a [N behind] … [Skip] row says how far the board is from the game.
Solitaire runs the same path — one collector inside submit(), which both session
kinds already funnel through — which is where its automatic phases finally get a
visible beat.
Dwell is assigned by kind: switching holds the screen, turn bookkeeping costs
nothing, and the clock turning over earns the beat. Tunable per viewer without a
rebuild, and off entirely at pace 0.
Also: switching was the one class of action logging unattributed, and now names
its train. Reasoning, measurements and the three things that turned out wrong are
in CHANGELOG.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6cF1iYvJ1kNmzYBzu4QX6