@@ -11,9 +11,11 @@ import {
1111 getMemoryByHash ,
1212 getMemoryById ,
1313 getMemoryCount ,
14+ getProjectEmbeddings ,
1415 getStoredModelId ,
1516 insertMemory ,
1617 loadAllEmbeddings ,
18+ resetEmbeddingCacheForTests ,
1719 saveEmbedding ,
1820 searchMemoriesFTS ,
1921 updateMemoryContent ,
@@ -85,6 +87,7 @@ function makeMemoryDatabase(): Database {
8587}
8688
8789afterEach ( ( ) => {
90+ resetEmbeddingCacheForTests ( ) ;
8891 if ( db ) {
8992 db . close ( false ) ;
9093 }
@@ -233,6 +236,46 @@ describe("storage-memory", () => {
233236 expect ( updated ?. normalizedHash ) . toBe ( computeNormalizedHash ( "cache_ttl=10m" ) ) ;
234237 expect ( loadAllEmbeddings ( db , "/repo/project" ) ) . toEqual ( new Map ( ) ) ;
235238 } ) ;
239+
240+ it ( "#when cache-sensitive writes occur #then embedding cache invalidates updated project entries" , ( ) => {
241+ db = makeMemoryDatabase ( ) ;
242+
243+ const memory = insertMemory ( db , {
244+ projectPath : "/repo/project" ,
245+ category : "CONFIG_DEFAULTS" ,
246+ content : "cache_ttl=5m" ,
247+ } ) ;
248+ saveEmbedding ( db , memory . id , new Float32Array ( [ 0.1 , 0.2 ] ) , "local:model-a" ) ;
249+
250+ const initialCache = getProjectEmbeddings ( db , "/repo/project" ) ;
251+ expect ( Array . from ( initialCache . get ( memory . id ) ?? [ ] ) ) . toEqual (
252+ Array . from ( new Float32Array ( [ 0.1 , 0.2 ] ) ) ,
253+ ) ;
254+
255+ updateMemoryContent (
256+ db ,
257+ memory . id ,
258+ "cache_ttl=10m" ,
259+ computeNormalizedHash ( "cache_ttl=10m" ) ,
260+ ) ;
261+
262+ const cacheAfterUpdate = getProjectEmbeddings ( db , "/repo/project" ) ;
263+ expect ( cacheAfterUpdate . has ( memory . id ) ) . toBeFalse ( ) ;
264+
265+ const secondMemory = insertMemory ( db , {
266+ projectPath : "/repo/project" ,
267+ category : "CONFIG_DEFAULTS" ,
268+ content : "cache_ttl=15m" ,
269+ } ) ;
270+ saveEmbedding ( db , secondMemory . id , new Float32Array ( [ 0.3 , 0.4 ] ) , "local:model-a" ) ;
271+
272+ const cacheAfterInsert = getProjectEmbeddings ( db , "/repo/project" ) ;
273+ expect ( Array . from ( cacheAfterInsert . keys ( ) ) ) . toEqual ( [ secondMemory . id ] ) ;
274+
275+ deleteMemory ( db , secondMemory . id ) ;
276+
277+ expect ( getProjectEmbeddings ( db , "/repo/project" ) ) . toEqual ( new Map ( ) ) ;
278+ } ) ;
236279 } ) ;
237280
238281 describe ( "#given FTS search" , ( ) => {
0 commit comments