Show the build, play from the keyboard, and clean up the ledger
Five things from the second playtest. A status line at the top of every screen: the game, the pack, your current title, and the version plus the commit it came from. `tools/stamp.js` writes the commit into src/build-info.js before serving and before building, so a distributed dist/theladder.html states exactly which commit produced it. An uncommitted working tree gets a `+` suffix — "4cab9fc+" is honest in a way a bare SHA would not be. The whole game is now playable on Enter. Every screen marks one control and the app focuses it after each render: the first *available* option while choosing, the next-turn button once the result is in, "keep going" on the retrospective. Tab and Shift+Tab reach the other options. Locked options needed no special handling — the browser's tab order already skips disabled controls, so they stay visible without being in the way. "What is notable? under What changed?" — two fixes. `notable` is the retrospective's own list of moments; a display rule can now say `inLedger: false` and it is left out, because "Notable — changed" tells nobody anything. Flags are the opposite and stay, but as sentences the pack supplies rather than as booleans: "The envelope is in your locker." instead of "the envelope: now true". Exported logs live in logs/, gitignored, and `npm run analyze` reads the newest one there when given no argument. A log records what a real person did turn by turn, including whatever they typed into the feedback box — committing one once would put it in the history for good. Version set to 0.3.0 on the reasoning that the engine was 0.1 and the interface 0.2; say if you want a different scheme and I will renumber. 119 tests. Reasoning in docs/DECISIONS.md §25-28. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VMSFHyVPitUoosW5wyEADj
This commit is contained in:
co-authored by
Claude Opus 5
parent
4cab9fc41e
commit
76072edf4e
@@ -313,3 +313,55 @@ eight events against the mailroom's nineteen meant its two floor events were 46%
|
||||
of every promoted run, one every three turns. Promotion was moving the player
|
||||
into *thinner* content. Three more events and a weight rebalance took the top
|
||||
two to 24.5%, and the heaviest recurrence from every ~3 turns to every ~5.
|
||||
|
||||
## 25. The screen says which build it is
|
||||
|
||||
Playtest: *"need entry on the main screen showing what version we're running…
|
||||
so it's easy to tell when new stuff is."*
|
||||
|
||||
A status line at the top of every screen names the game, the pack, the player's
|
||||
current title, and the version plus the commit it was built from. `tools/stamp.js`
|
||||
writes the commit into `src/build-info.js` before serving and before building,
|
||||
so a distributed `dist/theladder.html` states exactly which commit produced it,
|
||||
and a dev session says so too. A working tree with uncommitted changes gets a
|
||||
`+` suffix — "4cab9fc+" is honest in a way that a bare SHA would not be.
|
||||
|
||||
The file is tracked rather than generated-and-ignored so a fresh clone runs
|
||||
without a build step first. It changes at most once per commit, and the stamper
|
||||
ignores a same-commit restamp so a running server does not churn the tree.
|
||||
|
||||
## 26. The whole game is playable from the keyboard
|
||||
|
||||
Playtest: *"when I get the results, the focus should automatically be on the
|
||||
next day, so I can just hit Enter."*
|
||||
|
||||
Every screen marks one control with `dataset.autofocus` and the app focuses it
|
||||
after each render: the first *available* option while choosing, the next-turn
|
||||
button once the result is in, "keep going" on the retrospective. A run is
|
||||
therefore playable on Enter alone, with Tab and Shift+Tab to reach a different
|
||||
option.
|
||||
|
||||
Locked options need no special handling — the browser's own tab order skips
|
||||
disabled controls, so they stay visible without being in the way, which is
|
||||
exactly the behaviour wanted.
|
||||
|
||||
## 27. The ledger is written for a player, not for the engine
|
||||
|
||||
Two fixes from the same playtest note, *"what is notable? under what changed?"*.
|
||||
|
||||
`notable` is the retrospective's own list of moments. Reading "Notable —
|
||||
changed" in the turn ledger tells nobody anything, so a display rule may now
|
||||
say `inLedger: false` and it is left out.
|
||||
|
||||
Flags are the opposite: a flag flipping is a fact about the world and worth
|
||||
seeing. But "the envelope: now true" is engine talk. A display rule can supply
|
||||
`whenTrue` and `whenFalse` sentences — "The envelope is in your locker." — and
|
||||
the ledger prints those instead of a delta.
|
||||
|
||||
## 28. Exported logs live in logs/, and are not committed
|
||||
|
||||
`logs/` holds exported feedback logs and `npm run analyze` reads the newest one
|
||||
there when given no argument. The logs are gitignored: they record what a real
|
||||
person did turn by turn, including anything they typed into the feedback box.
|
||||
That is not repository content, and making it so once would put it in the
|
||||
history for good.
|
||||
|
||||
Reference in New Issue
Block a user