From e63046700c9a78e2cab49a021c7704e7cc5bff13 Mon Sep 17 00:00:00 2001 From: funman300 Date: Fri, 8 May 2026 14:45:59 -0700 Subject: [PATCH] docs(handoff): record win_move_index data field; B's next finite step Captures `ab857bb` (Replay::win_move_index data field) under "Since the v0.21.3 cut". Updates the Visual-identity follow-up entry for B-2 to flag the data-layer prerequisite as landed and identifies the WIN MOVE scrub-bar marker UI as the natural next finite commit. Bumps test count to 1212. Co-Authored-By: Claude Opus 4.7 --- SESSION_HANDOFF.md | 53 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/SESSION_HANDOFF.md b/SESSION_HANDOFF.md index 39e0df6..10c6d82 100644 --- a/SESSION_HANDOFF.md +++ b/SESSION_HANDOFF.md @@ -21,15 +21,16 @@ resume. ## Status at pause - **HEAD locally:** see `git rev-parse HEAD`. The cut commit is - `3d92a91`; any post-cut docs edits ride on top of that. + `3d92a91`; the post-cut `Replay::win_move_index` data field + (`ab857bb`) rides on top of that. - **HEAD on origin:** matches local. v0.21.3 is fully on origin. - **Working tree:** clean. No WIP outstanding. - **`artwork/` directory:** still untracked. Intentional. - **Build:** `cargo clippy --workspace --all-targets -- -D warnings` clean. -- **Tests:** **1207 passing / 0 failing** across the workspace - (net +12 from v0.21.2's 1195 baseline). Detail in - `CHANGELOG.md` § [0.21.3] § Stats. +- **Tests:** **1212 passing / 0 failing** across the workspace + (1207 from v0.21.3's stats + 5 from `ab857bb`'s + `win_move_index` coverage). - **Tags on origin:** `v0.9.0` through `v0.21.3`. v0.21.3 is on `3d92a91`; v0.21.2 stays on `f23df3b`; v0.21.1 stays on `daa655a`; v0.21.0 stays on `04f9bf9`; v0.20.0 stays on @@ -37,9 +38,21 @@ resume. ## Since the v0.21.3 cut -No threads in flight. Working tree clean as of 2026-05-08. New -work since the cut would land here as commit narratives; for -the v0.21.3 contents themselves, see `CHANGELOG.md` § [0.21.3]. +- **`ab857bb` — `Replay::win_move_index` data field landed.** + First finite step toward the B-2 replay screen-takeover + redesign. Additive optional `Option` on `Replay` with + `#[serde(default)]` so older `latest_replay.json` / + `replays.json` files load unchanged (no schema bump). Populated + at the live recording site via a new `with_win_move_index` + builder; for fresh recordings the value is always + `Some(moves.len() - 1)` because recording freezes on win, but + storing it explicitly lets the playback UI read the WIN MOVE + position directly without re-deriving on every render. UI + consumption (the WIN MOVE marker on the scrub bar, plus the + broader screen-takeover work — move-log scroller, mini-tableau + preview, playback controls) lands in subsequent commits. 5 new + tests (1207 → 1212): default, builder set / set-None, on-disk + round-trip, legacy-JSON-loads-with-None backward-compat. ## Open punch list @@ -77,11 +90,14 @@ palette refresh all shipped in v0.20.0 + v0.21.0. What stays open: a WIN MOVE marker on the scrub bar. Banner-local pieces all shipped in v0.21.0 (`c84d9f4` + `6204db8` + `54005d5` + `e080b49`); the floating MOVE chip above the focused card - shipped in v0.21.2 (`2fb2d63`). The screen-takeover is a - multi-session redesign with data-layer impact — needs a new - `win_move_index: Option` field on `Replay` (currently - unimplemented), a move-log scroller, and a mini-tableau - preview. + shipped in v0.21.2 (`2fb2d63`). The data-layer prerequisite + for the WIN MOVE marker — `Replay::win_move_index: + Option` — landed post-v0.21.3 in `ab857bb` (additive + serde-default field; populated at the recording site; + exhaustively tested). What still needs to land for the + screen-takeover: the WIN MOVE scrub-bar marker UI (consumes + the new field), a move-log scroller, a mini-tableau preview, + and playback controls. Multi-session. - *Floating `MOVE N/M` chip above the focused card during playback — closed 2026-05-08 by `2fb2d63`.* World-space `Text2d` entity sibling to the banner overlay; uses the same @@ -258,10 +274,15 @@ DECISION TO ASK THE PLAYER FIRST: and Android Keystore stubs that need real bridges. Larger scope; needs an Android device or emulator running. B. Replay-overlay screen-takeover redesign — multi-session - work: move-log scroller, mini-tableau preview, WIN MOVE - marker on the scrub bar (needs new `Replay::win_move_index` - field), playback controls. The smaller floating-MOVE-chip - piece of B already shipped in v0.21.2 (`2fb2d63`). + work: WIN MOVE marker on the scrub bar (data field + `Replay::win_move_index` already landed in `ab857bb`, just + needs UI consumption), move-log scroller, mini-tableau + preview, playback controls. The smaller floating-MOVE-chip + piece of B already shipped in v0.21.2 (`2fb2d63`); the + data-layer prerequisite shipped post-v0.21.3 in `ab857bb`. + The natural next commit on B is the WIN MOVE marker UI on + the scrub bar — finite, single-system, consumes the new + field directly. C. Phase 8 (sync) — local storage scaffolding, self-hosted Axum server, `SolitaireServerClient` impl, GPGS stub wired into Settings. The biggest open arc by scope; rolls