docs(handoff): record WIN MOVE marker ship; B's next finite step
Captures `52befa6` (WIN MOVE marker on the scrub bar) under "Since the v0.21.3 cut", marks the marker piece of B-2 closed in the Visual-identity follow-ups list, identifies playback controls (play/pause/step) as the next bounded commit on B, and bumps the test count to 1220. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+38
-25
@@ -21,16 +21,17 @@ resume.
|
|||||||
## Status at pause
|
## Status at pause
|
||||||
|
|
||||||
- **HEAD locally:** see `git rev-parse HEAD`. The cut commit is
|
- **HEAD locally:** see `git rev-parse HEAD`. The cut commit is
|
||||||
`3d92a91`; the post-cut `Replay::win_move_index` data field
|
`3d92a91`; post-cut work on B-2 (`ab857bb` data field +
|
||||||
(`ab857bb`) rides on top of that.
|
`52befa6` WIN MOVE marker UI) rides on top of that.
|
||||||
- **HEAD on origin:** matches local. v0.21.3 is fully on origin.
|
- **HEAD on origin:** matches local. v0.21.3 is fully on origin.
|
||||||
- **Working tree:** clean. No WIP outstanding.
|
- **Working tree:** clean. No WIP outstanding.
|
||||||
- **`artwork/` directory:** still untracked. Intentional.
|
- **`artwork/` directory:** still untracked. Intentional.
|
||||||
- **Build:** `cargo clippy --workspace --all-targets -- -D warnings`
|
- **Build:** `cargo clippy --workspace --all-targets -- -D warnings`
|
||||||
clean.
|
clean.
|
||||||
- **Tests:** **1212 passing / 0 failing** across the workspace
|
- **Tests:** **1220 passing / 0 failing** across the workspace
|
||||||
(1207 from v0.21.3's stats + 5 from `ab857bb`'s
|
(1207 from v0.21.3's stats + 5 from `ab857bb`'s
|
||||||
`win_move_index` coverage).
|
`win_move_index` coverage + 8 from `52befa6`'s WIN MOVE marker
|
||||||
|
pure-helper truth-table + spawn lifecycle).
|
||||||
- **Tags on origin:** `v0.9.0` through `v0.21.3`. v0.21.3 is on
|
- **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
|
`3d92a91`; v0.21.2 stays on `f23df3b`; v0.21.1 stays on
|
||||||
`daa655a`; v0.21.0 stays on `04f9bf9`; v0.20.0 stays on
|
`daa655a`; v0.21.0 stays on `04f9bf9`; v0.20.0 stays on
|
||||||
@@ -47,12 +48,25 @@ resume.
|
|||||||
builder; for fresh recordings the value is always
|
builder; for fresh recordings the value is always
|
||||||
`Some(moves.len() - 1)` because recording freezes on win, but
|
`Some(moves.len() - 1)` because recording freezes on win, but
|
||||||
storing it explicitly lets the playback UI read the WIN MOVE
|
storing it explicitly lets the playback UI read the WIN MOVE
|
||||||
position directly without re-deriving on every render. UI
|
position directly without re-deriving on every render. 5 new
|
||||||
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
|
tests (1207 → 1212): default, builder set / set-None, on-disk
|
||||||
round-trip, legacy-JSON-loads-with-None backward-compat.
|
round-trip, legacy-JSON-loads-with-None backward-compat.
|
||||||
|
- **`52befa6` — WIN MOVE marker on the scrub bar.** Second
|
||||||
|
commit on B-2 — the UI that consumes the data field. New
|
||||||
|
`ReplayOverlayWinMoveMarker` component spawned as a sibling
|
||||||
|
to `ReplayOverlayScrubFill` under the 1px scrub track,
|
||||||
|
absolute-positioned at `replay.win_move_index / total` along
|
||||||
|
the bar. Painted in `STATE_SUCCESS` (green) so the marker
|
||||||
|
reads as "this is where the win lives." Pure helper
|
||||||
|
`win_move_marker_pct` returns `None` for any state where the
|
||||||
|
marker shouldn't draw (Inactive, Completed, replay missing
|
||||||
|
the field, empty move list); percentage clamps to `[0, 100]`
|
||||||
|
defensively. Lifecycle is spawn-time only — the marker is
|
||||||
|
immutable during a single playback because the underlying
|
||||||
|
`Replay` doesn't change while `Playing`. Despawned with the
|
||||||
|
overlay tree on transition back to `Inactive`. 8 new tests
|
||||||
|
(1212 → 1220): pure-helper truth table + spawn-presence /
|
||||||
|
spawn-absence / despawn-lifecycle observables.
|
||||||
|
|
||||||
## Open punch list
|
## Open punch list
|
||||||
|
|
||||||
@@ -90,14 +104,11 @@ 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
|
a WIN MOVE marker on the scrub bar. Banner-local pieces all
|
||||||
shipped in v0.21.0 (`c84d9f4` + `6204db8` + `54005d5` +
|
shipped in v0.21.0 (`c84d9f4` + `6204db8` + `54005d5` +
|
||||||
`e080b49`); the floating MOVE chip above the focused card
|
`e080b49`); the floating MOVE chip above the focused card
|
||||||
shipped in v0.21.2 (`2fb2d63`). The data-layer prerequisite
|
shipped in v0.21.2 (`2fb2d63`). The WIN MOVE scrub-bar marker
|
||||||
for the WIN MOVE marker — `Replay::win_move_index:
|
shipped post-v0.21.3 in `ab857bb` (data field) +
|
||||||
Option<usize>` — landed post-v0.21.3 in `ab857bb` (additive
|
`52befa6` (UI). What still needs to land: a move-log
|
||||||
serde-default field; populated at the recording site;
|
scroller, a mini-tableau preview, and playback controls
|
||||||
exhaustively tested). What still needs to land for the
|
(play/pause/step). Multi-session.
|
||||||
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
|
- *Floating `MOVE N/M` chip above the focused card during
|
||||||
playback — closed 2026-05-08 by `2fb2d63`.* World-space
|
playback — closed 2026-05-08 by `2fb2d63`.* World-space
|
||||||
`Text2d` entity sibling to the banner overlay; uses the same
|
`Text2d` entity sibling to the banner overlay; uses the same
|
||||||
@@ -274,15 +285,17 @@ DECISION TO ASK THE PLAYER FIRST:
|
|||||||
and Android Keystore stubs that need real bridges. Larger
|
and Android Keystore stubs that need real bridges. Larger
|
||||||
scope; needs an Android device or emulator running.
|
scope; needs an Android device or emulator running.
|
||||||
B. Replay-overlay screen-takeover redesign — multi-session
|
B. Replay-overlay screen-takeover redesign — multi-session
|
||||||
work: WIN MOVE marker on the scrub bar (data field
|
work. WIN MOVE marker shipped post-v0.21.3 (`ab857bb` data
|
||||||
`Replay::win_move_index` already landed in `ab857bb`, just
|
field + `52befa6` UI). What still needs to land:
|
||||||
needs UI consumption), move-log scroller, mini-tableau
|
move-log scroller, mini-tableau preview, playback controls
|
||||||
preview, playback controls. The smaller floating-MOVE-chip
|
(play/pause/step buttons + keyboard accelerators). The
|
||||||
piece of B already shipped in v0.21.2 (`2fb2d63`); the
|
smaller floating-MOVE-chip piece shipped in v0.21.2
|
||||||
data-layer prerequisite shipped post-v0.21.3 in `ab857bb`.
|
(`2fb2d63`). The natural next finite commit on B is
|
||||||
The natural next commit on B is the WIN MOVE marker UI on
|
**playback controls** — the existing Stop button is the
|
||||||
the scrub bar — finite, single-system, consumes the new
|
only player-facing accelerator; adding play/pause is a
|
||||||
field directly.
|
bounded UI + state-machine extension that exercises the
|
||||||
|
existing `ReplayPlaybackState::Playing { secs_to_next, ..
|
||||||
|
}` machinery without needing new data shapes.
|
||||||
C. Phase 8 (sync) — local storage scaffolding, self-hosted
|
C. Phase 8 (sync) — local storage scaffolding, self-hosted
|
||||||
Axum server, `SolitaireServerClient` impl, GPGS stub
|
Axum server, `SolitaireServerClient` impl, GPGS stub
|
||||||
wired into Settings. The biggest open arc by scope; rolls
|
wired into Settings. The biggest open arc by scope; rolls
|
||||||
|
|||||||
Reference in New Issue
Block a user