From 529c6a2bb56447fe93796111df3d4cc5a05fdd93 Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Sun, 7 Jun 2026 02:06:55 +0900 Subject: Slice 3 wave A: tabs model, model selector, cache delete, localStorage - features/tabs: pure tab-workspace reducer (create/select/close/setModel/ setTitle/deriveTitle, draft=null active) + injected-persistence runes store - features/chat: mutable per-tab model (setModel) + delta routing guard (ignore foreign conversationId) + ModelSelector.svelte + DaisyUI chat bubbles / composer (keeps streaming
keying fix) - features/conversation-cache: surface delete(conversationId) on the wrapper for tab-close local-forget - adapters/local-storage: generic injected JSON localStore (quota/corrupt-safe) Verified: svelte-check 0/0, vitest 273, biome clean, build ok. --- src/features/conversation-cache/cache.test.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/features/conversation-cache/cache.test.ts') diff --git a/src/features/conversation-cache/cache.test.ts b/src/features/conversation-cache/cache.test.ts index c68ed0d..89e81b8 100644 --- a/src/features/conversation-cache/cache.test.ts +++ b/src/features/conversation-cache/cache.test.ts @@ -171,3 +171,27 @@ describe("cache.evictIfOverBudget", () => { expect(evicted).toEqual([]); }); }); + +describe("cache.delete", () => { + it("removes the conversation from the store", async () => { + const store = createFakeStore(); + const cache = createConversationCache(store); + + await store.append("conv-1", [chunk(1), chunk(2)]); + await cache.delete("conv-1"); + + const stored = await store.load("conv-1"); + expect(stored).toEqual([]); + }); + + it("then load returns []", async () => { + const store = createFakeStore(); + const cache = createConversationCache(store); + + await cache.commit("conv-1", [chunk(1), chunk(2), chunk(3)]); + await cache.delete("conv-1"); + + const result = await cache.load("conv-1"); + expect(result).toEqual([]); + }); +}); -- cgit v1.2.3