Skip to content

[bug][windows] 0.0.95 下 mcpp test --workspace 以 exit 127 中断(0.0.94 同负载全绿) #230

Description

@Sunrisepeak

现象

mcpp-index 的 workspace (windows) CI job(windows-latest,vendored xlings,mcpp test --workspace,17 个成员)在 0.0.95 下于成员依赖下载阶段中断,step 以 exit 127(command not found)失败;同一成员集在 0.0.94(main 分支每日 CI)持续全绿。macOS/linux 同 run 无此现象(linux 的失败另有原因,见 mcpp-index#74)。

证据

初步怀疑

0.0.95 引入的三个特性中,windows 路径上新增子进程/工具调用的是 #222(依赖包 build.mcpp 执行)与 #220(nasm 解析);127 指示某个被 spawn 的命令在 windows runner 上不存在。workspace 成员含 tests/examples/build-mcpp(带 build.mcpp),0.0.95 起依赖/成员的 build.mcpp 在 windows 的执行细节(shell/驱动路径)值得优先排查。

影响与临时对策

阻塞 mcpp-index 的 MCPP_VERSION 升级(compat.ffmpeg 描述符需要 0.0.95 的 per-glob flags 语法)。临时对策:windows 矩阵腿单独钉回 0.0.94(该平台不消费新语法,cfg(linux) 门控成员为 no-op),linux/macos 用 0.0.95;待本 issue 修复后统一。

Activity

  1. Sunrisepeak commented on Jul 17, 2026

    @Sunrisepeak
    MemberAuthor

    根因已定位并修复:见 #231。

    一句话:0.0.95 扫描器新增 follow_directory_symlink,顺着项目本地 .mcpp/.xlings/data/<index>(指回索引根的符号链接)走出成员目录、扫遍整个 checkout;在 windows runner(ACP=1252)上撞到 vendored xim-pkgindex 里的中文文件名 bug-report---问题反馈.md,path_matches_glob 的 generic_string() 宽→窄转换抛 std::system_error,未捕获 → __fastfail(0xC0000409),git-bash 显示为裸 127。0.0.94 不跟随目录符号链接,所以同负载全绿。取证过程(WER 全内存 dump + cdb 栈 + 字符串还原)记录在 mcpplibs/mcpp-index 的 debug/mcpp230-windows-repro 分支。

  2. Sunrisepeak commented on Jul 18, 2026

    @Sunrisepeak
    MemberAuthor

    Status: root cause (scanner symlink-escape + narrow-string throw → __fastfail/127) was fixed in 0.0.96 (df985df / #231). 0.0.98 ci-windows is green. Keeping open only until mcpp-index's Windows CI is re-verified on the ≥0.0.98 pin, then close.

  3. Sunrisepeak commented on Jul 19, 2026

    @Sunrisepeak
    MemberAuthor

    Status — resolved in mcpp 0.0.99 (released + indexed).

    The exit-127 root cause (scanner glob following the .mcpp/.xlings symlink into the vendored index, where a CJK filename tripped MSVC's wide→narrow conversion → uncaught exception → __fastfail(0xC0000409) → bare exit 127) was fixed in 0.0.96 (df985df: prune .mcpp from glob walks + never-throw on unnarrowable names) plus a top-level main() catch (exit 70, no more bare 127) — both in the released tree since 0.0.98. mcpp's own build + test (windows x64, self-host) CI is green on 0.0.99.

    0.0.99 additionally closes a secondary Windows surface that only becomes reachable once the scanner crash stops masking it: a workspace build.mcpp member compiled to build.mcpp.bin, which Windows cmd.exe (the capture_exec shell there) cannot launch — .bin is not in PATHEXT. It is now named build.mcpp.exe on Windows (is_windows constexpr; non-Windows bytes unchanged).

    Re-verification of the full workspace matrix on 0.0.99 (incl. the workspace (windows) leg) is in flight: mcpplibs/mcpp-index#81 bumps the pin 0.0.98 → 0.0.99. Will close once that CI is green.

  4. Sunrisepeak commented on Jul 19, 2026

    @Sunrisepeak
    MemberAuthor

    Confirmed: workspace (windows) is green on mcpp 0.0.99 (mcpplibs/mcpp-index#81 CI — the 17-member workspace builds on windows-latest, including the build-mcpp member that exercises the build.mcpp.exe path). The exit-127 scanner crash (fixed 0.0.96) and the build.mcpp .exe secondary surface (0.0.99) are both verified on the real Windows workspace. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions