docs(handoff): refresh post-v0.21.2 — anchor to new tag, update menu

Mirrors the post-v0.21.0 → v0.21.1 → v0.21.2 cut-then-refresh
pattern. Cut commit (f23df3b) edited only CHANGELOG; this
follow-up resets the handoff so a fresh session picks up cleanly
post-v0.21.2.

Updated:
- Header points to v0.21.2 at f23df3b; opening paragraph
  summarizes the patch's three threads (accessibility
  extensions, replay polish, first real Toast Error consumer).
- Status at pause: tests bumped to 1195 (net +3 from v0.21.1's
  1192); tags list extended through v0.21.2.
- "Since the v0.21.1 cut" → "Since the v0.21.2 cut" with the
  closure narratives dropped (now in CHANGELOG.md § [0.21.2]).
  Section reset to "no threads in flight" placeholder.
- Visual-identity follow-ups: marked floating MOVE chip closed
  by v0.21.2 (`2fb2d63`), Toast Error closed by v0.21.2
  (`68d50b5`); HC + reduce-motion entries updated to reflect
  v0.21.2's HC chrome rollout (8 surfaces) and splash
  reduce-motion gating. Toast Warning still open with a
  candidate driver suggestion (daily-challenge expiry).
- Resume prompt menu retuned: A (Android) and D (Phase 8)
  unchanged; B narrowed to just the screen-takeover redesign
  (the floating chip piece shipped); C narrowed to just
  Warning variant (Error done); new E added for
  HC+reduce-motion on dynamic-paint sites (HUD action buttons,
  etc — explicitly carved out of the v0.21.2 HC rollout
  because of paint-cycle races).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-05-08 14:08:17 -07:00
