This commit is contained in:
+30
-38
@@ -1,45 +1,36 @@
|
||||
# Ferrous Solitaire — Session Handoff
|
||||
|
||||
**Last updated:** 2026-06-02 — Web e2e test suite complete; `/play` canvas bridge added and tested. All commits on origin/master.
|
||||
**Last updated:** 2026-06-09 — card_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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user