docs(handoff): refresh post-v0.21.1 — anchor to new tag, renumber Resume menu
Mirrors the post-v0.20.0 → v0.21.0 → v0.21.1 cut-then-refresh
pattern. Cut commit (daa655a) edited only CHANGELOG; this
follow-up resets the handoff so a fresh session picks up cleanly
post-v0.21.1.
Updated:
- Last-updated header points to v0.21.1 at daa655a; opening
paragraph summarizes the patch's three threads (icon,
accessibility, card-visual iteration with two bug fixes).
- Status at pause: tests bumped to 1192 (net +8 from
v0.21.0's 1184); tags list extended through v0.21.1.
- "Since the v0.21.0 cut" → "Since the v0.21.1 cut" with the
closure narratives dropped (now in CHANGELOG.md § [0.21.1]).
Section reset to "no threads in flight" placeholder so
future post-cut work has a clean starting point.
- Resume prompt menu trimmed: A and F closure entries dropped
(preserved in CHANGELOG); remaining options renumbered A-E
with the v0.21.1 closure callouts inline. New option E
added: "extend HC through chrome borders + reduce-motion to
splash/warning-chip" — both small finite items that v0.21.1
flagged as future scope.
- Workflow notes gain the doc-vs-implementation-drift pattern
observation from the pile-marker fix: when a module's
top-level doc comment claims "X happens" but no code enforces
it, the gap is invisible until a player notices the missing
behaviour. Worth checking such claims and adding tests.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+53
-81
@@ -1,75 +1,46 @@
|
||||
# Solitaire Quest — Session Handoff
|
||||
|
||||
**Last updated:** 2026-05-08 — **v0.21.0 cut and tagged at `04f9bf9`**,
|
||||
**Last updated:** 2026-05-08 — **v0.21.1 cut and tagged at `daa655a`**,
|
||||
working tree clean, all post-tag work pushed to origin.
|
||||
|
||||
v0.21.0 closes the visual-identity arc opened in v0.20.0. Three
|
||||
through-lines landed in this cycle: the **card-face / suit /
|
||||
card-back artwork migration** that v0.20.0 deliberately deferred
|
||||
(both rendering paths in lockstep — `assets/cards/*.png` fallback
|
||||
plus the bundled-default theme SVGs at
|
||||
`solitaire_engine/assets/themes/default/*.svg` that
|
||||
`include_bytes!()`-embed into the binary), the **splash boot-
|
||||
screen + replay-overlay polish** that closed Resume-prompt
|
||||
Options B and C, and a late-cycle **`ACCENT_PRIMARY` palette
|
||||
swap** from cyan `#6fc2ef` to brick red `#a54242` after a quick
|
||||
stakeholder review of the shipped art.
|
||||
v0.21.1 is a patch release for the post-v0.21.0 work: closes
|
||||
Resume-prompt Options A (app icon — runtime `Window::icon` plus
|
||||
the 9-size PNG hierarchy) and F (high-contrast + reduce-motion
|
||||
accessibility modes — Settings flags wired through engine and
|
||||
UI). Plus a card-visual iteration cycle that moved through three
|
||||
states (v0.21.0 Terminal pink/gray → brief 4-colour-deck
|
||||
experiment → traditional 2-colour Microsoft-Solitaire-on-dark-mode
|
||||
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.0 detail lives in `CHANGELOG.md` § [0.21.0]. This
|
||||
Full v0.21.1 detail lives in `CHANGELOG.md` § [0.21.1]. This
|
||||
file from here on focuses on what's *open* post-cut and how to
|
||||
resume.
|
||||
|
||||
## Status at pause
|
||||
|
||||
- **HEAD locally:** see `git rev-parse HEAD`. The cut commit is
|
||||
`04f9bf9`; any post-cut docs edits ride on top of that.
|
||||
- **HEAD on origin:** matches local. v0.21.0 is fully on origin.
|
||||
`daa655a`; any post-cut docs edits ride on top of that.
|
||||
- **HEAD on origin:** matches local. v0.21.1 is fully on origin.
|
||||
- **Working tree:** clean. No WIP outstanding.
|
||||
- **`artwork/` directory:** still untracked. Intentional.
|
||||
- **Build:** `cargo clippy --workspace --all-targets -- -D warnings`
|
||||
clean.
|
||||
- **Tests:** **1184 passing / 0 failing** across the workspace
|
||||
(net +8 from v0.20.0's 1176 baseline). Detail in
|
||||
`CHANGELOG.md` § [0.21.0] § Stats.
|
||||
- **Tags on origin:** `v0.9.0` through `v0.21.0`. v0.21.0 is on
|
||||
`04f9bf9`; v0.20.0 stays on `41a009a`.
|
||||
- **Tests:** **1192 passing / 0 failing** across the workspace
|
||||
(net +8 from v0.21.0's 1184 baseline). Detail in
|
||||
`CHANGELOG.md` § [0.21.1] § Stats.
|
||||
- **Tags on origin:** `v0.9.0` through `v0.21.1`. v0.21.1 is on
|
||||
`daa655a`; v0.21.0 stays on `04f9bf9`; v0.20.0 stays on
|
||||
`41a009a`.
|
||||
|
||||
## Since the v0.21.0 cut
|
||||
## Since the v0.21.1 cut
|
||||
|
||||
Two Resume-prompt options closed post-tag (2026-05-08):
|
||||
|
||||
- **Option A — App icon round** (`3eb3a26` + `716a025`). 9-size
|
||||
PNG hierarchy in `assets/icon/` (16/24/32/48/64/128/256/512/
|
||||
1024 px), generated by a new `icon_generator` example from a
|
||||
shared `icon_svg` builder (Terminal `▌RS` mark on dark
|
||||
`#151515` with brick-red accent). Runtime `Window::icon`
|
||||
wired via `WinitWindows` on desktop only (Android draws its
|
||||
launcher icon from the APK manifest). The follow-up fix
|
||||
`716a025` wraps `NonSend<WinitWindows>` in `Option<...>`
|
||||
to satisfy Bevy 0.18's stricter system-param validation —
|
||||
the resource doesn't exist on the first few frames before
|
||||
winit's `Resumed` event fires. New deps (target-gated
|
||||
non-Android): direct `winit = "0.30"` for `Icon`
|
||||
construction, direct `tiny-skia` for PNG → RGBA decode.
|
||||
Pin test `icon_svg_pin` guards future rasteriser drift.
|
||||
- **Option F — Accessibility modes** (`c5787c6` + `07e0357`).
|
||||
High-contrast and reduce-motion settings flags wired through
|
||||
the engine and surfaced as Settings panel toggles. HC boosts
|
||||
`RED_SUIT_COLOUR` to `#ff8aa0` and `BLACK_SUIT_COLOUR` to
|
||||
`#f5f5f5` for card text rendering; reduce-motion forces
|
||||
`effective_slide_secs` to 0 regardless of `AnimSpeed`. CBM
|
||||
and HC compose: lime CBM wins on red when both are on; HC
|
||||
still applies to black suits when both are on. Six new
|
||||
tests pin the truth tables. UI toggles sit alongside the
|
||||
Color-blind row in Settings → Cosmetic; tab-walk visits
|
||||
all three accessibility flags in one vertical run.
|
||||
|
||||
Three Resume-prompt options remain live: B (APK launch
|
||||
verification), C (replay-overlay extensions), D (Toast
|
||||
Warning/Error wiring), E (Phase 8 sync). The visible-payoff
|
||||
pieces of the post-v0.21.0 menu have shipped; what's left is
|
||||
Android runtime work, replay-overlay polish, sync infrastructure,
|
||||
and toast-event sourcing.
|
||||
No threads in flight. Working tree clean as of 2026-05-08. New
|
||||
work since the cut would land here as commit narratives; for
|
||||
the v0.21.1 contents themselves, see `CHANGELOG.md` § [0.21.1].
|
||||
|
||||
## Open punch list
|
||||
|
||||
@@ -232,20 +203,19 @@ into a v0.21.1 / v0.22.0 cut.
|
||||
```
|
||||
You are a senior Rust + Bevy developer working on Solitaire Quest.
|
||||
Working directory: <Rusty_Solitaire clone path on this machine>.
|
||||
Branch: master. v0.21.0 is tagged at 04f9bf9 (cut 2026-05-08).
|
||||
Working tree clean. v0.21.0 closed the visual-identity arc that
|
||||
v0.20.0 deferred — full Terminal cards on both rendering paths
|
||||
(asset PNGs + bundled-default theme SVGs), splash boot screen,
|
||||
replay-overlay banner enrichments, and a project-wide ACCENT_PRIMARY
|
||||
swap from cyan to brick red `#a54242`. See CHANGELOG.md § [0.21.0]
|
||||
for full detail.
|
||||
Branch: master. v0.21.1 is tagged at daa655a (cut 2026-05-08, a
|
||||
patch release rolling up app-icon, accessibility modes, and the
|
||||
card-visual iteration cycle that closed Resume-prompt Options A
|
||||
and F). v0.21.0 stays at 04f9bf9. Working tree clean. See
|
||||
CHANGELOG.md § [0.21.1] for full detail of what shipped in the
|
||||
patch release.
|
||||
|
||||
State: HEAD locally — see `git rev-parse HEAD`. All workspace tests
|
||||
pass (1184+; check with `cargo test --workspace`), clippy clean.
|
||||
pass (1192+; check with `cargo test --workspace`), clippy clean.
|
||||
|
||||
READ FIRST (in order, before doing anything):
|
||||
1. SESSION_HANDOFF.md — this file
|
||||
2. CHANGELOG.md — [0.21.0] section is the most recent cut
|
||||
2. CHANGELOG.md — [0.21.1] section is the most recent cut
|
||||
3. CLAUDE.md — unified-3.0 rule set
|
||||
4. CLAUDE_SPEC.md — formal architecture spec
|
||||
5. ARCHITECTURE.md — crate responsibilities + data flow
|
||||
@@ -260,38 +230,34 @@ READ FIRST (in order, before doing anything):
|
||||
fresh machine)
|
||||
|
||||
DECISION TO ASK THE PLAYER FIRST:
|
||||
A. *Closed 2026-05-08 by `3eb3a26` + `716a025`.* App icon
|
||||
round — runtime `Window::icon` wired plus a 9-size PNG
|
||||
hierarchy at `assets/icon/`. `.ico` / `.icns` bundle
|
||||
formats stay open if the project later ships as a
|
||||
packaged macOS / Windows app.
|
||||
B. APK launch verification on AVD / device — `adb install` +
|
||||
A. APK launch verification on AVD / device — `adb install` +
|
||||
`adb logcat` to shake out runtime bugs the build / unit
|
||||
tests can't catch. Likely surfaces JNI ClipboardManager
|
||||
and Android Keystore stubs that need real bridges. Larger
|
||||
scope; needs an Android device or emulator running.
|
||||
C. Replay-overlay extensions — either the floating `MOVE N/M`
|
||||
(Was Resume-prompt B before the post-v0.21.1 menu trim.)
|
||||
B. Replay-overlay extensions — either the floating `MOVE N/M`
|
||||
chip above the focused card (smaller, cross-plugin; needs
|
||||
cursor → card-position plumbing in `card_plugin`) or the
|
||||
full screen-takeover redesign (multi-session: move-log
|
||||
scroll, mini tableau preview, WIN MOVE marker, data-layer
|
||||
impact for `Replay::win_move_index`).
|
||||
D. Toast Warning / Error variant wiring. UI infrastructure
|
||||
C. Toast Warning / Error variant wiring. UI infrastructure
|
||||
exists in `ToastVariant`; no in-engine event uses Warning
|
||||
(gold) or Error (pink) yet. Wire when a real warning- or
|
||||
error-flavoured event materialises.
|
||||
E. Phase 8 (sync) — local storage scaffolding, self-hosted
|
||||
D. Phase 8 (sync) — local storage scaffolding, self-hosted
|
||||
Axum server, `SolitaireServerClient` impl, GPGS stub
|
||||
wired into Settings. The biggest open arc by scope; rolls
|
||||
up several Phase Android dependencies (Keystore,
|
||||
ClipboardManager).
|
||||
F. *Closed 2026-05-08 by `c5787c6` + `07e0357`.* High-contrast
|
||||
and reduced-motion accessibility modes — Settings flags
|
||||
+ UI toggles + engine wiring. Card text rendering uses
|
||||
HC variants when on; card slide_secs forces to 0 when
|
||||
reduce-motion is on. Future scope: extend HC through
|
||||
chrome borders, buttons; gate splash + warning-chip
|
||||
animations on reduce-motion.
|
||||
E. Extend high-contrast through chrome — `BORDER_SUBTLE_HC`
|
||||
was defined in v0.21.1 but isn't yet consumed; popover
|
||||
edges, button borders, focus rings still use the default
|
||||
non-HC tokens. Plus reduce-motion still doesn't gate
|
||||
splash scanline / cursor pulse / warning-chip pulse —
|
||||
v0.21.1 only gated card slide_secs. Both are small,
|
||||
finite, half-day scope.
|
||||
|
||||
WORKFLOW NOTES:
|
||||
- Use the system git config (already correct).
|
||||
@@ -308,6 +274,12 @@ WORKFLOW NOTES:
|
||||
migration walked past this" follow-ups that all matched
|
||||
this shape — codified here so future similar work can
|
||||
pattern-match instead of rediscovering.
|
||||
- Doc-vs-implementation drift pattern: v0.21.1's pile-marker
|
||||
visibility fix (`4d48cad`) implemented an invariant that
|
||||
had been declared in a module doc comment but was never
|
||||
enforced in code. When future work touches a module with
|
||||
a "this does X" doc comment, verify the code actually does
|
||||
X and add a test if not. Two layers, two checks.
|
||||
|
||||
OPEN AT THE START: ask which of A–F. Don't pick unilaterally.
|
||||
OPEN AT THE START: ask which of A–E. Don't pick unilaterally.
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user