{"record":{"id":"f2c416e3eedfefa8","repo":"bytedance/deer-flow","slug":"agent-name-is-required-to-migrate-legacy-facts","errorCode":null,"errorMessage":"agent_name is required to migrate legacy facts","messagePattern":"agent_name is required to migrate legacy facts","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"backend/packages/harness/deerflow/agents/memory/backends/deermem/deermem/core/storage.py","lineNumber":1042,"sourceCode":"        for notification_agent, notifications in migration_notifications:\n            self._dispatch_retrieval_notifications(notifications, user_id=user_id, agent_name=notification_agent)\n        document = self._read_document(path, agent_name, user_id=user_id)\n        signature = self._scope_signature(path, agent_name)\n        with self._cache_lock:\n            self._memory_cache[key] = (copy.deepcopy(document), signature)\n        if _rebuild_retrieval and agent_name is not None and self._retrieval is not None:\n            self.rebuild_index([{\"userId\": user_id, \"agentName\": agent_name}])\n        return copy.deepcopy(document)\n\n    def migrate(\n        self,\n        *,\n        user_id: str | None = None,\n        agent_name: str | None = None,\n    ) -> dict[str, Any]:\n        \"\"\"Run the idempotent version-driven migration for one exact scope.\"\"\"\n        if agent_name is None:\n            raise ValueError(\"agent_name is required to migrate legacy facts\")\n        path = self._get_memory_file_path(agent_name, user_id=user_id)\n        key = self._cache_key(agent_name, user_id=user_id)\n        with self._scope_lock(key), _process_file_lock(path.parent / \".memory.lock\", float(getattr(self._config, \"file_lock_timeout_seconds\", 10))):\n            self._recover_if_needed(path)\n            migrated, from_version, notifications = self._migrate_locked(path, agent_name, user_id=user_id, include_global=True)\n        self._dispatch_retrieval_notifications(notifications, user_id=user_id, agent_name=agent_name)\n        document = self.reload(agent_name, user_id=user_id, _rebuild_retrieval=False)\n        return {\n            \"migrated\": migrated,\n            \"fromVersion\": from_version,\n            \"toVersion\": document.get(\"version\"),\n            \"revision\": document.get(\"revision\", 0),\n        }\n\n    def save(\n        self,\n        memory_data: dict[str, Any],\n        agent_name: str | None = None,","sourceCodeStart":1024,"sourceCodeEnd":1060,"githubUrl":"https://github.com/bytedance/deer-flow/blob/1dd6ba1acb03700589994b0366c5d1c7d05e2eff/backend/packages/harness/deerflow/agents/memory/backends/deermem/deermem/core/storage.py#L1024-L1060","documentation":"Error \"agent_name is required to migrate legacy facts\" thrown in bytedance/deer-flow.","triggerScenarios":"Thrown at backend/packages/harness/deerflow/agents/memory/backends/deermem/deermem/core/storage.py:1042 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide agent_name to the migrate call so facts can be scoped.","Migrate per-agent by iterating known agent names."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"1dd6ba1acb03700589994b0366c5d1c7d05e2eff","analyzedAt":"2026-08-14T21:20:34.804Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}