{"record":{"id":"2b143e76bc8e4cc6","repo":"headroomlabs-ai/headroom","slug":"memory-old-memory-id-not-found-2b143e","errorCode":null,"errorMessage":"Memory {old_memory_id} not found","messagePattern":"Memory (.+?) not found","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"headroom/memory/core.py","lineNumber":563,"sourceCode":"            auto_embed: Whether to embed the new content.\n\n        Returns:\n            The new Memory that supersedes the old one.\n\n        Raises:\n            ValueError: If old memory not found.\n\n        Example:\n            # User's preference changed\n            new_mem = await system.supersede(\n                old_memory.id,\n                \"User now prefers JavaScript over Python\",\n            )\n        \"\"\"\n        # Get old memory\n        old_memory = await self._store.get(old_memory_id)\n        if old_memory is None:\n            raise ValueError(f\"Memory {old_memory_id} not found\")\n\n        # Create new memory with same scope\n        new_memory = Memory(\n            content=new_content,\n            user_id=old_memory.user_id,\n            session_id=old_memory.session_id,\n            agent_id=old_memory.agent_id,\n            turn_id=old_memory.turn_id,\n            importance=old_memory.importance,\n            entity_refs=old_memory.entity_refs.copy(),\n            metadata=old_memory.metadata.copy(),\n        )\n\n        # Embed new content\n        if auto_embed:\n            new_memory.embedding = await self._embedder.embed(new_content)\n\n        # Perform supersession in store","sourceCodeStart":545,"sourceCodeEnd":581,"githubUrl":"https://github.com/headroomlabs-ai/headroom/blob/322425c43bffde1ed0b64fecf3cf5951565dd82b/headroom/memory/core.py#L545-L581","documentation":"ValueError raised by MemorySystem.supersede() when the backing store's get(old_memory_id) returns None. Superseding marks a memory as replaced by creating a new memory that inherits its scope and invalidating the old one, so the old memory must exist first.","triggerScenarios":"await system.supersede(old_memory_id, 'new content') where old_memory_id was already deleted, superseded, or never existed; also after a store reset while the app still holds old ids.","commonSituations":"Preference-change flows where the old memory expired or was garbage-collected; double-processing the same event superseding twice; ids from a previous environment (dev id used against prod store).","solutions":["Verify the old memory exists (await system.get(old_memory_id)) and skip/save-fresh if it is gone","Make supersede flows idempotent: treat 'not found' as 'nothing to supersede' and just create the new memory","Re-fetch ids at the moment of supersede instead of caching them across sessions"],"exampleFix":"# before\nnew_mem = await system.supersede(old_id, 'User now prefers JS')\n# ValueError: Memory {old_id} not found\n\n# after\nold = await system.get(old_id)\nif old is None:\n    new_mem = await system.save('User now prefers JS', user_id=user_id)\nelse:\n    new_mem = await system.supersede(old_id, 'User now prefers JS')","handlingStrategy":"validation","validationCode":"old = await system.get(old_memory_id)\nif old is None:\n    # nothing to supersede; create fresh instead\n    new_mem = await system.save(new_content, user_id=user_id)\nelse:\n    new_mem = await system.supersede(old_memory_id, new_content)","typeGuard":null,"tryCatchPattern":"try:\n    new_mem = await system.supersede(old_memory_id, new_content)\nexcept ValueError as e:\n    if 'not found' in str(e):\n        new_mem = await system.save(new_content, user_id=user_id)\n    else:\n        raise","preventionTips":["Design supersede flows idempotently: missing old memory degrades to a plain save","Fetch ids fresh instead of caching across sessions/resets","Guard against double-processing events that supersede the same memory twice"],"tags":["python","memory","not-found","supersede","valueerror","validation"],"backgroundTag":null,"analyzedSha":"322425c43bffde1ed0b64fecf3cf5951565dd82b","analyzedAt":"2026-08-15T01:03:05.481Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}