From 6efdf617702cd5e8579d3ef7741b2e90b87710f5 Mon Sep 17 00:00:00 2001 From: verify-sim Date: Sat, 5 Sep 2026 21:47:18 +0800 Subject: [PATCH] fix(memory): make observation removal atomic and invalidate stale indexes --- CHANGELOG.md | 7 + dist/knowledge-graph.d.ts.map | 2 +- dist/knowledge-graph.js | 45 ++++--- dist/knowledge-graph.js.map | 2 +- src/knowledge-graph.ts | 63 +++++---- .../observation-removal-integrity.test.ts | 123 ++++++++++++++++++ 6 files changed, 192 insertions(+), 50 deletions(-) create mode 100644 tests/core/observation-removal-integrity.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 68e4bc26..51064041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to MeMesh are documented here. ## [Unreleased] +### Fixed + +- Removing an observation now updates stored content and search indexes in one + transaction and invalidates its obsolete vector. Index failures roll back the + removal instead of leaving partially updated memory. Editing an archived + entity's observations no longer recreates its FTS entry. + ## [4.8.5] — 2026-09-05 ### Added diff --git a/dist/knowledge-graph.d.ts.map b/dist/knowledge-graph.d.ts.map index 3f2968e6..0f547ff2 100644 --- a/dist/knowledge-graph.d.ts.map +++ b/dist/knowledge-graph.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/knowledge-graph.js b/dist/knowledge-graph.js index 366592d3..8eaef9a3 100644 --- a/dist/knowledge-graph.js +++ b/dist/knowledge-graph.js @@ -523,26 +523,31 @@ export class KnowledgeGraph { return { archived: true, name, previousStatus: row.status }; } removeObservation(entityName, observationContent) { - const row = this.db - .prepare('SELECT id, title FROM entities WHERE name = ?') - .get(entityName); - if (!row) - return { removed: false, remainingObservations: 0, entityFound: false }; - const prevObs = this.db - .prepare('SELECT content FROM observations WHERE entity_id = ? ORDER BY id') - .all(row.id); - const prevObsText = joinIndexedObservations(prevObs.map((o) => o.content)); - const deleteResult = this.db - .prepare('DELETE FROM observations WHERE entity_id = ? AND content = ?') - .run(row.id, observationContent); - if (deleteResult.changes === 0) { - return { removed: false, remainingObservations: prevObs.length, entityFound: true }; - } - this.rebuildFts(row.id, entityName, prevObsText, row.title); - const remaining = this.db - .prepare('SELECT COUNT(*) as c FROM observations WHERE entity_id = ?') - .get(row.id); - return { removed: true, remainingObservations: remaining.c, entityFound: true }; + return this.db.transaction(() => { + const row = this.db + .prepare('SELECT id, title, status FROM entities WHERE name = ?') + .get(entityName); + if (!row) + return { removed: false, remainingObservations: 0, entityFound: false }; + const prevObs = this.db + .prepare('SELECT content FROM observations WHERE entity_id = ? ORDER BY id') + .all(row.id); + const prevObsText = joinIndexedObservations(prevObs.map((o) => o.content)); + const deleteResult = this.db + .prepare('DELETE FROM observations WHERE entity_id = ? AND content = ?') + .run(row.id, observationContent); + if (deleteResult.changes === 0) { + return { removed: false, remainingObservations: prevObs.length, entityFound: true }; + } + if (row.status !== 'archived') { + this.rebuildFts(row.id, entityName, prevObsText, row.title); + } + removeVectorRow(this.db, row.id); + const remaining = this.db + .prepare('SELECT COUNT(*) as c FROM observations WHERE entity_id = ?') + .get(row.id); + return { removed: true, remainingObservations: remaining.c, entityFound: true }; + }).immediate(); } deleteEntity(name) { const row = this.db diff --git a/dist/knowledge-graph.js.map b/dist/knowledge-graph.js.map index 8dc569b7..13f0993a 100644 --- a/dist/knowledge-graph.js.map +++ b/dist/knowledge-graph.js.map @@ -1 +1 @@ -{"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/knowledge-graph.ts b/src/knowledge-graph.ts index 9ae1a2d7..0b7ea3cd 100644 --- a/src/knowledge-graph.ts +++ b/src/knowledge-graph.ts @@ -1150,37 +1150,44 @@ export class KnowledgeGraph { entityName: string, observationContent: string ): { removed: boolean; remainingObservations: number; entityFound: boolean } { - const row = this.db - .prepare('SELECT id, title FROM entities WHERE name = ?') - .get(entityName) as { id: number; title: string | null } | undefined; - - // `entityFound` exists because "no such entity" and "that text does not - // match any observation" are different problems with opposite next steps, - // and the caller could not tell them apart: both arrived as - // `removed: false`, and the CLI printed "Entity not found" for the second - // one — sending the user to re-create a memory that was sitting right there. - if (!row) return { removed: false, remainingObservations: 0, entityFound: false }; - - const prevObs = this.db - .prepare('SELECT content FROM observations WHERE entity_id = ? ORDER BY id') - .all(row.id) as { content: string }[]; - const prevObsText = joinIndexedObservations(prevObs.map((o) => o.content)); - - const deleteResult = this.db - .prepare('DELETE FROM observations WHERE entity_id = ? AND content = ?') - .run(row.id, observationContent); - - if (deleteResult.changes === 0) { - return { removed: false, remainingObservations: prevObs.length, entityFound: true }; - } + // Read the indexed text under the same write lock as the deletion: FTS + // and vectors must not outlive the observation they describe. + return this.db.transaction(() => { + const row = this.db + .prepare('SELECT id, title, status FROM entities WHERE name = ?') + .get(entityName) as { id: number; title: string | null; status: string } | undefined; + + // `entityFound` exists because "no such entity" and "that text does not + // match any observation" are different problems with opposite next steps, + // and the caller could not tell them apart: both arrived as + // `removed: false`, and the CLI printed "Entity not found" for the second + // one — sending the user to re-create a memory that was sitting right there. + if (!row) return { removed: false, remainingObservations: 0, entityFound: false }; + + const prevObs = this.db + .prepare('SELECT content FROM observations WHERE entity_id = ? ORDER BY id') + .all(row.id) as { content: string }[]; + const prevObsText = joinIndexedObservations(prevObs.map((o) => o.content)); + + const deleteResult = this.db + .prepare('DELETE FROM observations WHERE entity_id = ? AND content = ?') + .run(row.id, observationContent); + + if (deleteResult.changes === 0) { + return { removed: false, remainingObservations: prevObs.length, entityFound: true }; + } - this.rebuildFts(row.id, entityName, prevObsText, row.title); + if (row.status !== 'archived') { + this.rebuildFts(row.id, entityName, prevObsText, row.title); + } + removeVectorRow(this.db, row.id); - const remaining = this.db - .prepare('SELECT COUNT(*) as c FROM observations WHERE entity_id = ?') - .get(row.id) as { c: number }; + const remaining = this.db + .prepare('SELECT COUNT(*) as c FROM observations WHERE entity_id = ?') + .get(row.id) as { c: number }; - return { removed: true, remainingObservations: remaining.c, entityFound: true }; + return { removed: true, remainingObservations: remaining.c, entityFound: true }; + }).immediate(); } /** diff --git a/tests/core/observation-removal-integrity.test.ts b/tests/core/observation-removal-integrity.test.ts new file mode 100644 index 00000000..92dd82be --- /dev/null +++ b/tests/core/observation-removal-integrity.test.ts @@ -0,0 +1,123 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { createRequire } from 'node:module'; +import { closeDatabase, openDatabase } from '../../src/db.js'; +import { KnowledgeGraph } from '../../src/knowledge-graph.js'; + +const require = createRequire(import.meta.url); +let dir: string; +let db: ReturnType; +let kg: KnowledgeGraph; + +beforeEach(() => { + dir = fs.mkdtempSync(path.join(os.tmpdir(), 'memesh-observation-integrity-')); + db = openDatabase(path.join(dir, 'graph.db')); + db.enableLoadExtension(true); + try { require('sqlite-vec').load(db); } finally { db.enableLoadExtension(false); } + db.exec('DROP TABLE IF EXISTS entities_vec'); + db.exec('CREATE VIRTUAL TABLE entities_vec USING vec0(embedding float[3])'); + kg = new KnowledgeGraph(db); + kg.createEntity('edited', 'note', { title: 'gazelle title', observations: ['obsolete quokka', 'retained wombat'] }); + kg.createEntity('untouched', 'note', { observations: ['independent ibex'] }); + for (const name of ['edited', 'untouched']) { + const id = kg.getEntity(name)!.id; + db.prepare('INSERT INTO entities_vec(rowid, embedding) VALUES (?, ?)') + .run(BigInt(id), Buffer.from(new Float32Array([1, 0, 0]).buffer)); + } +}); + +afterEach(() => { + closeDatabase(); + fs.rmSync(dir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); +}); + +function vectorIds(): number[] { + return (db.prepare('SELECT rowid AS id FROM entities_vec ORDER BY rowid').all() as { id: number }[]) + .map(row => row.id); +} + +function failingGraph(failOn: RegExp): KnowledgeGraph { + return new KnowledgeGraph(new Proxy(db, { + get(target, prop) { + if (prop === 'prepare') return (sql: string) => { + if (failOn.test(sql)) throw new Error('injected index failure'); + return target.prepare(sql); + }; + const value = Reflect.get(target, prop); + return typeof value === 'function' ? value.bind(target) : value; + }, + })); +} + +describe('observation removal integrity', () => { + it('invalidates only the obsolete vector and keeps remaining text searchable', () => { + expect(vectorIds()).toHaveLength(2); + expect(kg.removeObservation('edited', 'obsolete quokka')).toEqual({ + removed: true, remainingObservations: 1, entityFound: true, + }); + expect(kg.getEntity('edited')!.observations).toEqual(['retained wombat']); + expect(kg.search('quokka')).toEqual([]); + expect(kg.search('wombat').map(e => e.name)).toEqual(['edited']); + expect(kg.search('gazelle').map(e => e.name)).toEqual(['edited']); + expect(kg.search('ibex').map(e => e.name)).toEqual(['untouched']); + expect(vectorIds()).toEqual([kg.getEntity('untouched')!.id]); + }); + + it.each([ + ['FTS rebuild', /INSERT INTO entities_fts \(rowid/], + ['vector deletion', /DELETE FROM entities_vec/], + ])('rolls back observations and both indexes on %s failure', (_label, failOn) => { + const before = kg.getEntity('edited')!.observations; + const beforeVectors = vectorIds(); + expect(() => failingGraph(failOn).removeObservation('edited', 'obsolete quokka')) + .toThrow('injected index failure'); + expect(kg.getEntity('edited')!.observations).toEqual(before); + expect(kg.search('quokka').map(e => e.name)).toEqual(['edited']); + expect(kg.search('wombat').map(e => e.name)).toEqual(['edited']); + expect(vectorIds()).toEqual(beforeVectors); + }); + + it('does not touch indexes when the observation or entity is missing', () => { + const graph = failingGraph(/INSERT INTO entities_fts|DELETE FROM entities_vec/); + expect(graph.removeObservation('edited', 'absent')).toEqual({ + removed: false, remainingObservations: 2, entityFound: true, + }); + expect(graph.removeObservation('missing', 'absent')).toEqual({ + removed: false, remainingObservations: 0, entityFound: false, + }); + expect(vectorIds()).toHaveLength(2); + expect(kg.search('quokka').map(e => e.name)).toEqual(['edited']); + }); + + it('removes the final observation but preserves the entity title', () => { + kg.removeObservation('edited', 'obsolete quokka'); + expect(kg.removeObservation('edited', 'retained wombat')).toEqual({ + removed: true, remainingObservations: 0, entityFound: true, + }); + expect(kg.getEntity('edited')!.observations).toEqual([]); + expect(kg.search('wombat')).toEqual([]); + expect(kg.search('gazelle').map(e => e.name)).toEqual(['edited']); + expect(vectorIds()).toEqual([kg.getEntity('untouched')!.id]); + }); + + it('works without the optional vector table', () => { + db.exec('DROP TABLE entities_vec'); + expect(kg.removeObservation('edited', 'obsolete quokka').removed).toBe(true); + expect(kg.search('quokka')).toEqual([]); + expect(kg.search('wombat').map(e => e.name)).toEqual(['edited']); + }); + + it('does not reindex an archived entity', () => { + const id = kg.getEntity('edited')!.id; + kg.archiveEntity('edited'); + expect(db.prepare('SELECT rowid FROM entities_fts WHERE rowid = ?').all(id)).toEqual([]); + expect(kg.removeObservation('edited', 'obsolete quokka').removed).toBe(true); + expect(db.prepare('SELECT rowid FROM entities_fts WHERE rowid = ?').all(id)).toEqual([]); + expect(db.prepare('SELECT status FROM entities WHERE name = ?').get('edited')) + .toMatchObject({ status: 'archived' }); + expect(kg.search('wombat')).toEqual([]); + expect(vectorIds()).toEqual([kg.getEntity('untouched')!.id]); + }); +});