fix(app): invalidate incompatible replica cache

Todo timeline entries gained required activity metadata in beta.1 while the persisted cache format remained unchanged. Reject version 3 snapshots so upgrades hydrate authoritative state instead of rendering legacy rows.
This commit is contained in:
Mohamed Boudra
2026-08-12 23:07:14 +02:00
parent 4426a6b11f
commit 1b887e534b
2 changed files with 5 additions and 5 deletions
@@ -272,7 +272,7 @@ describe("ReplicaCache", () => {
version: number;
hosts: Array<{ timeline: Record<string, unknown> | null }>;
};
expect(persisted.version).toBe(3);
expect(persisted.version).toBe(4);
expect(Object.keys(persisted.hosts[0]?.timeline ?? {}).sort()).toEqual(["agentId", "items"]);
});
@@ -331,12 +331,12 @@ describe("ReplicaCache", () => {
expect(Object.keys(useSessionStore.getState().sessions).sort()).toEqual(["host-a", "host-c"]);
});
it("rejects version 1 cache data and overwrites it on flush", async () => {
it("rejects version 3 cache data and overwrites it on flush", async () => {
const storage = new MemoryStorage();
storage.values.set(
"@paseo:replica-cache",
JSON.stringify({
version: 1,
version: 3,
hosts: [
{
serverId: SERVER_ID,
@@ -361,7 +361,7 @@ describe("ReplicaCache", () => {
expect(useSessionStore.getState().sessions[SERVER_ID]).toBeUndefined();
expect(JSON.parse(storage.values.get("@paseo:replica-cache") ?? "null")).toEqual({
version: 3,
version: 4,
hosts: [],
});
});
@@ -23,7 +23,7 @@ import { isUnreconciledLocalUserMessage, type StreamItem } from "@/types/stream"
import { normalizeAgentSnapshot } from "@/utils/agent-snapshots";
const STORAGE_KEY = "@paseo:replica-cache";
const CACHE_VERSION = 3;
const CACHE_VERSION = 4;
const PERSIST_DELAY_MS = 750;
const MAX_TIMELINE_ITEMS = 50;
const MAX_CACHE_BYTES = 1024 * 1024;