docs(handoff): record GAME caption + MOVE chip; mark Option C closed
Bookkeeping pass after54005d5(GAME #YYYY-DDD caption) ande080b49(MOVE N/M chip restyle) shipped — both pieces of the Option C banner-local enrichments arc are now done. Changes: - "Since the v0.20.0 cut": added per-commit narratives for54005d5ande080b49with the implementation notes worth preserving past the commit log (the BANNER_HEIGHT 48→60 bump rationale, the Bevy 0.18 BorderColor::all() correction, the "marker on the leaf, not the wrapper" ECS-design choice). - "Open punch list" → "Replay-overlay enrichments beyond the scrub bar": pivoted from "tractable banner additions still open" to "all banner-local pieces shipped; remaining are cross-plugin or multi-session". Reflects current state without erasing the forward-looking work. - Resume prompt → Option C: marked closed with a forward pointer to the cross-plugin/multi-session items that should get their own decision tree next time. - Resume prompt → test count: dropped the hardcoded "1180 tests pass" (already stale at 1182) for "~1180+; check with `cargo test --workspace`" — same dynamic-reference pattern as 44f5972's commit-count fix, applied to the next aggregate that was vulnerable to it.
This commit is contained in:
+74
-18
@@ -143,6 +143,58 @@ extension is incidental. (Same shape as the "RUSTY SOLITAIRE"
|
|||||||
wordmark deviation noted under `cacb19c` — the mockup leaked the
|
wordmark deviation noted under `cacb19c` — the mockup leaked the
|
||||||
repo name; the actual product is "Solitaire Quest".)
|
repo name; the actual product is "Solitaire Quest".)
|
||||||
|
|
||||||
|
### `54005d5` `feat(engine): add GAME #YYYY-DDD caption beneath the replay headline`
|
||||||
|
|
||||||
|
Adds the right-anchored game-identifier piece of the replay-overlay
|
||||||
|
mockup, adapted to live *under* the existing "▌ replay" headline as
|
||||||
|
a `TYPE_CAPTION` (11 px) / `TEXT_SECONDARY` subtitle. Format is
|
||||||
|
`GAME #{year}-{ordinal:03}` (e.g. `GAME #2026-122` for a replay
|
||||||
|
recorded 2026-05-02) — year + chrono ordinal gives a compact,
|
||||||
|
monotonically-increasing identifier matching the mockup's
|
||||||
|
`GAME #2024-127` motif. New `ReplayOverlayGameCaption` marker, new
|
||||||
|
pure helper `format_game_caption(state) -> Option<String>` (None
|
||||||
|
for Inactive / Completed since the replay is consumed in those
|
||||||
|
branches; spawn-time fall-through to empty string).
|
||||||
|
|
||||||
|
**Layout impact:** `BANNER_HEIGHT` bumped 48 → 60 px so the new
|
||||||
|
left column (headline + 2 px gap + caption ≈ 39 px content) fits
|
||||||
|
under the scrub bar with room to spare. +12 px banner mass is the
|
||||||
|
deliberate cost of the new content; no other plugin observes
|
||||||
|
`BANNER_HEIGHT` so the change is local.
|
||||||
|
|
||||||
|
Two new tests (1180 → 1182): `format_game_caption_covers_state_corners`
|
||||||
|
pins the three branches plus the zero-pad-to-3-digits invariant
|
||||||
|
for early-January ordinals; `overlay_game_caption_shows_replay_date`
|
||||||
|
drives `ReplayPlaybackState` end-to-end.
|
||||||
|
|
||||||
|
### `e080b49` `feat(engine): restyle replay progress text as Terminal MOVE chip`
|
||||||
|
|
||||||
|
Closes the centre-text half of the replay-overlay enrichments. The
|
||||||
|
plain "Move N of M" text becomes a 1px `ACCENT_PRIMARY`-bordered
|
||||||
|
chip containing "MOVE N/M" — uppercase + slash separator reads as
|
||||||
|
a Terminal output line and matches the floating-chip motif in
|
||||||
|
`docs/ui-mockups/replay-overlay-mobile.html`. The chip lives
|
||||||
|
in-banner rather than floating above the focused card (the
|
||||||
|
screen-takeover treatment that requires plumbing cursor → card
|
||||||
|
identity remains deferred).
|
||||||
|
|
||||||
|
**Implementation note:** `BorderColor` in Bevy 0.18 is a per-side
|
||||||
|
struct, not a tuple — `BorderColor::all(ACCENT_PRIMARY)` is the
|
||||||
|
correct constructor. Worth pinning for next time we touch a
|
||||||
|
border-painted UI surface. The `ReplayOverlayProgressText` marker
|
||||||
|
stays on the inner Text rather than the new chip Node so
|
||||||
|
`update_progress_text` keeps repainting unchanged — a deliberate
|
||||||
|
"markers belong on the entity that updates change" choice.
|
||||||
|
|
||||||
|
Test count unchanged (1182); `overlay_progress_text_reflects_cursor`
|
||||||
|
swapped its assertion from "Move 5 of 10" to "MOVE 5/10".
|
||||||
|
|
||||||
|
This pair (`54005d5` + `e080b49`) closes Option C from the
|
||||||
|
SESSION_HANDOFF Resume prompt's banner-local enrichments. Floating-
|
||||||
|
chip-above-focused-card and the full screen-takeover redesign
|
||||||
|
remain — both data-layer or cross-plugin and intentionally still
|
||||||
|
open.
|
||||||
|
|
||||||
## What shipped in v0.20.0 (frozen at `41a009a`)
|
## What shipped in v0.20.0 (frozen at `41a009a`)
|
||||||
|
|
||||||
### Terminal visual-identity port
|
### Terminal visual-identity port
|
||||||
@@ -253,17 +305,18 @@ reads from it, so swapping the palette is now a one-file edit:
|
|||||||
skipped this because a per-element pulse fights the global
|
skipped this because a per-element pulse fights the global
|
||||||
`SplashFadable` fade timeline. Either layer the pulse on top
|
`SplashFadable` fade timeline. Either layer the pulse on top
|
||||||
of the fade (multiply alphas) or accept the static cursor.
|
of the fade (multiply alphas) or accept the static cursor.
|
||||||
- **Replay-overlay enrichments beyond the scrub bar.** The scrub
|
- **Replay-overlay enrichments beyond the scrub bar.** Banner-local
|
||||||
bar (`c84d9f4`) and the `▌ replay` cursor-block label
|
pieces of the mockup (`docs/ui-mockups/replay-overlay-mobile.html`)
|
||||||
(`6204db8`) are the *minimum* of the mockup
|
all shipped: scrub bar (`c84d9f4`), `▌ replay` cursor-block label
|
||||||
(`docs/ui-mockups/replay-overlay-mobile.html`). Tractable
|
(`6204db8`), `GAME #YYYY-DDD` caption (`54005d5`), `MOVE N/M`
|
||||||
banner additions still open: a right-aligned `GAME #N · MOVES`
|
chip restyle (`e080b49`). What's still open are the cross-plugin
|
||||||
caption (mirrors the `▌replay.tsx` left-aligned filename motif),
|
/ data-layer pieces: a `MOVE N/M` chip *floating above the
|
||||||
a `MOVE 47/87` chip floating above the focused card during
|
focused card* during playback (would need to thread the cursor
|
||||||
playback (would need to thread the cursor through to the card
|
through to the card layer — `update_progress_text` writes the
|
||||||
layer). The full mockup's screen-takeover treatment — mini-
|
banner chip but the card-position lookup belongs in `card_plugin`).
|
||||||
tableau preview, playback controls, move-log scroll, WIN MOVE
|
The full mockup's screen-takeover treatment — mini-tableau
|
||||||
marker on the scrub bar — is a multi-session redesign with
|
preview, playback controls, move-log scroll, WIN MOVE marker on
|
||||||
|
the scrub bar — is a multi-session redesign with
|
||||||
data-layer impact (move-log scroller; the WIN MOVE marker
|
data-layer impact (move-log scroller; the WIN MOVE marker
|
||||||
needs a `win_move_index` field on `Replay` that doesn't yet
|
needs a `win_move_index` field on `Replay` that doesn't yet
|
||||||
exist). Banner-overlay behaviour is intentionally preserved
|
exist). Banner-overlay behaviour is intentionally preserved
|
||||||
@@ -375,7 +428,8 @@ boot-screen port, c84d9f4 replay scrub-bar finish, 6204db8 replay
|
|||||||
banner ▌ cursor-block label, plus any handoff edits since).
|
banner ▌ cursor-block label, plus any handoff edits since).
|
||||||
|
|
||||||
State: HEAD locally — see `git rev-parse HEAD`. Working tree is
|
State: HEAD locally — see `git rev-parse HEAD`. Working tree is
|
||||||
clean. 1180 tests pass, clippy clean.
|
clean. All workspace tests pass (~1180+; 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
|
||||||
@@ -402,12 +456,14 @@ DECISION TO ASK THE PLAYER FIRST:
|
|||||||
tiled-pattern asset or shader; pulse needs to layer on top
|
tiled-pattern asset or shader; pulse needs to layer on top
|
||||||
of the SplashFadable timeline). Pure polish; no behaviour
|
of the SplashFadable timeline). Pure polish; no behaviour
|
||||||
change.
|
change.
|
||||||
C. Replay-overlay enrichments beyond the scrub bar. Tractable
|
C. *Closed by `54005d5` + `e080b49`.* Banner-local replay-overlay
|
||||||
banner additions still open: a right-aligned
|
pieces all shipped (scrub bar, ▌ label, GAME caption, MOVE
|
||||||
`GAME #N · MOVES` caption, a `MOVE 47/87` chip floating
|
chip). Remaining are cross-plugin (floating MOVE chip above
|
||||||
above the focused card during playback. Stops short of the
|
the focused card — needs cursor → card-position plumbing) or
|
||||||
screen-takeover redesign (move-log scroll, mini tableau,
|
multi-session (full screen-takeover redesign — move-log
|
||||||
WIN MOVE marker — multi-session, data-layer impact).
|
scroll, mini tableau, WIN MOVE marker, data-layer impact).
|
||||||
|
Either belongs in its own decision tree the next time replay
|
||||||
|
work surfaces.
|
||||||
D. Card-face artwork regeneration. Generate Terminal-aesthetic
|
D. Card-face artwork regeneration. Generate Terminal-aesthetic
|
||||||
card PNGs (dark face, light suit pips), then migrate
|
card PNGs (dark face, light suit pips), then migrate
|
||||||
CARD_FACE_COLOUR / RED_SUIT_COLOUR / BLACK_SUIT_COLOUR /
|
CARD_FACE_COLOUR / RED_SUIT_COLOUR / BLACK_SUIT_COLOUR /
|
||||||
|
|||||||
Reference in New Issue
Block a user