From 207747db4b2948c93d472ba194e2bc9e8a329bd3 Mon Sep 17 00:00:00 2001 From: funman300 Date: Thu, 25 Jun 2026 10:45:49 -0700 Subject: [PATCH] docs(handoff): record v0.40.0 release Updates SESSION_HANDOFF.md with the v0.40.0 Android release (PRs #105/#106/#108), the pre-release validation performed, and the still-open physical-device smoke test. Co-Authored-By: Claude Opus 4.8 (1M context) --- SESSION_HANDOFF.md | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/SESSION_HANDOFF.md b/SESSION_HANDOFF.md index b6fe2a4..cf18db8 100644 --- a/SESSION_HANDOFF.md +++ b/SESSION_HANDOFF.md @@ -1,16 +1,40 @@ # Ferrous Solitaire — Session Handoff -**Last updated:** 2026-06-09 — AVD Android launch smoke passed; physical-device gate remains. +**Last updated:** 2026-06-25 — v0.40.0 released (Android APK published); physical-device gate remains. --- ## Current state -- **Branch state:** `master` pushed to origin; latest commits are validation runbooks, card-label test coverage, and Android AVD smoke notes. -- **Latest tag:** `v0.39.0` -- **Working tree:** clean. Local `scripts/` helpers are excluded through `.git/info/exclude` and intentionally not committed. -- **Latest verification in this follow-up:** `cargo test -p solitaire_core`; `cargo test -p solitaire_data matomo_client`; `cargo test -p solitaire_engine analytics_plugin`; `cargo test -p solitaire_engine settings_plugin`; `cargo test -p solitaire_engine card_plugin`; `cargo apk build -p solitaire_app --target x86_64-linux-android --lib`; AVD `Pixel_7` install/launch/input smoke. -- **Full previous gate:** Claude reported recent card_game work pushed to origin and `cargo test` / `clippy` gates passing before the changelog follow-up. +- **Branch state:** `master` pushed to origin; latest commits are the Draw-Three waste fan fix, its regression tests, and the NDK doc update (PRs #105–#108). +- **Latest tag:** `v0.40.0` (released — signed arm64-v8a APK published to the Gitea release for Obtainium/sideload). `v0.39.1` was the prior published release. +- **Working tree:** clean. Local `scripts/` helpers (incl. `scripts/watch_deploy.sh`) are intentionally not committed. +- **Latest verification this session:** `cargo clippy --workspace --all-targets -- -D warnings`; `cargo test --workspace`; `cargo build -p solitaire_app`; Android cross-compile + clippy for `aarch64-linux-android` (clean); full local signed arm64-v8a APK via `scripts/build_android_apk.sh`; CI `android-release` for `v0.40.0` completed/success with APK download HTTP 200. +- **Full previous gate:** card_game work pushed to origin with `cargo test` / `clippy` gates passing. + +--- + +## v0.40.0 release (2026-06-25) + +Released via tag push → `.gitea/workflows/android-release.yml` built and signed the +arm64-v8a release APK (release keystore, `versionCode 4000` / `versionName 0.40.0`, +29.2 MB) and published it to the Gitea release. Obtainium clients tracking the repo +pick it up automatically. + +- Release: https://git.aleshym.co/funman300/Ferrous-Solitaire/releases/tag/v0.40.0 + +| PR | Summary | +|----|---------| +| #106 | **fix(engine):** Draw-Three waste fan hit-test now shares the renderer's fan step (`card_plugin::waste_fan_step` / `tableau_col_step`). The two had diverged under Android's tighter column spacing (`H_GAP_DIVISOR=32`), shifting the top fanned waste card's click target onto the card beneath it — so dragging the visible top card played the wrong one. Desktop/web were unaffected (the formulas already coincided there). | +| #105 | **test(engine):** waste-card draggability regression tests (`find_draggable_at` picks the waste top with multiple cards and as a lone card). | +| #108 | **docs(android):** NDK reference updated `26.3.11579264` → `30.0.14904198`; noted versions are not load-bearing and `build_android_apk.sh` auto-discovers the newest NDK/build-tools. | + +Pre-release validation performed locally this session: workspace clippy/test/build +gates; `aarch64-linux-android` cross-compile + clippy clean (covers the +`#[cfg(target_os = "android")]` paths that host CI never lints); release manifest +sanity (`solitaire_app/android/AndroidManifest.xml` has no version fields so CI +injection works; `lib_name` matches `[lib].name`); and a full signed local APK +proving the `build_android_apk.sh` packaging pipeline end-to-end. --- @@ -106,10 +130,16 @@ Three bugs fixed: ### 1. Android APK launch verification (Option A) Physical device test: install the latest APK on a real Android device (not AVD), -and run the checklist in `docs/ANDROID.md`. This has never been gated in CI. +and run the checklist in `docs/ANDROID.md §4`. 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. +**Still open after the v0.40.0 release.** The signed release APK is now published +(grab it from the release page, or use the local `target/debug/apk/ferrous-solitaire.apk`). +When testing, specifically exercise the Draw-Three waste fan fixed in #106: switch +to Draw-Three, draw several cards, and confirm dragging the visible top waste card +plays *that* card, not the one beneath it. + Latest AVD smoke (2026-06-08 local / 2026-06-09 UTC): built `target/debug/apk/ferrous-solitaire.apk` for `x86_64-linux-android`, installed it on AVD `Pixel_7`, launched `android.app.NativeActivity`, confirmed Bevy -- 2.47.3