Repository navigation
[Bug] LocalSubprocessRuntime.spawn() 未透传 WindowsJobInternals / LinuxScopeInternals,导致 runner 启动 seam 在生产路径不可达 #12532
boyingliu01
started this conversation in
General
Replies: 2 comments
|
分析成立,已按同一处修复( 分支:https://github.com/aturzone/deepseek-harness/tree/fix/subprocess-managed-internals(commit 根因确认( 改动
证据
另:这条与 #11893 是同一类「seam 只在单测可达」的残留,修复点也覆盖 #11893 描述的 runner 选择路径。 |
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.
现象
windows-job.ts与linux-scope.ts都把runnerInvocation声明为显式的可替换 seam,但
LocalSubprocessRuntime.spawn()调用这两个函数时没有传internals,于是这些 seam 在生产路径上恒不可达——只有直接调用
launchWindowsJob(spec, env, internals)的单元测试才能碰到。
这不是新问题,是 #11893 描述现象在重构后的同构剩余:
缺陷从
spawn()里的三元表达式,原样搬到了spawn()里launch的选择处。证据
Windows 侧 ——
packages/subprocess/subprocess-local/src/windows-job.ts:29-38windows-job.ts:126-130确实消费了它:但调用点 ——
index.ts:206-210:spawn()已经算好了一份internals(index.ts:202),但只喂给了fallback分支的spawnSubprocess(spec, internals),没有喂给launchWindowsJob/launchLinuxScope。Linux 侧更明显:
launchLinuxScope的签名是internals被挤到了第四位,而调用点只传三个参数。LinuxScopeInternals(linux-scope.ts:33-43)里同样声明了runnerInvocation/resolveRunnerInvocation/runnerAvailable,一个都到不了。影响
internals上塞任何东西都不生效。LocalSubprocessRuntime.internals(index.ts:72)是公开字段,但在 Windows / Linux-scope 主路径上,写进去的
runnerInvocation被静默忽略。只有
containmentMode === 'fallback'时才会被消费。调用方会误以为自己成功替换了 runner,实际仍在跑默认实现。
launchWindowsJob(spec, env, { runnerInvocation })能拿到自定义 runner,同一条代码路径走
spawn()就拿不到。这类"测了但没测到生产路径"的偏差,恰恰是 seam 类接口最容易出的事故。
(例如用原生二进制替换 Node runner 以消除进程启动开销),而项目已为此准备好 seam,
却无法从公开入口接上。
期望行为
spawn()把已经构造好的internals透传给两个launch*:若担心
SpawnInternals与WindowsJobInternals/LinuxScopeInternals类型不兼容,只需在调用处做一次窄化(这些字段本就是可选的,
SpawnInternals里没有的字段传undefined即可)。为什么建议优先处理
WindowsJobInternals的文档注释写的是"Test seams for runner launch and dynamic capability checks",
说明"runner 启动方式可替换"是被有意设计的;当前只是没接到生产路径上。
spawn()级的测试,断言自定义runnerInvocation被调用到。这类测试能在未来再次重构时自动兜住同样的问题。
环境
main@fcc0ad462172522aaf5c93a7b2e01f6b9f0b01590.2.0-rc.2已存在(lib/index.js:1368),重构后位置改变、性质未变附:备选措辞(若维护者偏好提 PR)
如果需要,本问题也可以只以 Issue 形式跟踪,由维护者自行修复——
提出方不需要提交任何代码。上文"期望行为"已给出最小 patch 形态。
All reactions