[dws 技术债] chat message list 命令形态漂移:wukong 硬编码统一命令被 envelope 拆分覆盖,硬编码成死代码
复核 2026-06-29(dws v1.0.44):仍开。dws chat message list --user 12345678 实测仍 unknown flag: --user,证明 live 的 list 只认 --group,硬编码 list --user 分支仍是死代码。dws-wukong/wukong/products/chat.go 已涨到 3620 行(原文引用 905-970,行号需重新定位)。
- 分类(category): 技术债 / discovery-overlay 漂移
- 归属: dws 仓(
dws-wukong + dingtalk-workspace-cli envelope)
- 优先级: 中(不影响功能正确性,影响 UX 一致性与可维护性)
- 发现日期: 2026-06-06
- 关联: ISSUE-1(后端 peerUid gap)。注意:本条与 peerUid 报错无因果关系,修了它不解决 peerUid,见下。
现象
wukong 源码与 live 二进制对 chat message list 的实现形态不一致:
|
wukong 硬编码(源码意图) |
live 二进制(envelope 生效) |
| 命令形态 |
list 统一:--group/--user/--open-dingtalk-id 三选一 |
list 仅 --group;单聊拆成独立 list-direct |
| 单聊实现 |
Go 智能路由(isOpenDingTalkID 判 D 开头)+ callMCPTool |
compat shim,implemented:false 裸透传 |
| 谁生效 |
被影子覆盖,死代码 |
三层仲裁「envelope wins」胜出 |
证据:
- 源码
dws-wukong/wukong/products/chat.go:905-970 —— 统一 list,单聊分支 callMCPTool("list_individual_chat_message", {userId/openDingTalkId})。
- live 实测:
dws chat message list --user X → unknown flag(live 的 list 只认 --group),证明硬编码 list --user 分支从未执行。
- live
list-direct dry-run:kind:compat_invocation, implemented:false —— 纯 envelope 透传,未走 Go 逻辑。
影响
- 认知负担:源码读者以为
list --user 可用,实际不可用;help 文案与真实命令树不一致。
- 能力退化:硬编码里的
isOpenDingTalkID 智能路由(D 开头自动当 openDingTalkId)在 envelope 路径里丢失,compat shim 只做裸透传。
- 维护风险:一份逻辑两处实现且一处常驻死代码,后续改动易踩空。
修复方向(二选一,需先对齐 owner)
- (a) 收敛到 envelope:删除 wukong 硬编码
list 的单聊分支与 buildConversationTargetArgs 死代码,命令树以 envelope 为唯一权威;把智能路由逻辑下沉进 envelope/compat 的 pipeline。
- (b) 收敛到硬编码:让 envelope 不再拆分/覆盖
list,恢复统一命令形态,由 Go 实现兜底。
推荐 (a)——与 _docs/discovery-overlay-authority.md 「envelope 为 runtime 权威」的顶层设计对齐,减少硬编码面。
⚠️ 重要边界
本条不修复单聊查询报错。 wukong 硬编码与 envelope 两条路径都发 userId,都会撞 ISSUE-1 的 peerUid is required。命令形态收敛只解决 UX/可维护性,单聊能恢复可用必须靠 ISSUE-1 后端修复。两条 issue 颗粒度分清、各自闭环,勿混并。
验收标准
dws chat message list --help 与源码实现一致:要么 list 支持 --user 且实测可路由,要么源码删除该死代码分支、文案对齐 list-direct。无「文案说支持、实跑 unknown flag」的撕裂。
[dws 技术债]
chat message list命令形态漂移:wukong 硬编码统一命令被 envelope 拆分覆盖,硬编码成死代码dws-wukong+dingtalk-workspace-clienvelope)现象
wukong 源码与 live 二进制对
chat message list的实现形态不一致:list统一:--group/--user/--open-dingtalk-id三选一list仅--group;单聊拆成独立list-directisOpenDingTalkID判 D 开头)+callMCPToolimplemented:false裸透传证据:
dws-wukong/wukong/products/chat.go:905-970—— 统一list,单聊分支callMCPTool("list_individual_chat_message", {userId/openDingTalkId})。dws chat message list --user X→ unknown flag(live 的 list 只认--group),证明硬编码list --user分支从未执行。list-directdry-run:kind:compat_invocation, implemented:false—— 纯 envelope 透传,未走 Go 逻辑。影响
list --user可用,实际不可用;help 文案与真实命令树不一致。isOpenDingTalkID智能路由(D 开头自动当 openDingTalkId)在 envelope 路径里丢失,compat shim 只做裸透传。修复方向(二选一,需先对齐 owner)
list的单聊分支与buildConversationTargetArgs死代码,命令树以 envelope 为唯一权威;把智能路由逻辑下沉进 envelope/compat 的 pipeline。list,恢复统一命令形态,由 Go 实现兜底。推荐 (a)——与
_docs/discovery-overlay-authority.md「envelope 为 runtime 权威」的顶层设计对齐,减少硬编码面。本条不修复单聊查询报错。 wukong 硬编码与 envelope 两条路径都发
userId,都会撞 ISSUE-1 的peerUid is required。命令形态收敛只解决 UX/可维护性,单聊能恢复可用必须靠 ISSUE-1 后端修复。两条 issue 颗粒度分清、各自闭环,勿混并。验收标准
dws chat message list --help与源码实现一致:要么 list 支持--user且实测可路由,要么源码删除该死代码分支、文案对齐list-direct。无「文案说支持、实跑 unknown flag」的撕裂。