What happened? / 问题描述
两处 Windows-only 的开发环境问题(Linux CI 均不触发):
1. check:pi-dependencies / check:pi-patches 在 Windows 上误报
node scripts/check-pi-dependencies.mjs
→ <pkg> does not resolve to pnpm's patched package instance
node scripts/check-pi-patches.mjs
→ <pkg>@1.0.0 installed patch hash is absent from pnpm-lock.yaml
两个脚本都用 realpathSync(...) 的结果里是否含字面 patch_hash= 段来判断「装的是 pnpm 的 patched 实例」(check-pi-dependencies.mjs 的 resolved.includes("patch_hash=")、check-pi-patches.mjs 的 resolved.match(/patch_hash=([a-f0-9]+)/))。但 pnpm 在 Windows 上会缩短 .pnpm 目录名(长路径限制),realpath 结果不再包含 patch_hash= 字面段 → 断言失败。
建议改用虚拟店 lockfile(node_modules/.pnpm/lock.yaml)作证据:其 snapshot key 保留完整的 'name@version(patch_hash=<64hex>' 键,能证明解析到的实例就是 patched 包,且比 realpath 字符串匹配更严格(Linux 行为不变)。本机已按此思路修复并验证通过,需要的话可以提 PR。
2. native-pi-session.test.ts 一个 fork 测试在 Windows 上失败
FAIL src/native-pi-session.test.ts > native fork children >
never deletes a foreign publication and classifies the failure path-free
AssertionError: expected [ …(2) ] to deeply equal [ …(2) ]
- Expected: "D:\\...\\--project--\\2026-…jsonl" (整条绝对路径)
+ Received: "2026-…jsonl" (readdirSync 返回的文件名)
packages/agent-runtime/src/native-pi-session.test.ts L784:
expect(groupEntries(f.group).sort()).toEqual(before.concat([foreignPath.split("/").at(-1)!]).sort());
foreignPath.split("/") 按 POSIX 分隔符切路径;Windows 路径分隔符是 \,切不开,.at(-1) 返回整条绝对路径,与 readdirSync 返回的文件名比较必然失败。建议改用 path.basename(foreignPath)。
App version / 应用版本
main(check:pi-* 为 Pi 1.0.0 升级引入的脚本;测试断言在更早版本即如此)
OS
Windows
What happened? / 问题描述
两处 Windows-only 的开发环境问题(Linux CI 均不触发):
1.
check:pi-dependencies/check:pi-patches在 Windows 上误报两个脚本都用
realpathSync(...)的结果里是否含字面patch_hash=段来判断「装的是 pnpm 的 patched 实例」(check-pi-dependencies.mjs的resolved.includes("patch_hash=")、check-pi-patches.mjs的resolved.match(/patch_hash=([a-f0-9]+)/))。但 pnpm 在 Windows 上会缩短.pnpm目录名(长路径限制),realpath 结果不再包含patch_hash=字面段 → 断言失败。建议改用虚拟店 lockfile(
node_modules/.pnpm/lock.yaml)作证据:其 snapshot key 保留完整的'name@version(patch_hash=<64hex>'键,能证明解析到的实例就是 patched 包,且比 realpath 字符串匹配更严格(Linux 行为不变)。本机已按此思路修复并验证通过,需要的话可以提 PR。2.
native-pi-session.test.ts一个 fork 测试在 Windows 上失败packages/agent-runtime/src/native-pi-session.test.tsL784:foreignPath.split("/")按 POSIX 分隔符切路径;Windows 路径分隔符是\,切不开,.at(-1)返回整条绝对路径,与readdirSync返回的文件名比较必然失败。建议改用path.basename(foreignPath)。App version / 应用版本
main(check:pi-* 为 Pi 1.0.0 升级引入的脚本;测试断言在更早版本即如此)
OS
Windows