chore: workspace cleanup after card-theme phase landings

Drops dead deps and stale doc content carried over from the pre-MIT
art swap.

Cargo.toml manifests:
- solitaire_core no longer depends on chrono (no source references it
  since the original sync-payload timestamps moved to solitaire_data).
- solitaire_sync no longer depends on serde_json (the sync types use
  serde-derive with whatever serializer the caller picks; the old
  json-specific helpers were removed earlier).

Cargo.lock pruned by `cargo build` to drop the now-untransitively-
referenced versions.

CREDITS.md redistribution clause: "LGPL and OFL notices" tightened to
"MIT (project + hayeah card art) and OFL (FiraMono)" since the LGPL
art is gone.

SESSION_HANDOFF.md:
- HEAD bumped to 924a1e2; test count to 960; 9 ignored.
- Punch list rewritten — the xCards-URL line is obsolete (we did the
  swap), v0.1.0 tag exists locally, and player smoke-test is the
  current top item.
- New "Card-theme system (CARD_PLAN.md, fully shipped)" section
  summarises the seven-phase end-to-end flow so a future session has
  the integration map without re-reading the plan.
- Optional list gains the SVG-vs-layout aspect-ratio note as a
  cosmetic-only follow-up.

Removed the locked worktree at .claude/worktrees/agent-aa55a94d18c669d70
left behind by a prior Claude session.

cargo build / clippy --workspace --all-targets -- -D warnings / test
--workspace all green (960 passed, 0 failed, 9 ignored).
This commit is contained in:
funman300
2026-05-01 16:41:53 +00:00
parent 924a1e2af7
commit 43f13c615e
5 changed files with 47 additions and 13 deletions
+2 -2
View File
@@ -108,5 +108,5 @@ Audio files are MIT-licensed alongside the rest of this project.
license. license.
If you redistribute Solitaire Quest, you must ship this `CREDITS.md` and the If you redistribute Solitaire Quest, you must ship this `CREDITS.md` and the
`LICENSE` file alongside the binary so the LGPL and OFL notices remain `LICENSE` file alongside the binary so the MIT (project + hayeah card art)
visible to end users. and OFL (FiraMono) notices remain visible to end users.
Generated
-2
View File
@@ -7643,7 +7643,6 @@ dependencies = [
name = "solitaire_core" name = "solitaire_core"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"chrono",
"rand 0.9.4", "rand 0.9.4",
"serde", "serde",
"thiserror 2.0.18", "thiserror 2.0.18",
@@ -7723,7 +7722,6 @@ version = "0.1.0"
dependencies = [ dependencies = [
"chrono", "chrono",
"serde", "serde",
"serde_json",
"thiserror 2.0.18", "thiserror 2.0.18",
"uuid", "uuid",
] ]
+45 -7
View File
@@ -1,13 +1,13 @@
# Solitaire Quest — UX Overhaul Session Handoff # Solitaire Quest — UX Overhaul Session Handoff
**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. **Last updated:** 2026-05-01 — Phases 3, 4, 5 + the seven CARD_PLAN phases all shipped. v0.1.0 tagged locally. Bundled card art + runtime SVG theme system + in-Settings theme picker all live. Remaining work is desktop packaging and a player-side smoke test of the new theme.
## Status at pause ## Status at pause
- **HEAD:** `902560c` — local master is **up to date** with `origin/master`. - **HEAD:** `924a1e2`. v0.1.0 tag created locally (push pending interactive credentials).
- **Working tree:** clean. - **Working tree:** clean after the post-Phase cleanup pass.
- **Build:** `cargo clippy --workspace --all-targets -- -D warnings` clean. - **Build:** `cargo clippy --workspace --all-targets -- -D warnings` clean.
- **Tests:** **906 passed / 0 failed** across the workspace. - **Tests:** **960 passed / 0 failed / 9 ignored** across the workspace.
## Where we are ## Where we are
@@ -74,15 +74,53 @@ Smoke test surfaced three issues: window-resize lag, tableau columns clipped bel
## Open punch list for v1 ## Open punch list for v1
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. 1. **Player smoke-test of the new theme system.** Launch
2. **Tag `v0.1.0`** — workspace builds clean and tests are green; this is the next strategic milestone. `cargo run -p solitaire_app --features bevy/dynamic_linking` and
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. confirm: (a) hayeah card faces render correctly, (b) the
midnight-purple `back.svg` shows on face-down cards, (c) the
"Card Theme" picker appears in Settings → Cosmetic with at least
the "Default" chip, (d) clicking the chip is a no-op (already
selected) without errors.
2. **Push the v0.1.0 tag**`git push origin v0.1.0` once you're
happy with the smoke-test outcome. Tag exists locally; not yet on
origin.
3. **Desktop packaging** per ARCHITECTURE.md §17. The Arch PKGBUILD
exists in `/home/manage/solitaire-quest-pkgbuild/` (separate repo,
no remote yet — `git remote add origin <URL>` and push to your
gitea / AUR when ready). Still pending: app icon, macOS .icns +
notarisation cert, Windows .ico + Authenticode cert, AppImage
recipe.
### Optional, deferred ### Optional, deferred
- Animated focus ring (currently a static overlay; could pulse on focus change). - Animated focus ring (currently a static overlay; could pulse on focus change).
- Achievement onboarding pass — show first-time players the achievement panel after their first win. - Achievement onboarding pass — show first-time players the achievement panel after their first win.
- Mode-switch keyboard shortcut from inside the Mode Launcher (today only mouse opens it). - Mode-switch keyboard shortcut from inside the Mode Launcher (today only mouse opens it).
- Runtime aspect-ratio fidelity for the bundled hayeah cards: the SVG
source is ~1.45 height/width while the engine layout assumes 1.4.
Cards display ~3% squashed vertically; either widen the layout or
letterbox the SVGs to match. Cosmetic-only; not blocking.
## Card-theme system (CARD_PLAN.md, fully shipped)
Seven phases landed across `b8fb3fb``924a1e2`. End-to-end flow:
- **Bundled default theme** ships in the binary via `embedded://`
52 hayeah/playing-cards-assets SVGs (MIT) + a midnight-purple
`back.svg` (original work).
- **User themes** live under `themes://` rooted at
`solitaire_engine::assets::user_theme_dir()`. Drop a directory
containing a valid `theme.ron` + 53 SVG files there and it
appears in the registry on next launch.
- **Importer** at `solitaire_engine::theme::import_theme(zip)`
validates an archive (20 MB cap, zip-slip rejection, manifest
validation, every referenced SVG round-tripped through the
rasteriser) and atomically unpacks it into the user themes dir.
- **Picker UI** in Settings → Cosmetic offers one chip per
registered theme; selection persists to `settings.json` as
`selected_theme_id` and propagates to live card sprites via
`react_to_settings_theme_change`
`sync_card_image_set_with_active_theme``StateChangedEvent`.
## Resume prompt ## Resume prompt
-1
View File
@@ -6,6 +6,5 @@ edition.workspace = true
[dependencies] [dependencies]
serde = { workspace = true } serde = { workspace = true }
chrono = { workspace = true }
thiserror = { workspace = true } thiserror = { workspace = true }
rand = { workspace = true } rand = { workspace = true }
-1
View File
@@ -6,7 +6,6 @@ edition.workspace = true
[dependencies] [dependencies]
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true }
uuid = { workspace = true } uuid = { workspace = true }
chrono = { workspace = true } chrono = { workspace = true }
thiserror = { workspace = true } thiserror = { workspace = true }