diff --git a/CHANGELOG.md b/CHANGELOG.md index de35860..35aa75b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ project follows [Semantic Versioning](https://semver.org/). ## [Unreleased] +## [0.41.0] — 2026-07-06 + +> Consolidates everything shipped since v0.39.0, including the v0.40.0–v0.40.3 +> patch tags (which were cut from this section without renaming it at the time). + ### Added - **Rules decision record: unlimited stock recycling.** Documented in @@ -32,6 +37,10 @@ project follows [Semantic Versioning](https://semver.org/). ### Changed +- **Engine plugin modules restructured.** The five oversized plugin files + (card, hud, settings, game, input) are now module directories with their + test suites in sibling `tests.rs` files — no behaviour change; first phase + of the module-split plan (#118). - **Core type ownership.** Routed all klondike/card imports through `solitaire_core` and unified local `Suit` / `Rank` with upstream `card_game` types. @@ -43,6 +52,12 @@ project follows [Semantic Versioning](https://semver.org/). ### Fixed +- **Safe-area insets now re-polled after app resume.** The inset poller settled + permanently once insets first resolved, so inset changes while backgrounded + (fold/unfold, rotation, gesture ↔ 3-button nav switch) kept stale layout until + the app was killed. Each resume now re-arms a fresh poll window; the cached + value is rewritten only when it actually changed, so unchanged resumes still + cause no relayout flash. (#116) - **Tableau fill on foldables / tall screens.** The tableau fan now spreads from each column's total depth (face-down cards included) and refills on the cold-start deal, every move, and on resize (incl. the Android safe-area-inset