The save warning, the buttons, and a claim that was simply false

- The save warning is a warning: 15px, weight 500, bright amber on a
  deeper ground with a 5px rule down the side. (What Jesse was looking
  at is v0.7.8, where this line is still the small grey .ng-note —
  none of 0.7.9 has been deployed.)

- The buttons read the same on both screens: "Continue saved game" and
  "Create new game". Solitaire said "Continue Existing Saved Game" and
  "Deal New Game", the lobby said "Create game" — three phrasings for
  two actions.

- "Off in every game type" is deleted from the Optional rules note
  because it was not true. Checked against the presets rather than
  taken on trust: discardTimetabled (§6.2, a Timetabled train may be
  discarded) ships ON in all four types, not just Co-op. The note now
  says only what holds for all of them.

Stays in the unshipped v0.7.9. 877 tests pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AdG46Ja2PEDBkpqiDazMoX
This commit is contained in:
Jesse.Markowitz
2026-08-30 09:26:56 -04:00
co-authored by Claude Sonnet 5
parent a70b7f88f3
commit 788e5f2eec
3 changed files with 33 additions and 14 deletions
+17
View File
@@ -218,6 +218,23 @@ the state the outcome was decided in — and stripped of markup, since it lands
console line. The drift test that compared this string against the engine now maps `win`/`loss` to
`won`/`lost`, so it still checks the two agree rather than that they are spelled alike.
### The save warning, the buttons, and a claim that was simply false
Three more from Jesse reading the two screens side by side.
- **The save warning is a warning.** "That's a warning, not an 'oh by the way'." It had already moved
off `.ng-note` earlier in this release; it is larger and heavier again now — 15px, weight 500,
bright amber on a deeper ground with a 5px rule down the side. Worth noting what he was actually
looking at: `phoenix.local` runs v0.7.8, where this line is still the small grey `.ng-note`. None
of this release has been deployed.
- **The buttons read the same on both screens**: **Continue saved game** and **Create new game**.
Solitaire said "Continue Existing Saved Game" and "Deal New Game"; the lobby said "Create game".
Three phrasings for two actions.
- **"Off in every game type" is deleted from the Optional rules note, because it was not true.**
Checked against the presets rather than taken on trust: `discardTimetabled` — §6.2's "a Timetabled
train may be discarded" — ships **on** in all four types, not just Co-op. The note now says only
what is true of all of them: "Each one changes how the game plays."
### Three wording and layout fixes
- **The collision entries** on all three screens now read "The game ends immediately and results in
+2 -2
View File
@@ -2152,14 +2152,14 @@ function commitNewGame(wired: WiredGameType, seedFieldValue: string): void {
* to the screen that already asks these questions properly.
*
* Nothing is lost on the way: `render()` calls `save()` every frame, so the game in progress is
* always on disk, and the setup screen offers "Continue Existing Saved Game" to come back to it.
* always on disk, and the setup screen offers "Continue saved game" to come back to it.
*/
const newBtn = document.getElementById('newgame');
if (newBtn) {
newBtn.onclick = () => {
showScreen('solitairesetup');
// IN PLACE, not a navigation: the live session stays in memory, so the fields can open on the
// rules actually being played and "Continue Existing Saved Game" is just showing the board
// rules actually being played and "Continue saved game" is just showing the board
// again rather than a reload and a replay.
runSolitaireSetup(new URLSearchParams(), true, session.view());
};
+14 -12
View File
@@ -81,9 +81,11 @@ dialog input:focus{outline:none;border-color:#4d6fa8}
where the eye has already learned there is nothing to act on. Sized and coloured to be read
(Jesse, 2026-08-30). Amber rather than red: losing a saved game is a real cost, not a danger, and
red here would outrank the actual rules of the game sitting above it. */
#ss-saved-note{font-size:14px;line-height:1.5;color:#f0c674;background:#2e2718;
border:1px solid #7a6320;border-left-width:4px;border-radius:5px;padding:10px 12px;margin:16px 0 0}
/* Two live choices, so neither is the quiet one: `Deal New Game` keeps the primary blue it has when
#ss-saved-note{font-size:15px;font-weight:500;line-height:1.55;color:#ffcf70;background:#332a15;
border:1px solid #b8912c;border-left:5px solid #e0a83c;border-radius:5px;padding:12px 14px;
margin:18px 0 0}
#ss-saved-note b{color:#ffe3a6}
/* Two live choices, so neither is the quiet one: `Create new game` keeps the primary blue it has when
it is the only button, and `Continue` is given the same weight rather than reading as a cancel. */
#ss-deal{background:#31527f;border-color:#4d6fa8}
#ss-resume{background:#2f5340;border-color:#4f8a68}
@@ -534,7 +536,7 @@ ul.blocked li{padding:2px 0}
<div class="set-group">
<h3>Optional rules</h3>
<p class="ng-note">Off in every game type; each one changes how the game plays.</p>
<p class="ng-note">Each one changes how the game plays.</p>
<div class="set-row" id="lb-visibility-row">
<label class="ng-num"><span>Reduced Visibility — five switching Moves instead of six in the
night Stages (1&ndash;3 and 11&ndash;12)</span>
@@ -567,7 +569,7 @@ ul.blocked li{padding:2px 0}
</details>
<div class="lb-span">
<button id="lb-create" type="button">Create game</button>
<button id="lb-create" type="button">Create new game</button>
<p class="lb-error" id="lb-create-err" role="alert"></p>
</div>
</div>
@@ -761,7 +763,7 @@ ul.blocked li{padding:2px 0}
<div class="set-group">
<h3>Optional rules</h3>
<p class="ng-note">Off in every game type; each one changes how the game plays.</p>
<p class="ng-note">Each one changes how the game plays.</p>
<div class="set-row" id="ss-visibility-row">
<label class="ng-num"><span>Reduced Visibility — five switching Moves instead of six in the
night Stages (1&ndash;3 and 11&ndash;12)</span>
@@ -795,13 +797,13 @@ ul.blocked li{padding:2px 0}
save (`commitNewGame` calls `clearSave`), so without a way back the door would be a way to
lose a game in progress — and the door is reached by clicking "Play solitaire", which nobody
reads as "discard what I was playing". -->
<p id="ss-saved-note" hidden><b>You have a solitaire game in progress.</b> Dealing a new game
replaces it permanently &mdash; there is no undo. Choose <b>Continue Existing Saved Game</b>
to pick it up where you left off.</p>
<p id="ss-saved-note" hidden><b>You have a solitaire game in progress.</b> Creating a new game
replaces it permanently &mdash; there is no undo. Choose <b>Continue saved game</b> to pick it
up where you left off.</p>
<menu class="ng-buttons">
<button id="ss-resume" type="button" hidden>Continue Existing Saved Game</button>
<button id="ss-deal" type="button">Deal New Game</button>
<button id="ss-resume" type="button" hidden>Continue saved game</button>
<button id="ss-deal" type="button">Create new game</button>
</menu>
</section>
</div>
@@ -928,7 +930,7 @@ ul.blocked li{padding:2px 0}
Deleting it removes the drift rather than re-wording it.
Nothing is lost by navigating away mid-game: `render()` calls `save()` on every frame, so the
game in progress is always on disk, and the setup screen offers "Continue Existing Saved Game"
game in progress is always on disk, and the setup screen offers "Continue saved game"
to come straight back to it. -->
</div><!-- /gameui -->