Repository navigation
fix(dsh): align Node prerequisites with the LoopX runtime - #6851
Conversation
Signed-off-by: BigDataDZ <76271875+BigDataDZ@users.noreply.github.com>
Signed-off-by: BigDataDZ <76271875+BigDataDZ@users.noreply.github.com>
|
CI follow-through at The separate general Python Windows job fails earlier on the unchanged main CLI-budget fixture: three cases at 10,522 > 10,500. That owner/fixture is untouched here and is covered by #6842 / #6843; #6843's native Windows check passes. This attribution does not relabel the failed job. Remaining Python shards and maintainer review are pending; the pnpm-12 gap remains separately tracked in #6853. |
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max
动机
通过源码安装 DSH 插件的用户,可能按插件文档准备了 Node 22.19,却在安装后才发现 LoopX 运行时根本无法启动。例如在实际 Node 22.19 上,旧安装器已进入依赖安装步骤,而同一源码的 ping 和深度检查均报告 node_unavailable;新安装器会在依赖及 DSH profile 操作前给出正确的最低版本要求。独立实测确认新安装器提前拒绝 22.19,实际 22.22.3 和 24.21 则保留进入依赖步骤的路径,并在基线与候选上完成真实 ping 和深度就绪。范围是对齐 Node 前置要求,不包含更换用户 Node、放宽 pnpm 兼容性、修改 LoopX 核心规则或证明所有 DSH 平台都已完成安装。
改动思路
先从已接受的 LoopX 安装要求和真实运行时读取最低版本,再检查插件的两种入口是否承诺了更低的版本。这里核心已经要求22.22.3,插件却还允许22.19,造成用户完成前置工作后才撞到已知失败。把版本拒绝前移到已有安装器 guard,并同步包元数据和文档,能在当前权限边界内减少无用步骤,不需要增加用户确认轮次。安装器只负责依赖操作前的快速拒绝;核心物理探测与 Effect runtime 继续负责真实版本、启动、SQLite 资格和深度就绪,不把版本字符串当成运行成功。Node23原本就被插件排除,这次保留该边界,不借修最低版本扩大到未经声明的平台。
具体改动
规范为 docs/guides/installing-loopx.md,固定版本 dc9fdbb5186618ec2e797a9d7545e2fe524fee56(原安装契约)。node-minimum 对应先验证22.22.3最低要求,runtime-ready-or-fail-closed 对应既有真实 managed runtime 的就绪或关闭语义;这两个标签仅映射原文要求,均已实现。根 manifest、Python/TypeScript runtime探测、DSH bootstrap和安装回读实现均未修改。
关键内容讲解
- install.sh 的前置判断 先确认完整稳定版本串,再比较22分支的minor/patch,或允许24及以上;不通过时 exit2并给出最低要求,发生在 frozen dependency install 和所有 DSH profile 操作之前。它是实际执行的硬拒绝,不是可忽略建议。
- 包引擎范围 改为
^22.22.3 || >=24.0.0;README 同步稳定版本要求。原Node23排除保留,常规SemVer的prerelease排除与安装器一致,未降低核心运行时要求或增加全局安装副作用。包元数据是否硬拒绝由包管理器自身策略决定;这里独立验证的硬拒绝是源码安装器的exit2。 - 既有 peer smoke 增加根最低版本比对和10个版本输入,直接提取实际guard在VM中执行,原官方DSH peer正反例保留。VM只能证明判断表达式,不能证明原生Node或Effect可运行,因此我另做实际二进制和后端检查。
使用校验官方SHA-256后的实际Node22.19、22.22.3,以及实际24.21,分别执行未修改的完整安装脚本,故意在第一个pnpm依赖操作处用自有sentinel停止。22.19基线进入sentinel(exit83),候选在此前exit2;22.22.3和24.21两边都正常到达sentinel。随后在完全隔离的临时runtime目录运行真实LoopX ping与deep readiness:22.19两边都拒绝,22.22.3及24.21两边均ready且SQLite资格为true,所有自启服务已停止。这里没有把sentinel当成完成DSH安装。
对主干的风险
最大风险是包元数据与shell判断再次分叉,或把较低版本当成支持。实际边界版本对照和10例矩阵同时覆盖了这一点;核心、锁文件、workspace配置、DSH host/client生产源码和现有profile验证均未改。按仓库CI明确使用的pnpm10.33.0,frozen安装、三个类型检查、218项测试、peer矩阵和正常npm pack通过,tarball共33文件。原生DSH quality、package、runtime三个阶段也分别重跑通过,其中含隔离profile安装/移除、打包Client、真实本地DSH启动与关闭;其中CLI/session载荷仍含合成fixture,不能当成真实用户会话续跑或模型调用证据。
首次原生premerge的4个直接检查通过,但所选检查中环境自带pnpm报错,install-local smoke触发120秒超时;这些原始失败保留,不改写成成功。切换为该仓库已声明的pnpm10.33.0后,三个DSH阶段通过。另对install-local smoke执行相同120秒预算的基线/候选复核,两边均在首次临时安装时超时,输出也相同;对应脚本与安装owner逐字节未改,当前证据不足以归因其内部慢点,不能认证该广泛安装检查已经通过。pnpm新版override兼容问题已有独立issue #6853和提案 #6861,不在此head偷带修复;也不能据本项声称任意pnpm都可安装。原生总体还缺精确scope托管质量回执,合并门继续保留。本次未查询CI、未独立验证原生Windows、个人DSH profile安装或已发布npm版本。
我的整体评价
APPROVE,针对 d0d43cedf75fe2ac134add70399a723f8af85fb1,最初的Node前置不一致已有独立复现及可运行的修复。long_horizon 为preserved:核心状态、调度、公平性和重试owner未变;user_experience 为improved:已知不支持的版本在依赖/profile副作用前得到可操作错误,支持版本仍沿原入口继续,没有额外人工轮次。当前 PR 的完整边界是修正插件公布和安装时执行的 Node 最低要求,并保留现有 Node 23 排除和 prerelease 拒绝。Applied: keep one inline bootstrap prerequisite before dependency effects, reuse the existing semver/peer smoke and unchanged core runtime owner; no second policy service, new CLI flag, global installer or compatibility framework.文档新增说明不删除许可、证据、恢复或停止义务;这不是可选能力默认开启。保留原生合并门和平台/工具链限制,不以这个有界修复声称全安装矩阵或长期净收益已完成。
English verdict: APPROVE at d0d43cedf75fe2ac134add70399a723f8af85fb1. Real22.19 now fails before dependency effects; actual22.22.3/24.21 retain working Effect readiness. Pinned-toolchain DSH phases pass. Original premerge failures, the separate pnpm compatibility issue, quality-receipt merge hold and native-platform limits remain disclosed.
The DSH plugin advertises Node 22.19 and the source installer accepts it, while the LoopX runtime that the initializer installs requires at least 22.22.3. With an actual portable Node 22.19, the installer preflight succeeds but the real Effect request is rejected as
node_unavailable; deep readiness reportsunsupportedbefore semantic dispatch.Align the plugin's engine declaration, source-installer guard and Install requirements with the existing runtime minimum. Preserve the Node 23 exclusion and Node 24+ branch; reject prereleases consistently with the package engine range. Extend the existing compatibility smoke to compare against the root runtime minimum and execute the exact installer guard across supported, below-minimum and prerelease boundaries.
Validation:
npm packwith its prepack build passed. The local artifact has 33 files; all exports exist and 28 compiled files match the build. Manifest and README match the source. SHA-256:454fe373454d1f407d3222d64929682176d2a407e4469841e9d71bc246ba0095.This is the existing optional DSH provider's prerequisite boundary. The guard remains a bootstrap projection checked against the existing root minimum; no new capability, configuration switch, version authority or frontend screen is introduced. Reuse of the existing compatibility smoke is the bounded maintainability improvement.
The installer admission proof intentionally stops before dependency/profile operations; it is not a fresh DSH-profile installation. The npm artifact is a local candidate, not a publication or a fix already available in beta.6. This does not establish the cause of earlier marketplace Git-fallback reports. No global Node installation or user profile was changed. Hosted checks and maintainer merge remain pending.