docs(handoff): refresh post-v0.21.4 — anchor to new tag, reset menu state
Anchors handoff to v0.21.4 at `23ff62c`, resets the "Since the cut" section to placeholder, updates the READ FIRST CHANGELOG pointer, bumps the Resume-prompt summary to reflect replay-scrubbing accessibility as the v0.21.4 through-line, and identifies the screen-takeover layout reflow as the remaining multi-session arc on B (with move-log scroller + mini-tableau preview as small sub-pieces inside it). Resume menu stays at A/B/C — A and C unchanged; B's prerequisite sub-pieces shipped in v0.21.4 so the entry now points cleanly at the layout reflow as the single remaining multi-session piece. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+55
-86
@@ -1,91 +1,57 @@
|
|||||||
# Solitaire Quest — Session Handoff
|
# Solitaire Quest — Session Handoff
|
||||||
|
|
||||||
**Last updated:** 2026-05-08 — **v0.21.3 cut and tagged at
|
**Last updated:** 2026-05-08 — **v0.21.4 cut and tagged at
|
||||||
`3d92a91`**, working tree clean, all post-tag work pushed to
|
`23ff62c`**, working tree clean, all post-tag work pushed to
|
||||||
origin.
|
origin.
|
||||||
|
|
||||||
v0.21.3 is a patch release with one through-line: **accessibility
|
v0.21.4 is a patch release with one through-line:
|
||||||
arc closure**. v0.21.2 explicitly carved out "dynamic-paint sites"
|
**replay-scrubbing accessibility**. The replay overlay used to be
|
||||||
(HUD action buttons, modal buttons, radial menu rim) on the
|
pure-passive — start, watch, wait. v0.21.4 adds the scaffolding
|
||||||
assumption that their existing paint cycles would race the
|
for *navigating within* a replay: a WIN MOVE marker on the scrub
|
||||||
central `update_high_contrast_borders` system. v0.21.3 walks the
|
bar so the player can see at a glance where the winning move
|
||||||
actual code, finds the carve-out was over-cautious, and closes
|
sits, plus pause / resume / step controls (with a Space keyboard
|
||||||
it. Bonus: the first real consumer of `ToastVariant::Warning`
|
accelerator) so they can stop on any move and inspect the board.
|
||||||
also lands here, making the `ToastVariant` enum fully load-bearing
|
Also lands the additive `Replay::win_move_index: Option<usize>`
|
||||||
(every variant has at least one driver).
|
data field that makes the marker possible — serde-default so
|
||||||
|
older on-disk replays load with `None` and simply don't get a
|
||||||
|
marker (no schema bump).
|
||||||
|
|
||||||
Full v0.21.3 detail lives in `CHANGELOG.md` § [0.21.3]. This
|
Three commits on the B-2 replay screen-takeover redesign arc
|
||||||
|
land here. The remaining sub-pieces (screen-takeover layout,
|
||||||
|
move-log scroller, mini-tableau preview) share a layout-reflow
|
||||||
|
prerequisite the banner can't carry, so they're deferred to a
|
||||||
|
future cycle as a single multi-session arc.
|
||||||
|
|
||||||
|
Full v0.21.4 detail lives in `CHANGELOG.md` § [0.21.4]. This
|
||||||
file from here on focuses on what's *open* post-cut and how to
|
file from here on focuses on what's *open* post-cut and how to
|
||||||
resume.
|
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`; post-cut work on B-2 (`ab857bb` data field +
|
`23ff62c`; any post-cut docs edits ride on top of that.
|
||||||
`52befa6` WIN MOVE marker UI + `fbe48ac` playback controls)
|
- **HEAD on origin:** matches local. v0.21.4 is fully on origin.
|
||||||
rides on top of that.
|
|
||||||
- **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:** **1228 passing / 0 failing** across the workspace
|
- **Tests:** **1228 passing / 0 failing** across the workspace
|
||||||
(1207 from v0.21.3's stats + 5 from `ab857bb`'s
|
(net +21 from v0.21.3's 1207 baseline). Detail in
|
||||||
`win_move_index` coverage + 8 from `52befa6`'s WIN MOVE marker
|
`CHANGELOG.md` § [0.21.4] § Stats.
|
||||||
pure-helper truth-table + spawn lifecycle + 8 from `fbe48ac`'s
|
- **Tags on origin:** `v0.9.0` through `v0.21.4`. v0.21.4 is on
|
||||||
pause / step / keyboard accelerator coverage).
|
`23ff62c`; v0.21.3 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 `41a009a`.
|
||||||
- **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
|
||||||
`41a009a`.
|
`41a009a`.
|
||||||
|
|
||||||
## Since the v0.21.3 cut
|
## Since the v0.21.4 cut
|
||||||
|
|
||||||
- **`ab857bb` — `Replay::win_move_index` data field landed.**
|
No threads in flight. Working tree clean as of 2026-05-08. New
|
||||||
First finite step toward the B-2 replay screen-takeover
|
work since the cut would land here as commit narratives; for
|
||||||
redesign. Additive optional `Option<usize>` on `Replay` with
|
the v0.21.4 contents themselves, see `CHANGELOG.md` § [0.21.4].
|
||||||
`#[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. 5 new
|
|
||||||
tests (1207 → 1212): default, builder set / set-None, on-disk
|
|
||||||
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.
|
|
||||||
- **`fbe48ac` — playback controls (pause / resume / step).**
|
|
||||||
Third commit on B-2. New `paused: bool` field on
|
|
||||||
`ReplayPlaybackState::Playing`; `tick_replay_playback` skips
|
|
||||||
the `secs_to_next` decrement entirely while paused so cursor
|
|
||||||
and timer freeze together. New public API:
|
|
||||||
`toggle_pause_replay_playback` and `step_replay_playback`
|
|
||||||
(the latter hard-gated to `Playing { paused: true }` so
|
|
||||||
manual stepping can't race the tick loop). UI: Pause /
|
|
||||||
Resume button (label repaints reactively via
|
|
||||||
`update_pause_button_label` which walks `Children` from
|
|
||||||
marker to inner `Text`) + Step button + Space keyboard
|
|
||||||
accelerator. Existing 25 `Playing { ... }` construction
|
|
||||||
sites across tests gained `paused: false` mechanically.
|
|
||||||
8 new tests (1220 → 1228): label truth table, label repaint
|
|
||||||
on state change, click-toggles-paused, step advances exactly
|
|
||||||
one cursor with paused preserved, step-while-running no-op,
|
|
||||||
Space toggles paused.
|
|
||||||
|
|
||||||
## Open punch list
|
## Open punch list
|
||||||
|
|
||||||
@@ -273,20 +239,21 @@ into a v0.21.1 / v0.22.0 cut.
|
|||||||
```
|
```
|
||||||
You are a senior Rust + Bevy developer working on Solitaire Quest.
|
You are a senior Rust + Bevy developer working on Solitaire Quest.
|
||||||
Working directory: <Rusty_Solitaire clone path on this machine>.
|
Working directory: <Rusty_Solitaire clone path on this machine>.
|
||||||
Branch: master. v0.21.3 is tagged at 3d92a91 (cut 2026-05-08, a
|
Branch: master. v0.21.4 is tagged at 23ff62c (cut 2026-05-08, a
|
||||||
patch release rolling up the accessibility-arc closure: HC reaches
|
patch release rolling up replay-scrubbing accessibility: WIN MOVE
|
||||||
the previously-carved-out dynamic-paint sites, and the first real
|
marker on the scrub bar, pause / resume / step playback controls
|
||||||
consumer of `ToastVariant::Warning` lands as the daily-challenge
|
with a Space keyboard accelerator, and the additive
|
||||||
expiry toast). v0.21.2 stays at f23df3b, v0.21.1 at daa655a,
|
`Replay::win_move_index: Option<usize>` data field that makes the
|
||||||
v0.21.0 at 04f9bf9. Working tree clean. See CHANGELOG.md §
|
marker possible). v0.21.3 stays at 3d92a91, v0.21.2 at f23df3b,
|
||||||
[0.21.3] for full detail.
|
v0.21.1 at daa655a, v0.21.0 at 04f9bf9. Working tree clean. See
|
||||||
|
CHANGELOG.md § [0.21.4] for full detail.
|
||||||
|
|
||||||
State: HEAD locally — see `git rev-parse HEAD`. All workspace tests
|
State: HEAD locally — see `git rev-parse HEAD`. All workspace tests
|
||||||
pass (1207+; check with `cargo test --workspace`), clippy clean.
|
pass (1228+; check with `cargo test --workspace`), clippy clean.
|
||||||
|
|
||||||
READ FIRST (in order, before doing anything):
|
READ FIRST (in order, before doing anything):
|
||||||
1. SESSION_HANDOFF.md — this file
|
1. SESSION_HANDOFF.md — this file
|
||||||
2. CHANGELOG.md — [0.21.3] section is the most recent cut
|
2. CHANGELOG.md — [0.21.4] section is the most recent cut
|
||||||
3. CLAUDE.md — unified-3.0 rule set
|
3. CLAUDE.md — unified-3.0 rule set
|
||||||
4. CLAUDE_SPEC.md — formal architecture spec
|
4. CLAUDE_SPEC.md — formal architecture spec
|
||||||
5. ARCHITECTURE.md — crate responsibilities + data flow
|
5. ARCHITECTURE.md — crate responsibilities + data flow
|
||||||
@@ -307,17 +274,19 @@ 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. Three sub-pieces shipped post-v0.21.3: WIN MOVE
|
work. Three sub-pieces shipped in v0.21.4: WIN MOVE
|
||||||
marker (`ab857bb` data field + `52befa6` UI), playback
|
marker (data field + UI) and pause / step / Space
|
||||||
controls (`fbe48ac` pause/resume/step + Space). What
|
playback controls. The smaller floating-MOVE-chip piece
|
||||||
still needs to land: a move-log scroller and a
|
shipped in v0.21.2 (`2fb2d63`). What still needs to
|
||||||
mini-tableau preview — both layout-heavy pieces that need
|
land: a move-log scroller and a mini-tableau preview —
|
||||||
more vertical real estate than the current banner-only
|
both layout-heavy pieces that need more vertical real
|
||||||
overlay carries, so the natural next finite step is the
|
estate than the current banner-only overlay carries, so
|
||||||
screen-takeover layout itself (mockup at
|
the natural next finite step is the **screen-takeover
|
||||||
`docs/ui-mockups/replay-overlay-mobile.html`). The
|
layout itself** (mockup at
|
||||||
smaller floating-MOVE-chip piece shipped in v0.21.2
|
`docs/ui-mockups/replay-overlay-mobile.html`). That's
|
||||||
(`2fb2d63`).
|
the single multi-session arc the remaining work groups
|
||||||
|
under — once the takeover layout lands, the scroller and
|
||||||
|
preview can each be small carved-out commits.
|
||||||
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