跳转至

共享守护进程所有者化身保留

一个降级守护进程提供者创建两个所有者解析器,并共享一个路由映射。在已认证守护进程身份变化时,附加解析器首先移除该守护进程的路由。随后,存活解析器看不到对应路由,并此前遗留了其私有会话到化身条目。使用新发现的会话 ID 重复替换会使该私有映射在整个降级提供者生命周期内不断增长。

该修复会移除在提供者失效后共享路由缺失的私有化身条目。它保留所有剩余路由,包括另一提供者的活动会话和同 ID 后继。它不改变进程存活、不停止远程工作、不改变线协议,也不依赖 git 工作区。

实际所有权与触发

  • src/main/daemon/daemon-provider-init.ts:123 为 degraded-new-pty-fallback 选择 DegradedDaemonPtyProvider;启动发现运行在第 139 行。
  • src/main/daemon/degraded-daemon-owner-recovery.ts:15 使用同一个映射构造两个解析器;公共发现和存活探测填充其私有索引。启动协调也可以记录两条路由。
  • src/main/daemon/degraded-daemon-owner-recovery.ts:70 订阅每个守护进程的身份发布,并在存活解析器之前使附加解析器失效。
  • src/main/daemon/daemon-pty-connection-lifecycle.ts:41 仅当不同的已认证身份替换先前身份后才发布。重复观察同一身份不会使任何内容退役。
  • src/main/daemon/daemon-pty-daemon-recovery.ts:268 可以替换守护进程,同时保留其适配器和降级提供者。
  • src/main/daemon/daemon-session-owner-resolution.ts:44 执行失效操作和新的私有元数据修剪。

这是本地桌面主进程降级提供者路径。失去 SSH 联系不是其退役触发器。以下条目计数不能证明保留字节数、RSS、OOM 或 #19831 的因果关系。

有界实际源码证明

测试夹具使用实际的降级提供者、恢复控制器、解析器、守护进程适配器清单、已认证身份发布和直接附加实现。只有有限的已认证传输回复和空回退提供者保持惰性;它不启动任何原生 PTY、套接字、网络连接或应用窗口。它不依赖垃圾回收时序或永不完成的 Promise。

32 个周期中的每一个都发现一个新的当前守护进程会话,通过公共调用填充两个解析器,观察到未变化的身份,然后发布替换身份。一个无关的旧版守护进程会话在整个过程中保持存活。最后,一次普通的旧版退出从两个解析器中移除其路由。

32 次替换和旧版退出后 基线 修复后
共享路由 0 0
附加解析器化身条目 0 0
存活解析器化身条目 32 0

附加断言保留另一提供者上的同 ID 后继、未变化的已认证身份、在没有清单的情况下使用匹配的权威化身进行直接附加、拒绝不匹配的权威化身,以及普通退出清理。永久测试包括重复回归和三个兼容性控制;可移植测试夹具额外验证实际适配器附加传输路径。

复现

在已安装依赖项的仓库根目录中运行:

ORCA_BACKGROUND_LAUNCH=1 node docs/audits/daemon-shared-owner-incarnation-retention/reproduce.cjs
ORCA_BACKGROUND_LAUNCH=1 pnpm exec vitest run --config config/vitest.config.ts src/main/daemon/daemon-shared-owner-incarnation-retention.test.ts src/main/daemon/daemon-session-owner-resolution.test.ts src/main/daemon/degraded-daemon-pty-provider.test.ts

运行器接受可选的输出文件名作为第一个参数。在 macOS 上,Electron 运行时控制为:

ORCA_BACKGROUND_LAUNCH=1 ELECTRON_RUN_AS_NODE=1 node_modules/electron/dist/Electron.app/Contents/MacOS/Electron docs/audits/daemon-shared-owner-incarnation-retention/reproduce.cjs

在 Linux 或 Windows 上,使用相应已安装的 Electron 二进制文件以及相同的环境变量。它以 Node 运行,并且从不显示窗口。

基线测试覆盖仅在内存中反转围栏化的产品补丁:

ORCA_BACKGROUND_LAUNCH=1 pnpm exec vitest run --config docs/audits/daemon-shared-owner-incarnation-retention/before.config.mjs src/main/daemon/daemon-shared-owner-incarnation-retention.test.ts src/main/daemon/daemon-session-owner-resolution.test.ts src/main/daemon/degraded-daemon-pty-provider.test.ts

预期:修复前恰好新的重复退役断言失败;其他 53 个测试通过。修复后全部 54 个测试通过。

源码标识与发布独立性

sources.cjs 检查精确的修复后源码哈希,反转 fix.patch,检查基线哈希,并隔离每个已评估的 TypeScript 依赖。它在每个报告中记录实际评估哈希、输入哈希和捆绑哈希。CRLF 控制检查源码和补丁规范化。默认运行器既不需要 Git 历史,也不需要被忽略的审计笔记。

source-versions.json 记录受审计的源码图(276 个模块)以及位于 291b4ddd6f1c1af480169885e0fda7f9c78ff053 的独立主图(274 个模块)。两个图均被显式接受;十个周边模块因无关的审计修复而不同。因此,该证明不要求堆叠这些修复。发布报告通过导出的 run({ readSource, output, sourceLabel }) API 生成,从该命名主修订读取每个非目标源码,并且仅应用此产品变更。默认命令也在安装了修复和工件的该发布树上直接运行。

Node 26.6.0 和 Electron 43.7.0 / Node 24.21.0 针对两个源图均生成了上表。四次执行均使用了工作安装的外部包。这些是源覆盖,而非历史应用或依赖安装。

在报告的 v1.4.198(e0826956fcfc532f5a1e55b5e081f2e57e553c43)中,解析器、共享恢复控制器和已认证身份发布与记录的基线完全一致。周围的降级提供程序有所不同,如 historicalCore 中记录;不声称整个 v1.4.198 的执行或事件归因。

validation.json 记录了测试、类型检查、完整文件工件质量和限制。四个结果文件包含实测条目数以及精确的源/工件标识。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca