fix/#663回归问题 #665

Merged
k88936 merged 10 commits from feat/support-more-node into master 2026-10-07 17:54:37 +08:00

10 Commits

Author SHA1 Message Date
k88936 c31b214444 让 Linux npm argv 全程保留 OsString 不再经 lossy 往返
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m45s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m59s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m53s
Project CI / Frontend tests (pull_request) Successful in 4m13s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m48s
Project CI / Repository checks (pull_request) Successful in 6m39s
Project CI / Backend tests (pull_request) Successful in 10m3s
Project CI / Native shell tests (pull_request) Successful in 9m57s
- project_command_actual_target 返回 Vec<OsString>,npm_cli 以 as_os_str 原样放入 argv[0],非 UTF-8 路径不再被 U+FFFD 改写
- prepare_command_sandbox_launch / prepare_linux_command_sandbox_launch / LinuxSandboxPlan 的 arguments 改为 OsString,bwrap 直接透传
- command_sandbox_requests_npm_install 按 OsStr 逐字节比对可信 npm_cli,避免误拒合法的 npm install 联网
- process_session_bridge 直接对 OsString 取字节,去掉一次 String 中转
- 用例补齐非 UTF-8 的 npm_cli 必须命中;真机测试同步改用 OsString
2026-10-07 14:26:54 +08:00
k88936 d706b65643 给缺宿主Node的npm目标单测加可见跳过提示
- npm_command_targets_node_plus_npm_cli_on_linux 跳过时 eprintln 输出原因(含 resolve_node_runtime 错误),配 --nocapture / --show-output 可与真实通过区分
2026-10-07 14:17:49 +08:00
k88936 ef2a1bc749 Merge remote-tracking branch 'origin/master' into feat/support-more-node
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
2026-10-07 14:05:26 +08:00
k88936 809cea5707 让 .nvmrc / .node-version 只改变搜索顺序而不阻塞
- resolve_pinned_managed_runtime 命中已安装版本时优先采用;NoMatch 不再返回 node-version-pinned-not-installed,与 Unsupported 一样按未 pin 回退
- fnm / nvm 共用同一条宽松路径;用例覆盖 fnm .nvmrc、fnm .node-version 与 nvm .nvmrc 的命中优先与未安装回退
- PinSelection 补注释说明 NoMatch / Unsupported 都只影响搜索顺序
- 同步 Runtime V1.1、实施计划、decision-log、pitfalls 与里程碑口径,去掉“未安装失败关闭”的旧约定
2026-10-07 14:01:43 +08:00
k88936 a2e538e2d1 让 lts 通配与 codename 一样按未 pin 回退
- version_matches_pin 不再把 lts/* 当作匹配任意版本:它和 lts/<codename> 一样需要 LTS 行映射,未维护时返回 None,交回退链而不是静默选中已安装最高版本(最高版本通常不是 LTS)
- 更新单测:lts/* 断言 None,并加入不支持 pin 的回退用例;修正 nvm default 别名注释
- 同步技术方案 V1.11.2 与 decision-log 的比较子集口径
2026-10-07 13:39:15 +08:00
k88936 f046bbe204 跳过缺少宿主Node时的npm目标单测
- npm_command_targets_node_plus_npm_cli_on_linux 先探测 resolve_node_runtime,最小容器无可用宿主 Node 时跳过,避免 cargo test 因缺 Node panic
- 探测失败只跳过这一条真机用例,其它解析失败仍照常失败
2026-10-07 13:38:55 +08:00
k88936 f6e3e19cd8 将npm install联网放行绑定到可信node launcher
Project CI / Backend tests (pull_request) Failing after 35s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m43s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m2s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m6s
Project CI / Repository checks (pull_request) Failing after 21s
Project CI / Frontend tests (pull_request) Successful in 2m31s
Project CI / Native shell tests (pull_request) Successful in 10m18s
Project CI / AI game creator shell web tests (pull_request) Successful in 4m18s
- prepare_command_sandbox_launch 新增 trusted_npm_install 参数,command_exec 把 spec.node_launcher 的 (node, npm_cli) 透传给沙箱
- command_sandbox_requests_npm_install 改为与可信 (node, npm_cli) 精确比对(executable、首个参数、install 子命令),删除只看 basename 的判定;拿不到可信对时一律不放网
- LinuxSandboxPlan 增加 npm_install_network,build_linux_bwrap_launch 直接采用,避免重复推导
- 新增/更新单测:项目同名 npm-cli.js 不放网、无可信 launcher 不放网、--share-net 开关、可信 (node, npm_cli) 与实际目标逐字一致
- 同步技术方案 V1.11.2、decision-log 与 pitfalls 记录该安全边界
2026-10-07 12:19:00 +08:00
k88936 deecebf0bb 删除未生效的活动版本分支,回退链只认默认别名
- 删除 active_managed_prefix(FNM_MULTISHELL_PATH / NVM_BIN):激活时活动版本已在 PATH 里,而该分支拿到的 multishell 前缀与枚举出的安装前缀不相等,永远不命中
- resolve_managed_fallback_runtime 回退顺序收敛为 engines 最高匹配 > 默认别名 > 已安装最高版本
- 同步 decision-log、里程碑与两处技术方案的版本选择口径
2026-10-07 11:59:42 +08:00
k88936 6f4667d96f 补fnm默认别名符号链接回归测试
- 新增单测 fnm_default_alias_symlink_selects_the_linked_installation,断言 default 别名选中该链接的 v20 而不是最高的 v22
- 核实评审该项前提有误:fnm 1.39 的 aliases/default 是指向安装目录的符号链接,当前实现本就正确
2026-10-07 11:45:02 +08:00
k88936 d905fa1c02 按未 pin 回退 lts/codename 避免静默选中错误版本
- version_matches_pin 对 lts/<codename>(如 lts/iron)返回 None,不再当作匹配任意已安装版本
- 补充单测:lts/iron 回退、lts/* 仍匹配,并加入不支持 pin 的回退用例
- decision-log 记录 lts/<codename> 需要 codename → 版本行映射,当前按未 pin 回退
2026-10-07 11:43:00 +08:00