Skip to content

fix: 自检诊断全面审计与加固(Windows pnpm 探测 / 版本比较契约 / 状态契约统一) - #32

Merged
YisfL merged 1 commit into
mainfrom
audit-selfcheck-fix/v1.0.1
Aug 23, 2026
Merged

fix: 自检诊断全面审计与加固(Windows pnpm 探测 / 版本比较契约 / 状态契约统一)#32
YisfL merged 1 commit into
mainfrom
audit-selfcheck-fix/v1.0.1

Conversation

@YisfL

@YisfL YisfL commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

审计范围

自检诊断及其相关功能(JS 侧 check()/checkAsync()/statusSync() + C# 侧 BuildNativeSelfCheckScript 与版本探测/比较)。

根因修复(每项均有回归测试实证)

  1. runCli Windows .cmd/.bat/裸命令 EINVAL(高危)
    • npm 全局安装的 pnpm 在 Windows 上只生成 pnpm.cmd(非 pnpm.exe);runCli 此前 spawn(command, args, {shell:false}) 直连,Node>=18.20(CVE-2024-27980 修复)对 .cmd/.bat 直接 CreateProcess 抛 EINVAL/ENOENT。
    • 影响:checkAsync 自检「pnpm」恒误报未安装;ensureNpm/unmountPack/rollbackMount 的 pnpm add/remove 全部失效。
    • 修复:对齐 launcher C6——裸命令经 ComSpec(cmd.exe /d /c)包装(.exe 仍直连)。
  2. statusSync.activatedAt 陈旧——反向遍历取「最近一次」激活(激活→卸载→再激活后不再返回最早时间戳)。
  3. statusSync 缺 memoryDir——补字段与 checkAsync 契约统一(单一真源 MEMORY_DIR)。
  4. 版本比较契约分裂(三实现三语义)——旧 IsNewerVersion 按「段」剥离 -,1.0.0-alpha.1 会把 alpha 当作第 4 段 1 误判 > 1.0.0;新增 PatchContract.CompareVersions/IsNewerVersion(pre/build 整版本剥离,空值守卫保留),Main.cs 委托,注入页面 JS nv 同步 split(/[-+]/) 与 parseInt||0。

验证

  • 本地全绿:hotplug 182 / shared-core 178 / memory-hub 61 / C# 契约 84 / qa9 自检 17 / vendor 同步逐字节一致
  • 实证:裸 pnpm(仅 pnpm.cmd)spawn(shell:false) → UV_ENOENT,修复后经 cmd.exe 包装成功
  • 新增测试:run-cli-windows.test.mjs(真实 pnpm.cmd spawn / checkAsync 探测 / .exe 直连)、status 3 项、C# CompareVersions/IsNewerVersion 15 项

- runCli:Windows 下 .cmd/.bat/裸命令经 ComSpec(cmd.exe /d /c)包装(对齐 launcher C6)——
  修复 npm 全局安装的 pnpm.cmd 无法被 spawn(shell:false) 直接启动(EINVAL/ENOENT),
  导致 checkAsync 自检「pnpm」恒误报缺失、ensureNpm/unmountPack/rollbackMount 的 pnpm add/remove 全失效
- statusSync:activatedAt 改为反向遍历取「最近一次」激活(修复激活→卸载→再激活后返回最早时间戳的陈旧数据)
- statusSync:补 memoryDir 字段(与 checkAsync 契约统一,单一真源 MEMORY_DIR)
- 版本比较契约统一:新增 PatchContract.CompareVersions/IsNewerVersion(pre/build 整版本剥离,
  修复 IsNewerVersion 按「段」剥离 '-' 导致 1.0.0-alpha.1 被误判 > 1.0.0),Main.cs 委托,
  注入页面 JS nv 同步 split(/[-+]/) 与 parseInt||0
- 新增回归测试:run-cli-windows.test.mjs(真实 pnpm.cmd spawn / checkAsync 探测 / .exe 直连)、
  status 3 项、C# CompareVersions/IsNewerVersion 15 项

本地全绿:hotplug 182 / shared-core 178 / memory-hub 61 / C# 84 / qa9 17 / vendor 同步一致
@YisfL
YisfL requested a review from ARFCON as a code owner August 23, 2026 17:08
@YisfL
YisfL merged commit 6ef9cff into main Aug 23, 2026
11 checks passed
@YisfL
YisfL deleted the audit-selfcheck-fix/v1.0.1 branch August 23, 2026 17:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant