Repository navigation
[Bug] 0.2.0 peer gate 静默禁用基础层 storage 行(profile 传递依赖劫持包解析)→ 工作区/会话列表全空 #8166
Chenfyy-mac
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
dsh-output-styles@0.6.16、@michengai/dsh-archive-manager@1.0.5、dsh-jev-tools@0.1.8、dsh-mcp-connector@0.2.59)症状(用户视角 = "更新后数据全丢了")
更新到 0.2.0-rc.1 后启动应用:
渲染器 console 里唯一的线索(启动后出现一次,之后 UI 静默空白):
根因链(已完整取证)
@deepseek-ai/dsh-storage-json@0.1.5-rc.2与@deepseek-ai/dsh-storage-domain@0.1.5-rc.2。它们是三方插件的传递依赖(pnpm why指向dsh-output-styles@0.6.16,该插件至今声明依赖 0.1.5-rc.2),profile 自己的dependencies里并没有这三个包。storage-json/storage-domain行按 Node 解析规则从 profile 树取包,拿到的是旧副本,而不是内核自带的新版副本。storage-domain是 workspace 注册表的存储层(ctx.storage.domain)。这两行被禁后,workspaceRegistry/sessionController等服务群全部无法激活 → 工作区列表与会话列表全空。最小组合即可复现:把 profile 的 bundles 削到只剩
@deepseek-ai/dsh-base+@deepseek-ai/dsh-web-app,症状不变——与三方插件行无关,只要传递依赖把旧版 infra 包带进了 profile 树就会触发。为什么用户几乎无法自查
disabling提示只写到宿主进程 stderr,桌面 App 不把它落盘(userData 里没有日志目录),GUI 里零报错。desktopprofile 名有硬编码拒绝,需要先复制为别名):我们当前的 workaround(已验证有效)
在 profile 里把三件套显式钉到当前内核版本(直接依赖在 hoisted 布局下赢得顶层槽位,组合行随之解析到新版):
重启后 8 个工作区 + 全部历史会话回归,渲染器零错误、零 disabling。
但这是"带病防守":下次内核大版本(如 0.3.0)时,这枚钉子自己会变成闸门的违规者,同样的全空症状会复发,需要再钉一次。
建议的修复方向(任一都能大幅降低伤害)
感谢这个闸门本身的立意(防崩溃/防数据损坏)——问题只在它与 profile 传递依赖的解析规则叠加后产生了"静默全空"的组合效应。
All reactions