{"record":{"id":"c6cc9311970fa434","repo":"agentscope-ai/agentscope","slug":"record-user-id-does-not-match-the-given-user-id-c6cc93","errorCode":null,"errorMessage":"record.user_id does not match the given user_id.","messagePattern":"record\\.user_id does not match the given user_id\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/agentscope/app/storage/_sql/_storage.py","lineNumber":1717,"sourceCode":"        in one transaction (see :meth:`_delete_team_impl`).\n        \"\"\"\n        async with self._session() as sess:\n            ok = await self._delete_team_impl(sess, user_id, team_id)\n            await sess.commit()\n        return ok\n\n    # ------------------------------------------------------------------\n    # Knowledge bases\n    # ------------------------------------------------------------------\n\n    async def upsert_knowledge_base(\n        self,\n        user_id: str,\n        record: KnowledgeBaseRecord,\n    ) -> KnowledgeBaseRecord:\n        \"\"\"Create or update a KB record; enforces ``record.user_id``.\"\"\"\n        if record.user_id != user_id:\n            raise ValueError(\n                \"record.user_id does not match the given user_id.\",\n            )\n        await self._write_row(KnowledgeBaseRow, record)\n        return record\n\n    async def get_knowledge_base(\n        self,\n        user_id: str,\n        knowledge_base_id: str,\n    ) -> KnowledgeBaseRecord | None:\n        \"\"\"One KB; owner-scoped.\"\"\"\n        async with self._session() as sess:\n            row = await sess.get(KnowledgeBaseRow, knowledge_base_id)\n        if row is None or row.user_id != user_id:\n            return None\n        return _to_record(row, KnowledgeBaseRecord)\n\n    async def list_knowledge_bases(","sourceCodeStart":1699,"sourceCodeEnd":1735,"githubUrl":"https://github.com/agentscope-ai/agentscope/blob/e90f1c7592896cc95f6e5ee506194f533378247d/src/agentscope/app/storage/_sql/_storage.py#L1699-L1735","documentation":"Raised by SQLStorage.upsert_knowledge_base when the user_id argument and record.user_id differ. The KB record's owner must match the caller-supplied user id to prevent cross-user writes.","triggerScenarios":"Calling upsert_knowledge_base(user_id, record) with record.user_id unset (None) or set to another user's id.","commonSituations":"Creating a KnowledgeBaseRecord without setting user_id and expecting the storage to fill it in; copying KB records between users; refactors that changed where user_id is populated.","solutions":["Set record.user_id = user_id before calling upsert_knowledge_base","If the record is intentionally being transferred, update user_id explicitly first","Audit serialization/deserialization of KB records to ensure user_id survives round-trips"],"exampleFix":"// before\nkb = KnowledgeBaseRecord(name=\"docs\")\nawait storage.upsert_knowledge_base(uid, kb)\n// after\nkb = KnowledgeBaseRecord(name=\"docs\", user_id=uid)\nawait storage.upsert_knowledge_base(uid, kb)","handlingStrategy":"validation","validationCode":"if record.user_id != user_id:\\n    record.user_id = user_id  # or raise before hitting storage","typeGuard":"def owned_by(rec, uid: str) -> bool:\\n    return rec.user_id == uid","tryCatchPattern":"try:\\n    await storage.upsert_knowledge_base(uid, rec)\\nexcept ValueError as e:\\n    if \\\"user_id does not match\\\" in str(e): rec.user_id = uid; await storage.upsert_knowledge_base(uid, rec)\\n    else: raise","preventionTips":["Always construct records with user_id set from the request context","Unit-test ownership fields in storage wrappers"],"tags":["knowledge-base","ownership-mismatch","validation"],"backgroundTag":"ownership-mismatch","analyzedSha":"e90f1c7592896cc95f6e5ee506194f533378247d","analyzedAt":"2026-08-28T18:24:12.087Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}