examples/openclaw-plugin/openclaw-multi-tenant-test-report.md
本轮测试围绕 examples/openclaw-plugin 的多租户与会话身份透传能力展开,重点验证以下目标:
api_key 与 trusted 两种服务认证模式下的请求头行为是否正确。viking://user/memories 与 viking://user/memories 正确展开为 canonical URI。senderId / requesterSenderId 是否能够稳定映射为会话消息的 peer_id。afterTurn 与 memory_store 两条写会话路径的身份语义是否一致。在 OpenClaw 之前,先通过 OpenViking HTTP API 直接验证服务端状态与数据面:
curl 调用 /health、/api/v1/system/status、/api/v1/search/findviking://user/default/memoriesviking://user/default/skillsviking://resourcesreindex,确保召回验证基线可用通过真实 OpenClaw gateway 与 OpenViking 后端联调验证:
19950:用于 api_key 模式与用户空间验证19960:用于 trusted 模式与 peer_id 验证before_prompt_buildfind POSTsession message POSTsession commit POST针对 peer_id 透传行为,使用真实机器人私聊/群聊场景复核:
peer_id 的稳定映射peer_idmemory_store 路径是否能通过 requesterSenderId 写出 peer_idapi_keytrustedtrusted + root_api_keyviking://user/<user_id>/memoriesviking://user/<user_id>/skillsviking://resourcesafterTurn.runtimeContext.senderId -> peer_idmemory_store.requesterSenderId -> peer_idpeer_id| 维度 | case | 结果 | 说明 |
|---|---|---|---|
api_key | api_key_without_key_dev | 通过 | 不再合成 default/default 租户 header |
api_key | personal_token_default | 通过 | 命中 DEFAULT_USER_TOKEN_19950 |
api_key | runtime_peer_worker | 通过 | runtime agent 只参与 peer/session metadata |
| namespace | user_memory_token | 通过 | user memory 空间命中正确 |
| namespace | user_skill_token | 通过 | user skill 空间命中正确 |
| namespace | resource_token | 通过 | shared resource 空间命中正确 |
trusted | trusted_without_key | 通过 | 无 key trusted 路径正常 |
trusted | trusted_with_key | 通过 | 带 key trusted 路径正常 |
trusted | trusted_root_key_required | 通过 | 不带 key 被服务侧拒绝 |
trusted | trusted_root_key_optional_ok | 通过 | 带 root key 正常 |
senderId -> peer_id | senderid_trusted_user_msg | 通过 | telegram:12345 -> telegram_12345 |
senderId -> peer_id | senderid_trusted_blank | 通过 | peer_id:null |
senderId -> peer_id | senderid_sanitize_symbols | 通过 | wx/user-01@abc -> wx_user-01_abc |
| 真实机器人 | 私聊 sender 映射 | 通过 | sender 稳定映射到真实 peer_id |
| 真实机器人 | 群聊多成员 peer_id | 通过 | 不同成员落不同 peer_id |
memory_store | requesterSenderId -> peer_id | 通过 | memory_store 已使用 requesterSenderId 写出真实 peer_id |
| 项目 | 状态 | 说明 |
|---|---|---|
user_token_main_default | 已打通 | 曾出现一次回答少 _19950,属于回答精度问题,不是链路问题 |
| 真实机器人最终回复 | 非插件问题 | 群聊/私聊中出现的 Something went wrong... 已定位在 OpenClaw 工具结果回填阶段,与 OpenViking 插件链路无关 |
peer_id 透传能力已完成联调验证。afterTurn 路径可通过 runtimeContext.senderId 正确写出 peer_id。memory_store 路径在工具上下文中无法直接读取 senderId,但可稳定通过 requesterSenderId 写出 peer_id。peer_id,且 assistant message 保持 peer_id:null。api_key + USER 的 peer_id 语义收紧,应补充一条显式兼容说明或服务端协同约束。memory_store 与 afterTurn 跨会话一致性复测