Skip to content

update() delegates fact changes to revise()

Status: accepted (2026-07-06), implemented

MemoryStore.update() rewrites fact/content/embedding in place, keeping memory_id, revision, and valid_from — which silently violates the append-only supersession invariant the lineage system (and the paper) is built on, and it can rewrite superseded historical rows. Decision: a content change via update() must delegate to revise() (new revision, old head superseded). In-place mutation stays allowed only for importance/metadata-only edits, which cannot corrupt lineage — and those must refuse to touch superseded rows. We chose delegation over deleting update() outright to keep the public API stable; the previous_versions JSON-metadata versioning becomes dead once this lands.