docs(handoff): record Toast Warning wiring; menu drops C → 4 options

Marks the daily-challenge-expiry Warning toast (`279e23d`) closed in
the Visual-identity follow-ups list, captures it in "Since the
v0.21.2 cut", bumps the test count to 1203, and trims the Resume
prompt menu from 5 → 4 options (A Android, B-2 replay takeover,
C Phase 8 sync, D HC dynamic-paint).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-05-08 14:25:10 -07:00
parent 279e23d0af
commit 93b67f1d0b
+39 -27
View File
@@ -1,7 +1,8 @@
# Solitaire Quest — Session Handoff # Solitaire Quest — Session Handoff
**Last updated:** 2026-05-08 — **v0.21.2 cut and tagged at `f23df3b`**, **Last updated:** 2026-05-08 — v0.21.2 cut and tagged at `f23df3b`;
working tree clean, all post-tag work pushed to origin. post-cut Toast Warning wiring at `279e23d`. Working tree clean,
all post-tag work pushed to origin.
v0.21.2 is a patch release for the post-v0.21.1 polish work: v0.21.2 is a patch release for the post-v0.21.1 polish work:
extends accessibility (full HC chrome rollout across 8 surfaces; extends accessibility (full HC chrome rollout across 8 surfaces;
@@ -18,24 +19,38 @@ 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
`f23df3b`; any post-cut docs edits ride on top of that. `f23df3b`; post-cut docs edits and the Toast Warning wiring
(`279e23d`) ride on top of that.
- **HEAD on origin:** matches local. v0.21.2 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:** **1195 passing / 0 failing** across the workspace - **Tests:** **1203 passing / 0 failing** across the workspace
(net +3 from v0.21.1's 1192 baseline). Detail in (net +8 from the v0.21.2 cut: 7 unit tests covering
`CHANGELOG.md` § [0.21.2] § Stats. `compute_expiry_warning_minutes` thresholds + 1 in-Bevy
idempotence test for `check_daily_expiry_warning`).
- **Tags on origin:** `v0.9.0` through `v0.21.2`. v0.21.2 is on - **Tags on origin:** `v0.9.0` through `v0.21.2`. v0.21.2 is on
`f23df3b`; v0.21.1 stays on `daa655a`; v0.21.0 stays on `f23df3b`; v0.21.1 stays on `daa655a`; v0.21.0 stays on
`04f9bf9`; v0.20.0 stays on `41a009a`. `04f9bf9`; v0.20.0 stays on `41a009a`.
## Since the v0.21.2 cut ## Since the v0.21.2 cut
No threads in flight. Working tree clean as of 2026-05-08. New - **`279e23d` — Toast Warning variant wired.** First in-engine
work since the cut would land here as commit narratives; for consumer of `ToastVariant::Warning`: a 4 s amber-bordered
the v0.21.2 contents themselves, see `CHANGELOG.md` § [0.21.2]. toast that fires once per daily-challenge date when the
player is within 30 min of UTC midnight reset and hasn't yet
completed today's challenge. Mirrors the v0.21.2 Toast Error
pattern — a domain message (`WarningToastEvent(String)`) is
the contract between the daily plugin and the animation
plugin's spawn handler. Suppression decided by a pure helper
(`compute_expiry_warning_minutes`) that's exhaustively tested
without an `App`. After this commit every `ToastVariant`
(Info / Warning / Error / Celebration) has at least one real
driver — the variant enum is fully load-bearing.
For the v0.21.2 contents themselves, see `CHANGELOG.md` §
[0.21.2].
## Open punch list ## Open punch list
@@ -83,12 +98,13 @@ palette refresh all shipped in v0.20.0 + v0.21.0. What stays open:
`Text2d` entity sibling to the banner overlay; uses the same `Text2d` entity sibling to the banner overlay; uses the same
`LayoutResource` pile coordinates so it survives window `LayoutResource` pile coordinates so it survives window
resizes without UI/camera math. resizes without UI/camera math.
- **Toast Warning variant wiring.** `ToastVariant::Warning` - *Toast Warning variant wiring — closed 2026-05-08 by `279e23d`.*
(gold) still has no in-engine consumer post-v0.21.2. Most Daily-challenge-expiry toast fires once per `daily.date` when
likely candidate driver: a daily-challenge-expiry warning within 30 min of UTC midnight reset and today is incomplete.
when < 30 minutes from midnight UTC reset and the player `ToastVariant` is now fully load-bearing (every variant has at
hasn't completed the challenge. Needs a ticking-timer system least one real driver). Future Warning drivers can either reuse
+ comparison against daily-challenge state. the generic `WarningToastEvent(String)` carrier or add their
own domain message + `animation_plugin` handler.
- *Toast Error variant wiring — closed 2026-05-08 by `68d50b5`.* - *Toast Error variant wiring — closed 2026-05-08 by `68d50b5`.*
`MoveRejectedEvent` now fires a 2-second pink-bordered `MoveRejectedEvent` now fires a 2-second pink-bordered
"Invalid move" toast as the third leg of the "Invalid move" toast as the third leg of the
@@ -217,11 +233,13 @@ Working directory: <Rusty_Solitaire clone path on this machine>.
Branch: master. v0.21.2 is tagged at f23df3b (cut 2026-05-08, a Branch: master. v0.21.2 is tagged at f23df3b (cut 2026-05-08, a
patch release rolling up accessibility extensions, replay polish, patch release rolling up accessibility extensions, replay polish,
and the first real `ToastVariant::Error` consumer). v0.21.1 stays and the first real `ToastVariant::Error` consumer). v0.21.1 stays
at daa655a, v0.21.0 at 04f9bf9. Working tree clean. See at daa655a, v0.21.0 at 04f9bf9. Working tree clean. Toast Warning
CHANGELOG.md § [0.21.2] for full detail. variant wired post-cut at `279e23d` — every `ToastVariant` now has
at least one real driver. See CHANGELOG.md § [0.21.2] + the
"Since the v0.21.2 cut" section above for full detail.
State: HEAD locally — see `git rev-parse HEAD`. All workspace tests State: HEAD locally — see `git rev-parse HEAD`. All workspace tests
pass (1195+; check with `cargo test --workspace`), clippy clean. pass (1203+; 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
@@ -250,18 +268,12 @@ DECISION TO ASK THE PLAYER FIRST:
marker on the scrub bar (needs new `Replay::win_move_index` marker on the scrub bar (needs new `Replay::win_move_index`
field), playback controls. The smaller floating-MOVE-chip field), playback controls. The smaller floating-MOVE-chip
piece of B already shipped in v0.21.2 (`2fb2d63`). piece of B already shipped in v0.21.2 (`2fb2d63`).
C. Toast Warning variant wiring — pick a real driver. Most C. Phase 8 (sync) — local storage scaffolding, self-hosted
likely candidate: 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 +
daily-challenge state comparison. (Toast Error already
wired in v0.21.2 for invalid-move feedback.)
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. HC + reduce-motion for dynamic-paint sites — v0.21.2 D. HC + reduce-motion for dynamic-paint sites — v0.21.2
finished HC for *static-border* surfaces (8 tagged); the finished HC for *static-border* surfaces (8 tagged); the
dynamic-paint sites (HUD action buttons, modal buttons, dynamic-paint sites (HUD action buttons, modal buttons,
radial menu rim) stay un-tagged because their existing radial menu rim) stay un-tagged because their existing
@@ -292,5 +304,5 @@ WORKFLOW NOTES:
a "this does X" doc comment, verify the code actually does a "this does X" doc comment, verify the code actually does
X and add a test if not. Two layers, two checks. X and add a test if not. Two layers, two checks.
OPEN AT THE START: ask which of AE. Don't pick unilaterally. OPEN AT THE START: ask which of AD. Don't pick unilaterally.
``` ```