docs: catch up handoff and changelog
Build and Deploy / build-and-push (push) Successful in 5m23s

This commit is contained in:
funman300
2026-06-08 19:03:40 -07:00
parent 6193d31497
commit 7fe6ac6c1c
5 changed files with 442 additions and 52 deletions
+30 -38
View File
@@ -1,45 +1,36 @@
# Ferrous Solitaire — Session Handoff
**Last updated:** 2026-06-02Web e2e test suite complete; `/play` canvas bridge added and tested. All commits on origin/master.
**Last updated:** 2026-06-09card_game rewrite follow-up complete; changelog catch-up in progress; analytics follow-up tests added.
---
## Current state
- **HEAD:** `play_canvas.spec.js` added (Playwright tests for `/play` Bevy canvas route)
- **Latest tag:** `v0.35.1`
- **Working tree:** clean
- **Build:** `cargo clippy --workspace -- -D warnings` clean
- **Tests:** 1243 Rust tests passing; Playwright suite in `solitaire_server/e2e/`
- **HEAD:** `6193d31` (`fix(engine): centre modal cards within usable area (status-bar + gesture-bar)`)
- **Latest tag:** `v0.39.0`
- **Working tree:** documentation and analytics-test follow-up changes pending (`CHANGELOG.md`, `SESSION_HANDOFF.md`, `docs/card-game-integration.md`, `solitaire_data/src/matomo_client.rs`, `solitaire_engine/src/analytics_plugin.rs`)
- **Latest verification in this follow-up:** `cargo test -p solitaire_core`; Matomo client/plugin targeted tests.
- **Full previous gate:** Claude reported recent card_game work pushed to origin and `cargo test` / `clippy` gates passing before the changelog follow-up.
---
## What shipped since the last handoff (v0.35.1 → present, 2026-06-02)
## What shipped since v0.39.0
| Commit | Summary |
|--------|---------|
| `64f975e` | 14 cross-platform UX/UI fixes from 500-game audit |
| `763fdb4` | Fix input: hit-test deck at correct position; accept waste click |
| `1cdb78c` | cargo fmt; add analytics domain to CSP |
| `baf524e` | Rebuild Bevy canvas WASM; add SolitaireGame interactive API |
| `9ff0585` | Remove Quaternions registry auth; canvas WASM drift guard |
| `de7ae16` | Delay first-run modal until splash screen despawns |
| `8b736ca` | Debug drag failures (temp logging, removed in next commit) |
| `8b262af` | Clamp wgpu surface to CSS pixels on HiDPI (prevented WASM panic) |
| `d45b7cb` | Add Playwright e2e test suite for web routes |
| `2cf7282` | Add `window.__FERROUS_DEBUG__` bridge to `/play` for automation |
**Key audit bugs fixed (all 7 from 500-game UX audit):** timer-after-undo, radial-menu clamping, Android resume flash, tab-hidden timer, orphaned tmp files, drag threshold 4→6px, Draw-1 recycle doc comment.
**HiDPI wgpu fix:** `WindowResolution::default().with_scale_factor_override(1.0)` added to the Bevy canvas app. Root cause was physical pixels (CSS×DPR) exceeding WebGL2's 2048px per-dimension limit on HiDPI displays.
**E2E test architecture:** three-tier — Rust unit tests → Playwright smoke/review specs → cycle regression gate. Debug bridge contract in `docs/testing-architecture.md`.
- Browser Bevy canvas route and `window.__FERROUS_DEBUG__` automation bridge landed, with Playwright coverage for `/play`.
- In-place `card_game` / `klondike` rewrite phases are complete through the latest follow-up:
- `5e87358` integrates upstream deps cleanly.
- `ae1ecc8` unifies `Suit` / `Rank` with upstream `card_game` types.
- `d864d98` routes klondike/card imports through `solitaire_core`.
- `9bcf13d`, `56e3b62`, `26f1b00` finish schema-v3 migration coverage, undo/recycle score correctness, and rewrite-plan docs.
- Android keystore wiring, Android build-script hardening, server auth/runtime hardening, and modal safe-area centering have landed.
- `CHANGELOG.md` has been caught up from `v0.34.0` through current unreleased work; verify it before committing because it was started by a rate-limited Claude workflow and then manually tightened.
- Matomo analytics was re-reviewed: `MatomoClient` and `AnalyticsPlugin` are wired through `CoreGamePlugin` on non-wasm targets, and targeted tests now cover opt-in client creation, event encoding, buffer trimming, and analytics mode labels.
---
## What shipped before v0.35.1
## Historical notes before v0.39.0
See git log. CHANGELOG.md currently ends at v0.33.0 (documentation debt, low priority).
See git log and `CHANGELOG.md`. The changelog now includes `v0.34.0` through `v0.39.0`, plus current unreleased work.
---
@@ -110,12 +101,7 @@ Three bugs fixed:
## Open punch list
### 1. CHANGELOG documentation debt
CHANGELOG.md currently ends at v0.33.0. All post-v0.33.0 work is in git log. Low
priority — git log is authoritative.
### 2. Android APK launch verification (Option A)
### 1. Android APK launch verification (Option A)
Physical device test: install the latest APK on a real Android device (not AVD),
confirm:
@@ -129,12 +115,18 @@ confirm:
This has never been gated in CI. AVD `adb shell input tap` doesn't deliver real
touch events, so physical-device smoke testing is the only gate.
### 3. Matomo analytics wiring
### 2. Matomo analytics live validation
`Settings` has `analytics_enabled: bool` and `matomo_url: Option<String>` but no
engine code consumes them — the analytics toggle in Settings is a no-op. If
analytics are ever needed, the Matomo HTTP Tracking API client needs to be written
and wired to `GameStateResource` events.
`Settings` has `analytics_enabled`, `matomo_url`, and `matomo_site_id`; the engine
consumes them via `AnalyticsPlugin` on non-wasm targets. Remaining work is live
validation against the deployed Matomo instance:
- Configure `matomo_url` and opt in through Settings.
- Play a short session that starts a game, wins or forfeits, and unlocks or
verifies an achievement event path if practical.
- Confirm Matomo receives `Game / Start`, `Game / Won` or `Game / Forfeit`, and
any achievement events.
- Decide whether the web/WASM route should eventually use browser-side tracking,
since the native `AnalyticsPlugin` is intentionally gated out on wasm32.
---