docs(handoff): record HC marker + ← / → wiring; recommend v0.21.5 cut

Two more post-v0.21.4 carve-outs land:
- 23902cd: HC-mode coverage for keybind-footer top border
  (HighContrastBorder marker so apply_high_contrast_borders
  bumps the 1 px top border under HC).
- e5c4f51: ← / → keyboard accelerators for paused stepping
  (hooks game's undo system for backwards step; footer
  extended to [SPACE] pause/resume · [ESC] stop · [← →] step).

Update Since-cut log, visual-identity bullet, B option in the
Resume menu, status (1244 → 1250 total tests / 1249 passing /
1 pre-existing flake), and HEAD hint.

Six post-v0.21.4 commits now form a coherent through-line:
replay-overlay scrubbing affordances + accessibility. Resume
menu's B option now recommends cutting v0.21.5 as the natural
next boundary.

Pre-existing flake noted: daily_challenge warning test fails
when wall-clock UTC is within 30 minutes of midnight (the
warning window the test asserts against). Verified not
introduced by recent commits via stash-and-retest.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-05-08 16:59:08 -07:00
parent e5c4f51a6e
commit 511550232c
+124 -61
View File
@@ -35,12 +35,18 @@ resume.
- **`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:** **1243 passing / 0 failing** across the workspace - **Tests:** **1250 total / 1249 passing / 1 pre-existing
time-dependent flake** across the workspace
(1228 in v0.21.4 + 4 from `fe68861`'s scrub-notch tests + 4 (1228 in v0.21.4 + 4 from `fe68861`'s scrub-notch tests + 4
from `d322abf`'s notch-label tests + 4 from `1873b3f`'s from `d322abf`'s notch-label tests + 4 from `1873b3f`'s
keybind-footer tests + 3 from `90e24d9`'s ESC-accelerator keybind-footer tests + 3 from `90e24d9`'s ESC-accelerator
tests). Detail in `CHANGELOG.md` § [0.21.4] § Stats; post-cut tests + 1 from `23902cd`'s HC-marker test + 6 from
delta tracked here. `e5c4f51`'s arrow-keyboard tests). The flake is
`daily_challenge_plugin::tests::check_system_fires_warning_event_only_once_per_day`
— fails when wall-clock UTC is within 30 minutes of midnight
(the daily-expiry warning window the test asserts against).
Verified pre-existing. Detail in `CHANGELOG.md` § [0.21.4]
§ Stats; post-cut delta tracked here.
- **Tags on origin:** `v0.9.0` through `v0.21.4`. v0.21.4 is on - **Tags on origin:** `v0.9.0` through `v0.21.4`. v0.21.4 is on
`23ff62c`; v0.21.3 stays on `3d92a91`; v0.21.2 stays on `23ff62c`; v0.21.3 stays on `3d92a91`; v0.21.2 stays on
`f23df3b`; v0.21.1 stays on `daa655a`; v0.21.0 stays on `f23df3b`; v0.21.1 stays on `daa655a`; v0.21.0 stays on
@@ -110,6 +116,48 @@ resume.
in lockstep with the wiring; the only-wired-keybinds in lockstep with the wiring; the only-wired-keybinds
discipline holds. 3 new tests + 1 updated helper-pin test; discipline holds. 3 new tests + 1 updated helper-pin test;
1240 → 1243. 1240 → 1243.
- **`23902cd` — `feat(replay): HC-mode coverage for
keybind-footer top border`.** Tag the footer's border-carrying
Node with `HighContrastBorder::with_default(BORDER_SUBTLE)` so
the existing `apply_high_contrast_borders` system bumps the
1 px top border from `#505050` → `#a0a0a0` under HC mode.
Footer text colours don't need bumps —
`TEXT_SECONDARY` (`#a0a0a0`) is already at `BORDER_SUBTLE_HC`
luminance by design (no `TEXT_SECONDARY_HC` constant exists).
The 1 px scrub track, notch ticks, and WIN MOVE marker render
via `BackgroundColor` (not `BorderColor`) so the marker
doesn't apply — HC coverage for those would need a
settings-aware paint system (precedent: `radial_rim_outline`
in `radial_menu`) and is deferred. 1 new test; 1243 → 1244.
- **`e5c4f51` — `feat(replay): wire ← / → keyboard accelerators
for paused stepping`.** New `step_backwards_replay_playback`
in `replay_playback.rs` decrements the cursor and dispatches
`UndoRequestEvent`; the game's `handle_undo` reads it next
frame to reverse its most-recent move — hooking the existing
undo system rather than replaying forward from cursor 0
(every replay-applied move pushes to the undo stack the same
way a player move would, so undo is the right reversal
primitive). Both arrow keys are paused-only via the same
destructure-gate pattern the forward step uses. Footer hint
extended in lockstep:
`[SPACE] pause/resume · [ESC] stop · [← →] step`. Footer
reads "step" not the mockup's "scrub" — single-move step is
what's wired; continuous scrub would need a key-held event
source. `ReplayOverlayPlugin` gains
`add_message::<UndoRequestEvent>()` defensively. 6 new tests
(2 hint pins + 4 keyboard scenarios) + 1 updated helper-pin
test; 1244 → 1250 total tests, 1249 passing.
**Pre-existing flake noted (verified):**
`daily_challenge_plugin::tests::
check_system_fires_warning_event_only_once_per_day` is
time-dependent — fails when wall-clock UTC is within 30
minutes of midnight (the daily-expiry warning window the test
asserts against). Verified pre-existing by stashing all
changes and re-running before commit — failure persisted. Same
shape as the `winnable_seed_search` flake from earlier in the
session. Will pass deterministically when UTC isn't in the
warning window. Not introduced by recent work.
Banner geometry is now mutable — every prior B-2 commit fit Banner geometry is now mutable — every prior B-2 commit fit
inside fixed 60 px space, but the notch-labels commit inside fixed 60 px space, but the notch-labels commit
@@ -118,30 +166,33 @@ child" precedent and the keybind-footer commit applied it
again. The next sub-pieces need significantly more vertical again. The next sub-pieces need significantly more vertical
room and follow the same shape. room and follow the same shape.
Next finite step on B-2: choices are Next finite step on B-2: keyboard accelerator coverage is now
1. **Wire ← / → for prev/next move** — needs a "step complete (`Space` / `Esc` / `` / ``). Remaining choices:
backwards" path in `replay_playback`, which currently only 1. **HC-mode coverage for the scrub-track / notch ticks /
supports forward stepping. Backwards stepping is non-trivial: WIN MOVE marker.** These render via `BackgroundColor` (not
the `Replay` carries the move list but no intermediate game `BorderColor`) so `HighContrastBorder` doesn't apply.
states, so rewinding means either replaying-from-start to Pattern would mirror `radial_menu::radial_rim_outline` —
`cursor - 1` or hooking into the game's undo system. New per-frame paint reading `Settings::high_contrast_mode`.
state plumbing either way. Footer hint would extend to Small commit, accessibility-progressing.
`[SPACE] pause/resume · [ESC] stop · [← →] step` in 2. **Continuous scrub on key-held ← / →** instead of
lockstep with the wiring. single-move step. Needs a key-held event source (or
2. **Move-log scroller / mini-tableau preview** — both need accumulator timer in the keyboard handler). Medium scope;
a much larger banner-height grow (effectively the takeover matches the mockup's `[← →] scrub` terminology.
3. **Move-log scroller / mini-tableau preview** — both need a
much larger banner-height grow (effectively the takeover
container itself). Bigger arcs; the natural place to land container itself). Bigger arcs; the natural place to land
the layout reflow that turns the banner into a takeover. the layout reflow that turns the banner into a takeover.
3. **HC-mode coverage for the new banner pieces** — labels 4. **Cut a v0.21.5 patch release** rolling up the four
and footer texts currently use `TEXT_SECONDARY`; under HC post-cut commits (`fe68861`, `d322abf`, `1873b3f`,
mode they should bump to `TEXT_PRIMARY` (or use the `90e24d9`, `23902cd`, `e5c4f51`) under the through-line
`HighContrastBorder` marker pattern for the 1 px borders). "replay-overlay scrubbing affordances + accessibility."
Small accessibility polish. Coherent narrative; six commits is a normal-sized patch
bundle for this project.
Recommended order: option 3 (HC polish) is the smallest next Recommended order: option 4 (cut release) is a clean next
step and keeps the cadence; option 1 (← / →) is the right boundary — six commits with a clear through-line is the right
medium-scope next-feature; option 2 is the multi-session arc size to bundle. Option 1 (HC paint for decorative pieces) is
that closes B-2. the smallest next-feature commit if continuing past the cut.
## Open punch list ## Open punch list
@@ -187,20 +238,25 @@ palette refresh all shipped in v0.20.0 + v0.21.0. What stays open:
post-v0.21.4 in `fe68861` — first decoration step toward the post-v0.21.4 in `fe68861` — first decoration step toward the
takeover layout. Percentage labels under each notch shipped takeover layout. Percentage labels under each notch shipped
post-v0.21.4 in `d322abf` — first **layout-changing** commit post-v0.21.4 in `d322abf` — first **layout-changing** commit
(banner 60 → 76 px to make room for a 16 px label row). (banner 60 → 76 px). Keybind-hint footer shipped in `1873b3f`
Keybind-hint footer (vim-style mode line + `[SPACE] (banner 76 → 92 px — vim-style mode line + `[SPACE]
pause/resume`) shipped post-v0.21.4 in `1873b3f` (banner pause/resume`). ESC accelerator wiring (with cross-plugin
76 → 92 px). ESC accelerator wiring (with cross-plugin gate gate in `pause_plugin::toggle_pause`) shipped in `90e24d9`.
in `pause_plugin::toggle_pause`) shipped post-v0.21.4 in HC-mode coverage for the footer's top border shipped in
`90e24d9`; footer hint extended to `23902cd`. ← / → keyboard accelerators for paused stepping
`[SPACE] pause/resume · [ESC] stop` in lockstep. Banner shipped in `e5c4f51` (hooks the existing undo system for
geometry is now mutable. What still needs to land: ← / → backwards step; footer extended to
scrub keys (needs new backwards-step path), HC-mode `[SPACE] pause/resume · [ESC] stop · [← →] step`). Banner
coverage for the new banner pieces (labels + footer geometry is mutable; keyboard accelerator coverage is
texts), then the bigger pieces — a move-log scroller and a complete. What still needs to land: HC-mode coverage for
mini-tableau preview — both screen-takeover-only pieces the scrub-track / notches / WIN MOVE marker (they render
that need a much larger banner height grow (effectively the via `BackgroundColor` so the `HighContrastBorder` marker
takeover container itself). Multi-session. doesn't apply — needs a settings-aware paint), continuous
scrub on key-held ← / → (vs single-step), then the bigger
pieces — a move-log scroller and a mini-tableau preview —
both screen-takeover-only pieces that need a much larger
banner height grow (effectively the takeover container
itself). 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
@@ -353,11 +409,13 @@ v0.21.1 at daa655a, v0.21.0 at 04f9bf9. Working tree clean. See
CHANGELOG.md § [0.21.4] for full detail. CHANGELOG.md § [0.21.4] for full detail.
State: HEAD locally — see `git rev-parse HEAD`. Post-cut HEAD is State: HEAD locally — see `git rev-parse HEAD`. Post-cut HEAD is
`90e24d9` (four carved-out commits on top of v0.21.4 — scrub-bar `e5c4f51` (six carved-out commits on top of v0.21.4 — scrub-bar
notches `fe68861`, notch labels `d322abf`, keybind-hint footer notches `fe68861`, notch labels `d322abf`, keybind-hint footer
`1873b3f`, ESC accelerator + pause-modal gate `90e24d9`). All `1873b3f`, ESC accelerator + pause-modal gate `90e24d9`, HC
workspace tests pass (1243; check with `cargo test --workspace`), marker for footer border `23902cd`, ← / → keyboard accelerators
clippy clean. `e5c4f51`). Workspace tests: 1250 total / 1249 passing / 1
pre-existing time-dependent flake (clock-near-midnight; verified
not introduced by recent work). 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
@@ -385,25 +443,30 @@ DECISION TO ASK THE PLAYER FIRST:
work. Three sub-pieces shipped in v0.21.4: WIN MOVE work. Three sub-pieces shipped in v0.21.4: WIN MOVE
marker (data field + UI) and pause / step / Space marker (data field + UI) and pause / step / Space
playback controls. The smaller floating-MOVE-chip piece playback controls. The smaller floating-MOVE-chip piece
shipped in v0.21.2 (`2fb2d63`). Post-v0.21.4: quarter- shipped in v0.21.2 (`2fb2d63`). Post-v0.21.4: scrub
mark scrub notches shipped in `fe68861` (5 ticks at notches `fe68861`, notch labels `d322abf` (banner
0/25/50/75/100 %); percentage labels under each notch 60 → 76 px), keybind-hint footer `1873b3f` (banner
shipped in `d322abf` (banner 6076 px — first layout 7692 px), ESC accelerator + cross-plugin gate
change); keybind-hint footer shipped in `1873b3f` `90e24d9`, HC-mode coverage for the footer top border
(banner 76 → 92 px — vim-style mode line + `[SPACE] `23902cd`, and ← / → keyboard accelerators for paused
pause/resume`); ESC accelerator wiring shipped in stepping `e5c4f51` (hooks the game's undo system for
`90e24d9` (cross-plugin gate in `pause_plugin`; footer backwards step; footer extended to
extended to `[SPACE] pause/resume · [ESC] stop`). `[SPACE] pause/resume · [ESC] stop · [← →] step`).
Banner geometry is now mutable. Natural next finite Keyboard accelerator coverage is complete. Natural next
steps: finite steps:
1. **HC-mode coverage** for the new banner pieces 1. **Cut a v0.21.5 patch release** rolling up the six
(labels + footer texts use `TEXT_SECONDARY`; under post-cut commits under "replay-overlay scrubbing
HC they should bump). Smallest next step. affordances + accessibility." Coherent narrative;
2. **Wire ← / → for prev/next move.** Needs a clean release boundary.
backwards-step path in `replay_playback` — either 2. **HC-mode coverage** for the scrub-track / notches /
replay-from-start or hook into the game's undo WIN MOVE marker (render via `BackgroundColor` not
system. Medium-scope next-feature. `BorderColor`, so `HighContrastBorder` doesn't apply
3. **Move-log scroller / mini-tableau preview** — both — needs a settings-aware paint, precedent
`radial_rim_outline`). Small commit.
3. **Continuous scrub on key-held ← / →** instead of
single-step. Needs a key-held event source. Matches
the mockup's `[← →] scrub` terminology.
4. **Move-log scroller / mini-tableau preview** — both
need a much larger banner-height grow (effectively need a much larger banner-height grow (effectively
the takeover container itself). Multi-session arcs the takeover container itself). Multi-session arcs
that close B-2. that close B-2.