diff --git a/lib/reducers/entry-reducer.js b/lib/reducers/entry-reducer.js
--- a/lib/reducers/entry-reducer.js
+++ b/lib/reducers/entry-reducer.js
@@ -13,6 +13,7 @@
 import _sortBy from 'lodash/fp/sortBy.js';
 import _union from 'lodash/fp/union.js';
 
+import { setClientDBStoreActionType } from '../actions/client-db-store-actions.js';
 import {
   fetchEntriesActionTypes,
   updateCalendarQueryActionTypes,
@@ -45,6 +46,7 @@
 import { stateSyncSpecs } from '../shared/state-sync/state-sync-specs.js';
 import { threadInFilterList } from '../shared/thread-utils.js';
 import { updateSpecs } from '../shared/updates/update-specs.js';
+import { isWebPlatform } from '../types/device-types.js';
 import type { RawEntryInfo, EntryStore } from '../types/entry-types.js';
 import type { BaseAction } from '../types/redux-types.js';
 import { type ClientEntryInconsistencyReportCreationRequest } from '../types/report-types.js';
@@ -62,10 +64,37 @@
   processUpdatesActionType,
 } from '../types/update-types.js';
 import { authoritativeKeyserverID } from '../utils/authoritative-keyserver.js';
+import { getConfig } from '../utils/config.js';
 import { dateString } from '../utils/date-utils.js';
-import { values } from '../utils/objects.js';
+import { getMessageForException } from '../utils/errors.js';
+import { assertObjectsAreEqual, values } from '../utils/objects.js';
 import { relyingOnAuthoritativeKeyserver } from '../utils/services-utils.js';
 
+function assertEntryStoresAreEqual(
+  processedEntryStore: EntryStore,
+  expectedEntryStore: EntryStore,
+  location: string,
+  onStateDifference?: (message: string) => mixed,
+) {
+  try {
+    assertObjectsAreEqual(
+      processedEntryStore,
+      expectedEntryStore,
+      `EntryStore - ${location}`,
+    );
+  } catch (e) {
+    console.log(
+      'Error processing EntryStore ops',
+      processedEntryStore,
+      expectedEntryStore,
+    );
+    const message = `Error processing EntryStore ops ${
+      getMessageForException(e) ?? '{no exception message}'
+    }`;
+    onStateDifference?.(message);
+  }
+}
+
 function daysToEntriesFromEntryInfos(
   entryInfos: $ReadOnlyArray<RawEntryInfo>,
 ): { [day: string]: string[] } {
@@ -167,6 +196,7 @@
   entryStore: EntryStore,
   action: BaseAction,
   newThreadInfos: RawThreadInfos,
+  onStateDifference?: (message: string) => mixed,
 ): {
   +entryStore: EntryStore,
   +entryStoreOperations: $ReadOnlyArray<EntryStoreOperation>,
@@ -683,6 +713,26 @@
       entryStoreOperations: [],
       reportCreationRequests: newInconsistencies,
     };
+  } else if (action.type === setClientDBStoreActionType) {
+    const entryInfosFromDB = action.payload.entries ?? {};
+    const newStore = {
+      entryInfos: entryInfosFromDB,
+      daysToEntries: daysToEntriesFromEntryInfos(values(entryInfosFromDB)),
+      lastUserInteractionCalendar,
+    };
+    if (!isWebPlatform(getConfig().platformDetails.platform)) {
+      assertEntryStoresAreEqual(
+        newStore,
+        entryStore,
+        action.type,
+        onStateDifference,
+      );
+    }
+    return {
+      entryStore,
+      entryStoreOperations: [],
+      reportCreationRequests: [],
+    };
   }
   return {
     entryStore,
diff --git a/lib/reducers/master-reducer.js b/lib/reducers/master-reducer.js
--- a/lib/reducers/master-reducer.js
+++ b/lib/reducers/master-reducer.js
@@ -55,7 +55,7 @@
   const { threadInfos } = threadStore;
 
   const { entryStore, reportCreationRequests: newEntryInconsistencies } =
-    reduceEntryInfos(state.entryStore, action, threadInfos);
+    reduceEntryInfos(state.entryStore, action, threadInfos, onStateDifference);
 
   const onStateDifferenceForStaff = (message: string) => {
     const isCurrentUserStaff = state.currentUserInfo?.id