+ // v1.18.10 — body block rhythm matches the sibling insights cards
+ // (`correlation-card` uses `space-y-3` between its chart /
+ // interpretation / source blocks). The briefing card carried a
+ // looser `space-y-4`, which read as taller than its neighbours on
+ // the overview. One token, no new spacing scale.
+
{/* v1.4.27 B1 — the leading narrative paragraph dropped.
The hero strip subtitle on `/insights` already renders
the same `briefing.paragraph` text directly above this
diff --git a/src/components/insights/use-insights-advisor.ts b/src/components/insights/use-insights-advisor.ts
index 64dd690d2..53deb92cd 100644
--- a/src/components/insights/use-insights-advisor.ts
+++ b/src/components/insights/use-insights-advisor.ts
@@ -330,6 +330,15 @@ export function useInsightsAdvisorQuery(
// their query subtree so the per-section text below the advisor card
// re-fetches.
queryClient.invalidateQueries({ queryKey: queryKeys.insightsRoot() });
+ // v1.18.10 — the dashboard hero surfaces the briefing headline from the
+ // SNAPSHOT (server-lifted `User.insightsCachedText`), not from this
+ // advisor cache. A regenerate rewrites that server cache, so invalidate
+ // the snapshot too — otherwise returning to the Startseite shows the
+ // previous briefing under the greeting until the snapshot's own stale
+ // window lapses. Closes "the briefing doesn't update" on the dashboard.
+ queryClient.invalidateQueries({
+ queryKey: queryKeys.dashboardSnapshot(),
+ });
},
});
diff --git a/src/components/settings/dashboard-layout-section.tsx b/src/components/settings/dashboard-layout-section.tsx
index 27b2fcad9..00488e222 100644
--- a/src/components/settings/dashboard-layout-section.tsx
+++ b/src/components/settings/dashboard-layout-section.tsx
@@ -204,6 +204,15 @@ export function DashboardLayoutSection({ id }: { id: string }) {
},
onSuccess: (saved) => {
queryClient.setQueryData(queryKeys.dashboardWidgets(), saved);
+ // v1.18.10 — the Startseite reads its layout (tile/chart visibility,
+ // order, comparison baseline, hero toggle) from the dashboard
+ // SNAPSHOT, not from this `dashboardWidgets` key. Without an
+ // invalidation the snapshot keeps its cached layout and the dashboard
+ // looks stale until a manual reload. Invalidate the snapshot so the
+ // next visit (or open tab) re-reads the saved layout immediately.
+ queryClient.invalidateQueries({
+ queryKey: queryKeys.dashboardSnapshot(),
+ });
setDraft(null);
toast.success(t("dashboard.layoutSaveSuccess"));
},
@@ -216,6 +225,11 @@ export function DashboardLayoutSection({ id }: { id: string }) {
},
onSuccess: (saved) => {
queryClient.setQueryData(queryKeys.dashboardWidgets(), saved);
+ // v1.18.10 — same snapshot invalidation as the save path so a reset
+ // to defaults reflects on the Startseite without a manual reload.
+ queryClient.invalidateQueries({
+ queryKey: queryKeys.dashboardSnapshot(),
+ });
setDraft(null);
toast.success(t("dashboard.layoutResetSuccess"));
},