docs(handoff): close JNI clipboard + Keystore; 1298 tests; Phase Android items done

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-05-08 21:06:02 -07:00
parent f281425b45
commit 4df962ee07
2 changed files with 20 additions and 8 deletions
+2
View File
@@ -10,6 +10,8 @@ project follows [Semantic Versioning](https://semver.org/).
**`0cb1587`** — Play-by-Seed dialog (2026-05-08). **`0cb1587`** — Play-by-Seed dialog (2026-05-08).
**`2062bd0`** — 75 new challenge seeds + gen_seeds binary (2026-05-08). **`2062bd0`** — 75 new challenge seeds + gen_seeds binary (2026-05-08).
**`45436d0`** — gate handle_fullscreen to non-Android (2026-05-08). **`45436d0`** — gate handle_fullscreen to non-Android (2026-05-08).
**`2c822ba`** — JNI clipboard bridge for Android Stats share-link (2026-05-08).
**`f281425`** — Android Keystore AES-GCM token storage via JNI (2026-05-08).
See [0.21.9] for the committed detail once cut. See [0.21.9] for the committed detail once cut.
## [0.21.9] — pending cut ## [0.21.9] — pending cut
+18 -8
View File
@@ -1,7 +1,7 @@
# Solitaire Quest — Session Handoff # Solitaire Quest — Session Handoff
**Last updated:** 2026-05-08 — **v0.21.8 tagged at `c50eaf8`**; **Last updated:** 2026-05-08 — **v0.21.8 tagged at `c50eaf8`**;
seven post-cut commits on master. Push pending. nine post-cut commits on master. Push pending.
v0.21.8 closes the last optional polish items in the B-2 v0.21.8 closes the last optional polish items in the B-2
replay screen-takeover arc: **notch-label centering** (middle replay screen-takeover arc: **notch-label centering** (middle
@@ -18,7 +18,7 @@ resume.
## Status at pause ## Status at pause
- **HEAD locally:** `45436d0` (handle_fullscreen Android gate). - **HEAD locally:** `f281425` (Android Keystore JNI).
Docs ride on top; push pending. Docs ride on top; push pending.
- **HEAD on origin:** `395a322` (double-tap commit — last pushed). - **HEAD on origin:** `395a322` (double-tap commit — last pushed).
- **Working tree:** clean (docs uncommitted). No WIP outstanding. - **Working tree:** clean (docs uncommitted). No WIP outstanding.
@@ -42,6 +42,8 @@ Seven commits since the v0.21.8 tag:
- `0cb1587` — Play-by-Seed dialog + HomeMode card - `0cb1587` — Play-by-Seed dialog + HomeMode card
- `2062bd0` — 75 new challenge seeds + gen_seeds binary - `2062bd0` — 75 new challenge seeds + gen_seeds binary
- `45436d0` — gate handle_fullscreen to non-Android - `45436d0` — gate handle_fullscreen to non-Android
- `2c822ba` — JNI clipboard bridge for Android Stats share-link
- `f281425` — Android Keystore AES-GCM token storage via JNI
CHANGELOG + SESSION_HANDOFF docs ride on top; push pending. CHANGELOG + SESSION_HANDOFF docs ride on top; push pending.
@@ -77,12 +79,20 @@ Open next-step menu:
`handle_fullscreen` and its `MonitorSelection`/`WindowMode` `handle_fullscreen` and its `MonitorSelection`/`WindowMode`
imports are `#[cfg(not(target_os = "android"))]`-gated. The imports are `#[cfg(not(target_os = "android"))]`-gated. The
`add_systems` call is a separate statement (not mid-chain). `add_systems` call is a separate statement (not mid-chain).
- **JNI ClipboardManager bridge.** Replaces the Android stub for - *JNI ClipboardManager bridge — closed 2026-05-08 by `2c822ba`.*
the Stats "Copy share link" toast. `arboard` doesn't ship an `android_clipboard::set_text(url)` calls `ClipboardManager` via
Android backend; small custom JNI call. JNI. Stats share-link button now writes to the clipboard with a
- **Android Keystore for credentials.** `keyring` is target-gated "Copied: {url}" toast; falls back to "Share link: {url}" on JNI
to a stub returning `KeychainUnavailable`; replace with Android error. Requires AVD functional test (see verification steps in
Keystore via JNI when sync auth ships on mobile. the approved plan).
- *Android Keystore for credentials — closed 2026-05-08 by `f281425`.*
`android_keystore` module: AES-256/GCM/NoPadding device-bound key,
tokens serialised to JSON and stored atomically at
`{data_dir}/auth_tokens.bin` as `[12-byte IV][ciphertext+tag]`.
`auth_tokens.rs` Android stubs now delegate to it. Key
invalidation (biometric reset) → `TokenError::KeychainUnavailable`.
Requires AVD functional test before Phase 8 sync goes live on
Android.
- **Cosmetic `cargo apk build --lib` workaround.** Post-sign - **Cosmetic `cargo apk build --lib` workaround.** Post-sign
panic doesn't affect the APK on disk but produces noisy stderr. panic doesn't affect the APK on disk but produces noisy stderr.
Either upstream a cargo-apk fix or document `--lib` as Either upstream a cargo-apk fix or document `--lib` as