parent f23df3b805
commit 12fba2157a
+83 -72
View File
@@ -1,46 +1,41 @@
# Solitaire Quest — Session Handoff # Solitaire Quest — Session Handoff
**Last updated:** 2026-05-08 — **v0.21.1 cut and tagged at `daa655a`**, **Last updated:** 2026-05-08 — **v0.21.2 cut and tagged at `f23df3b`**,
working tree clean, all post-tag work pushed to origin. working tree clean, all post-tag work pushed to origin.
v0.21.1 is a patch release for the post-v0.21.0 work: closes v0.21.2 is a patch release for the post-v0.21.1 polish work:
Resume-prompt Options A (app icon — runtime `Window::icon` plus extends accessibility (full HC chrome rollout across 8 surfaces;
the 9-size PNG hierarchy) and F (high-contrast + reduce-motion splash reduce-motion gating on scanline + cursor pulse), adds a
accessibility modes — Settings flags wired through engine and floating MOVE chip above the destination card during replay
UI). Plus a card-visual iteration cycle that moved through three playback, and lights up the first real consumer of
states (v0.21.0 Terminal pink/gray → brief 4-colour-deck `ToastVariant::Error` (a "Invalid move" toast as the third leg
experiment → traditional 2-colour Microsoft-Solitaire-on-dark-mode of the existing audio + visual rejection-feedback stool).
red/near-white) and two visible-bug fixes (suit-coloured border
anti-aliasing artifact at rounded corners, pile-marker
bleed-through producing "gray L" shapes at occupied piles —
the latter implemented the previously-documented-but-not-enforced
"markers visible only at empty piles" invariant).
Full v0.21.1 detail lives in `CHANGELOG.md` § [0.21.1]. This Full v0.21.2 detail lives in `CHANGELOG.md` § [0.21.2]. This
file from here on focuses on what's *open* post-cut and how to file from here on focuses on what's *open* post-cut and how to
resume. resume.
## Status at pause ## Status at pause
- **HEAD locally:** see `git rev-parse HEAD`. The cut commit is - **HEAD locally:** see `git rev-parse HEAD`. The cut commit is
`daa655a`; any post-cut docs edits ride on top of that. `f23df3b`; any post-cut docs edits ride on top of that.
- **HEAD on origin:** matches local. v0.21.1 is fully on origin. - **HEAD on origin:** matches local. v0.21.2 is fully on origin.
- **Working tree:** clean. No WIP outstanding. - **Working tree:** clean. No WIP outstanding.
- **`artwork/` directory:** still untracked. Intentional. - **`artwork/` directory:** still untracked. Intentional.
- **Build:** `cargo clippy --workspace --all-targets -- -D warnings` - **Build:** `cargo clippy --workspace --all-targets -- -D warnings`
clean. clean.
- **Tests:** **1192 passing / 0 failing** across the workspace - **Tests:** **1195 passing / 0 failing** across the workspace
(net +8 from v0.21.0's 1184 baseline). Detail in (net +3 from v0.21.1's 1192 baseline). Detail in
`CHANGELOG.md` § [0.21.1] § Stats. `CHANGELOG.md` § [0.21.2] § Stats.
- **Tags on origin:** `v0.9.0` through `v0.21.1`. v0.21.1 is on - **Tags on origin:** `v0.9.0` through `v0.21.2`. v0.21.2 is on
`daa655a`; v0.21.0 stays on `04f9bf9`; v0.20.0 stays on `f23df3b`; v0.21.1 stays on `daa655a`; v0.21.0 stays on
`41a009a`. `04f9bf9`; v0.20.0 stays on `41a009a`.
## Since the v0.21.1 cut ## Since the v0.21.2 cut
No threads in flight. Working tree clean as of 2026-05-08. New No threads in flight. Working tree clean as of 2026-05-08. New
work since the cut would land here as commit narratives; for work since the cut would land here as commit narratives; for
the v0.21.1 contents themselves, see `CHANGELOG.md` § [0.21.1]. the v0.21.2 contents themselves, see `CHANGELOG.md` § [0.21.2].
## Open punch list ## Open punch list
@@ -77,29 +72,45 @@ palette refresh all shipped in v0.20.0 + v0.21.0. What stays open:
mini-tableau preview, playback controls, move-log scroll, and mini-tableau preview, playback controls, move-log scroll, and
a WIN MOVE marker on the scrub bar. Banner-local pieces all a WIN MOVE marker on the scrub bar. Banner-local pieces all
shipped in v0.21.0 (`c84d9f4` + `6204db8` + `54005d5` + shipped in v0.21.0 (`c84d9f4` + `6204db8` + `54005d5` +
`e080b49`); the screen-takeover is a multi-session redesign `e080b49`); the floating MOVE chip above the focused card
with data-layer impact (move-log scroller; WIN MOVE needs a shipped in v0.21.2 (`2fb2d63`). The screen-takeover is a
`win_move_index` field on `Replay` that doesn't yet exist). multi-session redesign with data-layer impact — needs a new
- **Floating `MOVE N/M` chip above the focused card during `win_move_index: Option<usize>` field on `Replay` (currently
playback.** Cross-plugin work — `update_progress_text` writes unimplemented), a move-log scroller, and a mini-tableau
the banner chip but the card-position lookup belongs in preview.
`card_plugin`. Smaller scope than the screen-takeover. - *Floating `MOVE N/M` chip above the focused card during
- **Toast Warning / Error variants.** `ToastVariant` has slots playback — closed 2026-05-08 by `2fb2d63`.* World-space
for `Warning` (gold) and `Error` (pink) but no in-engine `Text2d` entity sibling to the banner overlay; uses the same
event uses them yet. Wire when a warning- or error-flavoured `LayoutResource` pile coordinates so it survives window
toast event materialises. resizes without UI/camera math.
- **Toast Warning variant wiring.** `ToastVariant::Warning`
(gold) still has no in-engine consumer post-v0.21.2. Most
likely candidate driver: a daily-challenge-expiry warning
when < 30 minutes from midnight UTC reset and the player
hasn't completed the challenge. Needs a ticking-timer system
+ comparison against daily-challenge state.
- *Toast Error variant wiring — closed 2026-05-08 by `68d50b5`.*
`MoveRejectedEvent` now fires a 2-second pink-bordered
"Invalid move" toast as the third leg of the
audio + visual + text rejection-feedback stool.
- *High-contrast accessibility mode — closed 2026-05-08 by - *High-contrast accessibility mode — closed 2026-05-08 by
`c5787c6` + `07e0357`.* Card text rendering picks up `c5787c6` + `07e0357` (engine + UI) + v0.21.2's HC chrome
`TEXT_PRIMARY_HC` (`#f5f5f5`) and `RED_SUIT_COLOUR_HC` rollout (`c9af1ea` + `d87761d` + `ec804d5`).* Card text
(`#ff8aa0`); Settings panel has a toggle. Future scope: rendering plus 8 chrome surfaces (modal scaffold, tooltip,
extend HC through chrome borders (`BORDER_SUBTLE_HC` already onboarding key chips, help panel key chips, stats panel
defined, not yet consumed), buttons, popover edges. cells, home Level/XP/Score row, home mode buttons, home
- *Reduced-motion mode — closed 2026-05-08 by the same pair.* mode-hotkey chips, 4 settings panel surfaces) all boost
`effective_slide_secs` forces 0 when on, regardless of the borders to `BORDER_SUBTLE_HC` under HC. Dynamic-paint sites
`AnimSpeed` setting. Future scope: gate splash scanline (HUD action buttons, modal buttons, radial menu rim) stay
overlay + cursor pulse animation on the same flag, gate un-tagged because their existing paint cycles would race the
warning-chip pulse, gate any future card-lift z-bump HC system; remain open for a future iteration that needs a
animation. different shape (folding HC into the dynamic-paint logic).
- *Reduced-motion mode — closed 2026-05-08 by `c5787c6` +
v0.21.2's `ed152e2`.* `effective_slide_secs` forces 0 on
card animations; `pulse_splash_cursor` skips the per-frame
pulse multiplier; `spawn_splash` skips the scanline overlay
entirely. Future scope: gate any future card-lift z-bump
animation, warning-chip pulse (when one materialises).
### Carried forward from v0.19.0 ### Carried forward from v0.19.0
@@ -203,19 +214,18 @@ into a v0.21.1 / v0.22.0 cut.
``` ```
You are a senior Rust + Bevy developer working on Solitaire Quest. You are a senior Rust + Bevy developer working on Solitaire Quest.
Working directory: <Rusty_Solitaire clone path on this machine>. Working directory: <Rusty_Solitaire clone path on this machine>.
Branch: master. v0.21.1 is tagged at daa655a (cut 2026-05-08, a Branch: master. v0.21.2 is tagged at f23df3b (cut 2026-05-08, a
patch release rolling up app-icon, accessibility modes, and the patch release rolling up accessibility extensions, replay polish,
card-visual iteration cycle that closed Resume-prompt Options A and the first real `ToastVariant::Error` consumer). v0.21.1 stays
and F). v0.21.0 stays at 04f9bf9. Working tree clean. See at daa655a, v0.21.0 at 04f9bf9. Working tree clean. See
CHANGELOG.md § [0.21.1] for full detail of what shipped in the CHANGELOG.md § [0.21.2] for full detail.
patch release.
State: HEAD locally — see `git rev-parse HEAD`. All workspace tests State: HEAD locally — see `git rev-parse HEAD`. All workspace tests
pass (1192+; check with `cargo test --workspace`), clippy clean. pass (1195+; check with `cargo test --workspace`), clippy clean.
READ FIRST (in order, before doing anything): READ FIRST (in order, before doing anything):
1. SESSION_HANDOFF.md — this file 1. SESSION_HANDOFF.md — this file
2. CHANGELOG.md — [0.21.1] section is the most recent cut 2. CHANGELOG.md — [0.21.2] section is the most recent cut
3. CLAUDE.md — unified-3.0 rule set 3. CLAUDE.md — unified-3.0 rule set
4. CLAUDE_SPEC.md — formal architecture spec 4. CLAUDE_SPEC.md — formal architecture spec
5. ARCHITECTURE.md — crate responsibilities + data flow 5. ARCHITECTURE.md — crate responsibilities + data flow
@@ -235,29 +245,30 @@ DECISION TO ASK THE PLAYER FIRST:
tests can't catch. Likely surfaces JNI ClipboardManager tests can't catch. Likely surfaces JNI ClipboardManager
and Android Keystore stubs that need real bridges. Larger and Android Keystore stubs that need real bridges. Larger
scope; needs an Android device or emulator running. scope; needs an Android device or emulator running.
(Was Resume-prompt B before the post-v0.21.1 menu trim.) B. Replay-overlay screen-takeover redesign — multi-session
B. Replay-overlay extensions — either the floating `MOVE N/M` work: move-log scroller, mini-tableau preview, WIN MOVE
chip above the focused card (smaller, cross-plugin; needs marker on the scrub bar (needs new `Replay::win_move_index`
cursor → card-position plumbing in `card_plugin`) or the field), playback controls. The smaller floating-MOVE-chip
full screen-takeover redesign (multi-session: move-log piece of B already shipped in v0.21.2 (`2fb2d63`).
scroll, mini tableau preview, WIN MOVE marker, data-layer C. Toast Warning variant wiring — pick a real driver. Most
impact for `Replay::win_move_index`). likely candidate: a daily-challenge-expiry warning when
C. Toast Warning / Error variant wiring. UI infrastructure < 30 minutes from midnight UTC reset and the player hasn't
exists in `ToastVariant`; no in-engine event uses Warning completed the challenge. Needs a ticking-timer system +
(gold) or Error (pink) yet. Wire when a real warning- or daily-challenge state comparison. (Toast Error already
error-flavoured event materialises. wired in v0.21.2 for invalid-move feedback.)
D. Phase 8 (sync) — local storage scaffolding, self-hosted D. Phase 8 (sync) — local storage scaffolding, self-hosted
Axum server, `SolitaireServerClient` impl, GPGS stub Axum server, `SolitaireServerClient` impl, GPGS stub
wired into Settings. The biggest open arc by scope; rolls wired into Settings. The biggest open arc by scope; rolls
up several Phase Android dependencies (Keystore, up several Phase Android dependencies (Keystore,
ClipboardManager). ClipboardManager).
E. Extend high-contrast through chrome — `BORDER_SUBTLE_HC` E. HC + reduce-motion for dynamic-paint sites — v0.21.2
was defined in v0.21.1 but isn't yet consumed; popover finished HC for *static-border* surfaces (8 tagged); the
edges, button borders, focus rings still use the default dynamic-paint sites (HUD action buttons, modal buttons,
non-HC tokens. Plus reduce-motion still doesn't gate radial menu rim) stay un-tagged because their existing
splash scanline / cursor pulse / warning-chip pulse — paint cycles would race the `update_high_contrast_borders`
v0.21.1 only gated card slide_secs. Both are small, system. Wiring HC into those needs a different shape —
finite, half-day scope. either fold HC into the dynamic-paint logic, or have HC
consult the hover/focus state. Half-day to a day.
WORKFLOW NOTES: WORKFLOW NOTES:
- Use the system git config (already correct). - Use the system git config (already correct).