- Imports de CoreData que faltaban (MemberImportVisibility) en AccountsView,
ImportDataView, ChartsContainerView y AddSourceView.
- Aislamiento MainActor: IsolatedDefaultValues en el target de la app,
LinearGradient @MainActor, WatchSyncMessage nonisolated, closures de
ReviewPromptService/MonthlyCheckInStore/AppIntents.
- Warnings de valores sin usar (SnapshotGapDetector, DashboardLayoutStore,
OnboardingView, GoalEditorView, CoreDataStack, SettingsViewModel).
- foregroundColor→foregroundStyle, cornerRadius→clipShape,
navigationBarLeading/Trailing→topBarLeading/Trailing,
Task.sleep(nanoseconds:)→sleep(for:), NavigationLink(isActive:)→
navigationDestination(isPresented:).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F1u4K16xy7eQVtgsYNZ9Vn
Bugs:
- Charts bloqueadas (intermitente) y tiles que no responden: el observer Combine
registraba el estado como actualizado ANTES de llamar a updateChartData, cuyo
guard de reentrada descartaba la llamada en silencio — reintentarlo era no-op
permanente. Ahora el bookkeeping vive dentro de updateChartData, las llamadas
reentrantes se colean en vez de descartarse, y selectChart computa en síncrono
(pulsar un tile es determinista y re-pulsar actúa de retry).
- Paywall sheet: movida del Group que cambia con el size class a cada layout —
en NavigationSplitView no llegaba a presentarse (tiles premium 'no hacían nada').
- Rolling 12M: el filtro de periodo no filtraba — el cálculo necesita histórico
completo para el lookback, pero ahora la salida respeta selectedTimeRange.
KPIs:
- El header de iPad muestra KPIs específicos del chart activo (los mismos que su
stats row) en vez de las 5 métricas de cartera fijas; las stats rows dentro de
las cards se ocultan en regular width para no duplicar (YoY opta por quedarse
al no tener equivalente en el header).
Compartir:
- Botón de compartir por chart (toolbar iPad + navbar iPhone): renderiza la
gráfica en una card con branding (BrandMark, KPIs, tagline, QR al App Store
con ct=chart_share) vía ImageRenderer y abre el share sheet con imagen + link.
- drawingGroup() se desactiva durante el export (ImageRenderer no rasteriza
capas Metal — salían en blanco). Strings nuevas en 7 idiomas.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WoScpmHdVj1aUf4rAp6hbe