Skip to content

[Bug] v0.9.0 regression: CJK repo_path still crashes despite #636 fix #973

Description

@squall-cyber

Summary

v0.9.0 still crashes on non-ASCII (CJK) repo_path, despite #636 being marked fixed — this is a regression / incomplete fix. v0.9.0's release notes explicitly claim end-to-end non-ASCII path support incl. "wide-argv + CreateProcessW, escaped/NUL-terminated worker command lines", and #639 added a Windows CI regression guard — yet the crash is back in the shipped release.

Filing a fresh (open) issue because #636 is closed; the same details are also added there for continuity: #636 (comment).

Environment

  • codebase-memory-mcp 0.9.0, standard build (GitHub release archive), Windows 11 (build 26200) x64

Repro

  1. Create a dir with a CJK name, e.g. C:\test\雷達測試\, with 2–3 .py files (ASCII filenames, UTF-8 content).
  2. codebase-memory-mcp cli index_repository --repo-path "C:\test\雷達測試" --mode fast
  3. exit 1, {"status":"error","outcome":"exit_nonzero","hint":"Indexing worker crashed on a file..."}. stderr echoes the path mojibaked: 雷達測試?琿?皜祈岫.

Isolation (points at the supervisor→worker root-path argv handoff)

  • Same files under an ASCII path → clean (outcome=clean, 100 nodes / 371 edges).
  • CJK file content (UTF-8 comments) → fine.
  • Passing the path via --args-file (UTF-8 JSON) makes the top-level repo_path echo correctly, but the worker still crashes → the supervisor→worker handoff re-passes the root path via (ANSI) argv and re-mojibakes it.
  • Working workaround: an ASCII-named junction pointing at the CJK dir indexes cleanly (outcome=clean, even a CJK-named file 說明書.md inside). So file enumeration (wide-char API) is fine — only the root-path argv handoff to the worker is broken.

Why this keeps regressing (CI gap)

This is the dangerous kind of regression: "marked fixed + CI green", so each release looks fixed while non-ASCII Windows users still cannot index their real directories — "just update" doesn't help because the update itself still ships the crash.

Most likely gap: tests/windows/test_non_ascii_path.py (added in #639) probably exercises the pipeline in-process and never actually spawns the real worker subprocess with a CJK root path, so it structurally cannot catch the argv handoff that breaks in production. A guard that shells out to the real index_repository on a CJK directory and asserts outcome=clean (end-to-end, real subprocess spawn) would catch this whole class.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions