feat(engine): one-shot What's-new card after updates (Phase I)
ObtainX updates install silently, so shipped features went unnoticed. On the first launch where the running release differs from the new Settings::last_seen_whats_new, a dismissible card summarises the latest CHANGELOG.md section (embedded; its top version doubles as the app's release identity — no build-time version plumbing). Internal sections are dropped and bullets reduce to their bold lead sentence. Launch beat: splash -> onboarding (first run) -> what's-new -> Home; spawn_home_on_launch waits on the new WhatsNewPending resource. Fresh installs never see the card — onboarding completion stamps the current version silently. The seen-stamp persists on spawn, not dismissal, so the card can never nag twice. 8 new tests (changelog parsing incl. the real embedded file, upgrade/ seen/fresh-install gating, dismissal). Workspace + clippy green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ use crate::{
|
||||
SafeAreaInsetsPlugin, SelectionPlugin, SettingsPlugin, SolutionPlaybackPlugin, SplashPlugin,
|
||||
StatsPlugin, SyncProvider, TablePlugin, ThemePlugin, ThemeRegistryPlugin, TimeAttackPlugin,
|
||||
TouchSelectionPlugin, UiFocusPlugin, UiModalPlugin, UiTooltipPlugin, WeeklyGoalsPlugin,
|
||||
WinSummaryPlugin,
|
||||
WhatsNewPlugin, WinSummaryPlugin,
|
||||
};
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
use crate::{
|
||||
@@ -115,6 +115,7 @@ impl Plugin for CoreGamePlugin {
|
||||
.add_plugins(PausePlugin)
|
||||
.add_plugins(SettingsPlugin::default())
|
||||
.add_plugins(OnboardingPlugin)
|
||||
.add_plugins(WhatsNewPlugin)
|
||||
.add_plugins(WinSummaryPlugin)
|
||||
.add_plugins(UiModalPlugin)
|
||||
.add_plugins(UiFocusPlugin)
|
||||
|
||||
Reference in New Issue
Block a user