From 279a834f9d683ec1155fa3f80125cc3e07787662 Mon Sep 17 00:00:00 2001 From: funman300 Date: Fri, 8 May 2026 12:59:24 -0700 Subject: [PATCH] =?UTF-8?q?docs(handoff):=20refresh=20post-v0.21.1=20?= =?UTF-8?q?=E2=80=94=20anchor=20to=20new=20tag,=20renumber=20Resume=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- SESSION_HANDOFF.md | 134 ++++++++++++++++++--------------------------- 1 file changed, 53 insertions(+), 81 deletions(-) diff --git a/SESSION_HANDOFF.md b/SESSION_HANDOFF.md index cdf76fb..3bfff64 100644 --- a/SESSION_HANDOFF.md +++ b/SESSION_HANDOFF.md @@ -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` 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: . -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. ```