- IntentStore now recreates the ModelContainer on demand in the widget
extension (IntentStore.refresh()), called before every AppIntent
perform() and every provider's makeEntry(). Fixes stale/blank widget
buttons and double-toggle bugs caused by the extension process
reading an old in-memory snapshot after CloudKit remote changes.
- Replaced the fixed 15/30-minute polling Timeline policy (which burns
WidgetKit's daily reload budget across 6 widget kinds) with
WidgetRefresh.timeline: idle widgets wait until the next logical-day
boundary since value changes are already pushed via
reloadAllTimelines, while widgets showing a live ratio (a currently
running quest/goal) get pre-computed future entries so progress
rings and bars keep advancing without extra reloads.
- Removed the per-widget "위젯 테마" (match app / light / dark / liquid
glass) configuration option from all 5 home-screen widgets. It
duplicated the same enum five times, and the liquid-glass variant's
custom background/scheme override fought the system's own
vibrant/tinted rendering in tinted Home Screens, which was part of
the "블랙 화면"/렌더링 오류 reports. Widgets now simply follow the
app's own theme setting (WidgetAppearance.appScheme), which is what
"앱 테마와 일치" already defaulted to.
- Added shared gallery/placeholder sample data (ActionCellSnapshot,
QuestCellSnapshot, GoalSnapshot, StatsChart sample points) so the
widget gallery and redacted placeholders show a realistic shape
instead of an empty/blank card.
- Unified empty-state UI via WidgetEmptyView across all 5 widgets.
Scope: Widgets/*, Shared/HaruDanimIntents.swift (widget-facing
IntentStore only), IOS/Views/WidgetPreviewScreen.swift (DEBUG preview
tool). No changes to app core data models, sync, or view logic.