-
v0.15.0 — in-engine replay playback, Klondike solver, Cinephile
released this
2026-05-05 23:07:15 +00:00 | 467 commits to master since this releaseCloses the post-v0.14.0 candidate list. The major new player-
facing pieces are the working "Watch replay" button (with Stop +
progress overlay), the Klondike solver behind a "Winnable deals
only" toggle, and a rolling history of the last 8 wins. Under the
hood, the Bevy default-features trim drops 51 transitive crates.Added
- In-engine replay playback. ReplayPlaybackPlugin + ReplayPlaybackState
state machine resets the live game to the recorded deal and
ticks through replay.moves at 0.45 s/move firing canonical
MoveRequestEvent / DrawRequestEvent per recorded move. Recording
suppression keeps replays from re-recording themselves. - Replay overlay banner. ReplayOverlayPlugin anchors a top-of-window
banner during playback with "Replay" label, "Move N of M"
progress, and a Stop button. Z-order leaves modals openable
during playback. - Rolling replay history at <data_dir>/replays.json capped at 8.
Legacy latest_replay.json migrates forward. Stats selector with
Prev / Next chips lets the player revisit older wins. - Cinephile achievement (#19). Unlocks the first time playback
transitions Playing → Completed naturally; Stop button doesn't
count. - Klondike solver in solitaire_core::solver. Iterative DFS, 64-bit
canonical state hash, three-state SolverResult, two budget knobs.
Median solve 2 ms, pathological 120 ms. - "Winnable deals only" toggle in Settings → Gameplay (default
off). handle_new_game retries seeds up to SOLVER_DEAL_RETRY_CAP
(50) when on. Daily / replays / explicit-seed bypass.
Changed
- Bevy default-feature trim. default-features = false plus a
curated explicit feature list drops 51 transitive crates
including the bevy_audio → rodio → cpal 0.15 + symphonia chain.
By the numbers: 1178 passing tests (was 1134 at v0.14.0), zero
clippy warnings.Downloads
- In-engine replay playback. ReplayPlaybackPlugin + ReplayPlaybackState