docs: refresh SESSION_HANDOFF for Phase 5 smoke-test fixes and bonus polish
Phase 4 ended at5d57b67with the doc reflecting "16 commits ahead, working tree dirty, splash always shows". The next session opened the binary, found three real bugs (resize lag, off-screen cards, mis-aligned hit-test), fixed them, and layered four bonus polish items on top: persisted window geometry, achievement tooltips, a clippy::pedantic sweep, client-side sync round-trip tests, and the splash skip on subsequent launches. Rewrites the doc to reflect the post-push state: - HEAD:902560c, branch up to date with origin - 906 tests pass, working tree clean - Phase 5 table summarising the nine new commits - Stale "in-flight" / "deferred" items removed where they landed - Punch list shrunk to xCards URL, v0.1.0 tag, desktop packaging Length drops 142 → 121 lines (-21) by trimming the prior session's "original Track G prompt" callbacks and recovery options that no longer apply. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+54
-75
@@ -1,17 +1,19 @@
|
||||
# Solitaire Quest — UX Overhaul Session Handoff
|
||||
|
||||
**Last updated:** 2026-04-30 — Phase 3 complete + Phase 4 polish landed. v1 release-readiness scope is largely done; remaining work is final smoke test, push, and tag.
|
||||
**Last updated:** 2026-05-01 — Phases 3, 4, and 5 all shipped. Smoke-test bugs closed. v1 release-readiness scope is essentially done; remaining work is the v0.1.0 tag plus desktop packaging.
|
||||
|
||||
## Status at pause
|
||||
|
||||
- **HEAD:** `5d57b67` — local master is **16 commits ahead of `origin/master`** (unpushed).
|
||||
- **Working tree:** modified but uncommitted edits in `solitaire_engine/src/hud_plugin.rs` and `solitaire_engine/src/settings_plugin.rs` — an in-flight tooltip-popover extension threaded onto the Settings sliders/togglers/pickers. Not staged, not built against; review and finish-or-revert before resuming new work.
|
||||
- **Build:** `cargo build --workspace` and `cargo clippy --workspace -- -D warnings` clean as of last commit.
|
||||
- **Tests:** **872 passed / 0 failed / 9 ignored** across the workspace.
|
||||
- **HEAD:** `902560c` — local master is **up to date** with `origin/master`.
|
||||
- **Working tree:** clean.
|
||||
- **Build:** `cargo clippy --workspace --all-targets -- -D warnings` clean.
|
||||
- **Tests:** **906 passed / 0 failed** across the workspace.
|
||||
|
||||
## Where we are
|
||||
|
||||
Phase 3 of the UX overhaul (design tokens, modal scaffold, animation curves) shipped earlier in the session and is unchanged. Phase 4 (release-grade polish) layered another 22 commits on top: window polish, modal animation, score feedback, three phases of focus rings, Home repurposed as a mode launcher, tooltip infrastructure + HUD wiring, branded splash screen, achievement integration tests, microcopy unification, leaderboard error/idle states, first-launch empty-state polish, hit-target accessibility fix, CREDITS.md, ARCHITECTURE doc-rot fix.
|
||||
Phase 3 (design tokens + modal scaffold) and Phase 4 (release polish) shipped earlier. Phase 5 — running the binary end-to-end and fixing what broke — landed nine more commits today: a layout fit fix so tableau columns stop spilling off-screen, a three-pronged resize-lag fix, persisted window geometry, splash skip on subsequent launches, achievement tooltips, a code-quality sweep, client-side sync round-trip tests, and a hit-test fix so dragging a card no longer requires aiming for the bottom strip.
|
||||
|
||||
Polish is essentially complete; the remaining work is tagging v0.1.0 and desktop packaging.
|
||||
|
||||
### Design direction (unchanged)
|
||||
|
||||
@@ -27,92 +29,72 @@ Phase 3 of the UX overhaul (design tokens, modal scaffold, animation curves) shi
|
||||
- HUD restructured into a 4-tier vertical stack with progressive disclosure.
|
||||
- Animation upgrades: `SmoothSnap` slide curves, scoped settle bounce, deal jitter, win-cascade rotation.
|
||||
|
||||
## Phase 4 (shipped this session)
|
||||
## Phase 4 (shipped 2026-04-30)
|
||||
|
||||
| Area | Commit | What landed |
|
||||
|---|---|---|
|
||||
| Workspace lint | `9bfca92` | Test-only clippy warnings under `--all-targets` resolved. |
|
||||
| App / window | `5f5aba8` | WM_CLASS, centered-on-primary window, panic hook → `crash.log`. |
|
||||
| Modal animation | `71999e1` | `ModalEntering` + ease-out scrim fade and 0.96→1.0 card scale over `MOTION_MODAL_SECS`; `Instant` collapses to zero. |
|
||||
| Score feedback | `dcfa976` | `ScorePulse` triangular 1.0→1.1→1.0; floating "+N" for jumps ≥ `SCORE_FLOATER_THRESHOLD`. |
|
||||
| Hit targets | `b082bd6` | `ICON_BUTTON_PX` 28 → 32; settings sync status reads "local only" not "not configured". |
|
||||
| Modal animation | `71999e1` | `ModalEntering` + ease-out scrim fade and 0.96→1.0 card scale. |
|
||||
| Score feedback | `dcfa976` | `ScorePulse` triangular 1.0→1.1→1.0; floating "+N" for jumps ≥ threshold. |
|
||||
| Hit targets | `b082bd6` | `ICON_BUTTON_PX` 28 → 32; sync status reads "local only". |
|
||||
| Microcopy | `abeb4e5` | Help "Close" → "Done"; final onboarding CTA → "Let's play". |
|
||||
| Empty states | `65d595a` | First-launch em-dash zero-stats grid + welcome line on Profile. |
|
||||
| Leaderboard | `1384365` | Idle/Loaded/Error enum; local-only guard replaces opt-in/out buttons. |
|
||||
| Credits | `fd7fb7b`, `f866299` | CREDITS.md added (xCards, FiraMono, Bevy, kira, Rust deps); README links it. |
|
||||
| Home | `c1bde18` | Home repurposed as Mode Launcher: 5 mode cards, level-5 lock state, dispatches existing request events. |
|
||||
| Focus rings (Phase 1) | `1278952` | Tab/Shift-Tab/Enter on every modal button; auto-focus primary; overlay tracks `GlobalTransform` above scrim. |
|
||||
| Leaderboard | `1384365` | Idle/Loaded/Error enum; local-only guard. |
|
||||
| Credits | `fd7fb7b`, `f866299` | CREDITS.md added; README links it. |
|
||||
| Home | `c1bde18` | Home repurposed as Mode Launcher with level-5 lock state. |
|
||||
| Focus rings (Phase 1) | `1278952` | Tab/Shift-Tab/Enter on every modal button; auto-focus primary. |
|
||||
| Focus rings (Phase 2) | `51d3454` | HUD action bar (hover-gated) and Home mode cards. |
|
||||
| Focus rings (Phase 3) | `b78a493` | Settings: icon buttons, swatches, toggles; arrow-key navigation in `FocusRow`; auto-scroll keeps focused control in viewport. |
|
||||
| Achievement tests | `2e080d0` | Integration coverage for `draw_three_master` and `zen_winner` — every advertised achievement now has a full-flow unlock test. |
|
||||
| Microcopy | `0c86cac` | Drop "Yes," prefix on destructive confirms — "New game" / "Forfeit" replace "Yes, abandon" / "Yes, forfeit". |
|
||||
| Tooltip infra | `54d3497` | `Tooltip(Cow<'static, str>)` component, hover-delay overlay, `Z_TOOLTIP` rung. |
|
||||
| Tooltip wiring | `220e3f0` | Tooltips on 10 HUD readouts + 6 action-bar buttons; `spawn_action_button` requires a tooltip parameter. |
|
||||
| Splash | `5d57b67` | Branded splash overlay (fade-in 300ms / hold ~1s / fade-out 300ms); board deals behind; any keypress dismisses. |
|
||||
| Doc-rot | `73e210b` | ARCHITECTURE.md `bevy_kira_audio` references → `kira` to match Cargo.toml. |
|
||||
| Doc | `de52c8a` | Mid-session SESSION_HANDOFF refresh after first batch of Phase 4 landed. |
|
||||
| Focus rings (Phase 3) | `b78a493` | Settings: icon buttons, swatches, toggles; arrow-key `FocusRow`; auto-scroll. |
|
||||
| Achievement tests | `2e080d0` | Integration coverage for `draw_three_master` and `zen_winner`. |
|
||||
| Microcopy | `0c86cac` | "New game" / "Forfeit" replace "Yes, abandon" / "Yes, forfeit". |
|
||||
| Tooltip infra | `54d3497` | `Tooltip(Cow<'static, str>)` component + hover-delay overlay. |
|
||||
| HUD tooltips | `220e3f0` | 10 readouts + 6 action buttons. |
|
||||
| Settings tooltips | `74597a8` | Volume, toggles, swatches, Sync Now. |
|
||||
| Popover tooltips | `dbe6c60` | Modes and Menu rows. |
|
||||
| Splash | `5d57b67` | Branded splash overlay (300ms fade-in / ~1s hold / 300ms fade-out). |
|
||||
| Doc-rot | `73e210b` | ARCHITECTURE.md `bevy_kira_audio` references → `kira`. |
|
||||
| Doc | `de52c8a`, `60a8036` | Mid-session and end-of-Phase-4 SESSION_HANDOFF refreshes. |
|
||||
|
||||
## Commits this session, chronological
|
||||
## Phase 5 (shipped 2026-05-01)
|
||||
|
||||
```
|
||||
9bfca92 chore(workspace): satisfy clippy --all-targets in test code
|
||||
5f5aba8 feat(app): window polish — WM_CLASS, centered window, crash log hook
|
||||
71999e1 feat(engine): modal open animation — fade + scale with ease-out
|
||||
dcfa976 feat(engine): score change feedback — pulse and floating delta
|
||||
de52c8a docs: update SESSION_HANDOFF for completed phase-4 polish tracks
|
||||
b082bd6 feat(engine): bump icon-button hit target to 32px and clarify local-only sync status
|
||||
abeb4e5 feat(engine): unify dismiss verb to Done and warm onboarding CTA to Let's play
|
||||
65d595a feat(engine): first-launch polish — em-dash zero stats and welcome line on profile
|
||||
1384365 feat(engine): leaderboard error and idle states plus local-only guard
|
||||
fd7fb7b docs: add CREDITS.md and link from README
|
||||
c1bde18 feat(engine): repurpose Home as mode launcher
|
||||
1278952 feat(engine): keyboard focus rings on modal buttons (Phase 1)
|
||||
51d3454 feat(engine): keyboard focus on HUD action bar and Home mode cards (Phase 2)
|
||||
b78a493 feat(engine): keyboard focus on Settings panel with arrow-key pickers (Phase 3)
|
||||
f866299 docs: drop xCards URL placeholder from CREDITS.md
|
||||
73e210b docs: replace bevy_kira_audio references with kira in ARCHITECTURE.md
|
||||
2e080d0 test(engine): integration coverage for draw_three_master and zen_winner
|
||||
0c86cac feat(engine): unify destructive-confirm verbs — drop "Yes," prefix
|
||||
54d3497 feat(engine): tooltip infrastructure with hover delay (foundation only)
|
||||
220e3f0 feat(engine): tooltips on every HUD readout and action button
|
||||
5d57b67 feat(engine): branded splash screen on launch
|
||||
```
|
||||
Smoke test surfaced three issues: window-resize lag, tableau columns clipped below viewport, hit-target offset on cards. All fixed, plus four bonus polish items.
|
||||
|
||||
(Phase 3 commits `e14852c` through `54e024c` and the prior handoff update `0066ca6` are already pushed — see git history for full audit trail.)
|
||||
| Area | Commit | What landed |
|
||||
|---|---|---|
|
||||
| Layout fit | `8dda954` | `card_height` constrained by vertical budget; worst-case 13-card column always fits. |
|
||||
| Resize perf | `1719fda` | In-place sprite/text mutation + 50ms `ResizeThrottle` (was full re-spawn per pixel). |
|
||||
| Resize stall | `59316de` | `PresentMode::AutoNoVsync` eliminates the X11/Wayland vsync stall during drag. |
|
||||
| Window geometry | `6e7705b` | `WindowGeometry` persisted to settings.json; debounced save on resize/move. |
|
||||
| Achievements | `7448225` | Tooltips on rows: reward shown when unlocked, condition + reward when locked, secrets stay cryptic. |
|
||||
| Lint sweep | `4b9d008` | 33 pedantic warnings cleared (`map_unwrap_or`, `uninlined_format_args`, `match_same_arms`). |
|
||||
| Sync tests | `3ef4ecb` | Five client-side round-trip integration tests via in-process axum + mock keyring. |
|
||||
| Splash | `912b08c` | Splash skipped on subsequent launches via existing `first_run_complete` flag. |
|
||||
| Hit test | `902560c` | `card_position` mirrors face-down fan step (0.12) for accurate AABB on tableau columns. |
|
||||
|
||||
## Open punch list for v1
|
||||
|
||||
Polish is essentially complete. Concretely scoped follow-ups:
|
||||
|
||||
1. **Smoke-test pass.** Run the game end-to-end with the original Phase 3 checklist plus the Phase 4 additions (splash dismiss, focus rings on every screen, tooltip hover, mode launcher, leaderboard error state, first-launch em-dashes).
|
||||
2. **xCards upstream URL** in CREDITS.md is intentionally absent (`f866299`). One-line fill-in when the project owner picks a canonical mirror/fork; LGPL notice obligations are already satisfied without it.
|
||||
3. **Push to origin.** Local master is 16 commits ahead of `origin/master`. `git push origin master` (interactive credentials on `git.aleshym.co`).
|
||||
4. **Tag `v0.1.0`** once the smoke test passes and the push lands.
|
||||
5. **Release packaging** per ARCHITECTURE.md §17 — Docker compose for the server is documented; desktop client packaging (icon, .ico/.icns, signing, AppImage) is not yet done.
|
||||
1. **`xCards` upstream URL** in CREDITS.md is intentionally absent (`f866299`). One-line fill-in when the project owner picks a canonical mirror/fork; LGPL notice obligations are already satisfied without it.
|
||||
2. **Tag `v0.1.0`** — workspace builds clean and tests are green; this is the next strategic milestone.
|
||||
3. **Desktop packaging** per ARCHITECTURE.md §17 — Docker compose for the server is documented; desktop client packaging (icon, .ico/.icns, signing, AppImage) is not yet done. Needs artwork and signing certs.
|
||||
|
||||
### Optional, deferred
|
||||
|
||||
- Animated focus ring (currently a static overlay; could pulse on focus change).
|
||||
- Splash skip-on-subsequent-launches — currently every launch shows the full ~1.6s splash.
|
||||
- Achievement onboarding pass — show first-time players the achievement panel after their first win.
|
||||
- In-flight Settings tooltip popovers in the working tree — finish or revert.
|
||||
- Mode-switch keyboard shortcut from inside the Mode Launcher (today only mouse opens it).
|
||||
|
||||
## Resume prompt
|
||||
|
||||
```
|
||||
You are a senior Rust + Bevy developer finishing v1 of Solitaire
|
||||
Quest. Working directory: /home/manage/Rusty_Solitare. Branch:
|
||||
master. Polish phase is complete; the remaining work is release prep,
|
||||
not new features.
|
||||
master. The polish phase is complete; the remaining work is release
|
||||
prep, not new features.
|
||||
|
||||
State: HEAD=5d57b67. Local master is 16 commits ahead of
|
||||
origin/master and unpushed. Working tree has uncommitted in-flight
|
||||
tooltip work in solitaire_engine/src/hud_plugin.rs and
|
||||
solitaire_engine/src/settings_plugin.rs — review and finish or revert
|
||||
before opening anything new.
|
||||
|
||||
Build: cargo build / clippy --workspace -- -D warnings clean as of
|
||||
HEAD. Tests: 872 passed / 0 failed / 9 ignored.
|
||||
State: HEAD=902560c, fully pushed to origin. Working tree clean.
|
||||
Build: cargo clippy --workspace --all-targets -- -D warnings clean.
|
||||
Tests: 906 passed / 0 failed.
|
||||
|
||||
READ FIRST (in order, before doing anything):
|
||||
1. SESSION_HANDOFF.md — full state and punch list
|
||||
@@ -121,15 +103,12 @@ READ FIRST (in order, before doing anything):
|
||||
4. ~/.claude/projects/-home-manage-Rusty-Solitare/memory/MEMORY.md
|
||||
— saved feedback / project context
|
||||
|
||||
PUNCH LIST (resolve in roughly this order):
|
||||
1. Decide on the in-flight settings_plugin/hud_plugin tooltip work.
|
||||
2. Smoke-test the binary end-to-end. If anything regresses, fix it
|
||||
before opening anything new.
|
||||
3. Confirm or fill the xCards upstream URL in CREDITS.md.
|
||||
4. git push origin master (16 commits unpushed; interactive creds).
|
||||
5. Tag v0.1.0.
|
||||
6. Release packaging per ARCHITECTURE.md §17 — desktop client icon,
|
||||
bundling, signing are not yet wired.
|
||||
PUNCH LIST (in priority order):
|
||||
1. Confirm or fill the xCards upstream URL in CREDITS.md (one-line
|
||||
edit; not a release blocker).
|
||||
2. Tag v0.1.0 once the user signs off.
|
||||
3. Desktop packaging: icon hookup, platform bundles (.ico/.icns/
|
||||
AppImage), signing. Needs artwork and certs from the user.
|
||||
|
||||
WORKFLOW NOTES:
|
||||
- Commits use:
|
||||
|
||||
Reference in New Issue
Block a user