Replies: 1 comment
|
补充一条新实证(2026-09-07 复现闭环):双实例共享 workspace.json 的 last-write-wins 竞争,会静默抹掉另一实例刚挂好的组。 现象:同一天下午在 web 端(3080)创建的 2 个会话,创建时 attachSession 成功、写盘正常;之后壳端(43120)因新建会话触发写盘,用壳的旧内存整文件覆盖,把 web 端挂的 2 个成员从磁盘抹掉。重启后这 2 个会话落入「未分组」;同一时间窗口壳端创建的会话全部存活(对照组铁证:同 cwd、同创建方式、仅实例不同,一活一丢)。 机制链:
另外已给 session.create 的 cwd-only 分支补入口兜底: |
0 replies
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现象
根因(日志 + 源码实锚)
~/.dsh/storages/workspace.json里工作区记录的path与磁盘真实目录名大小写不一致。本机实例(外部编辑账本时写错的典型现场):…/Deepseek Harness/Tests,磁盘真身…/Deepseek Harness/tests…/workspace/DSH Projects,磁盘真身…/Workspace/DSH Projects应用内部把会话 cwd 与工作区 path 都经 realpath 规范化为磁盘真身大小写后做严格相等比对,于是:
WorkspaceEntity.sessionIdsgetter 按sessionPath(id) === record.path过滤 → 成员被过滤出分组,每次启动reportFilteredCandidates都会打 warn(原文示例):attachSession同样硬校验 → 新会话挂接静默失败(客户端无任何错误提示)APFS 默认大小写不敏感,
stat()对任何大小写拼写都成功,整条链路只有注册表比对这一层大小写敏感,且失败仅有一条日志 warn——用户侧表现就是"分组空了/会话丢了/加不进分组",实际数据都在本机恢复配方(已验证)
把记录
path对齐磁盘真身大小写 + 把漏登记的会话 id 补回sessionIds+ 重启持有实例,分组即恢复(4 条老会话带标题归位、新建会话正常入组)。附带三个相关发现
session.create的workspaceId与cwd互斥,只带 cwd 创建的会话完全不执行 attach——经 spawn 类工具按 cwd 创建的会话永远留在「未分组」;且部分返回消息会提示"已挂接工作区 X",易误导(实际未登记)initialized=false时跑一次,之后永不重扫——磁盘上已存在的会话不会被自动找回,只能靠创建时入组或手工修账建议
path做大小写不敏感比较;或启动时检测记录 path 与磁盘真名的大小写差异,自动对齐并 warnreportFilteredCandidates的过滤情况在客户端可见(比如分组旁一个小标记),用户就不会以为数据丢了All reactions