Skip to content

task: Windows platform issues (8 bugs) #394

Open
4 of 8 issues completed
Open

Description

@DeusData

Scope

Umbrella tracker for Windows-specific bugs across install, indexing, path handling, and search. The wide-char API work (PR #386) and cmd.exe-compatible pipeline syntax (PR #325) cover subsets — this task tracks the remaining gaps and serves as a place to file Windows regressions.

Sub-issues

Status (2026-05-31)

6 of 8 resolved (#221 fixed + Windows-CI-verified; #266/#274/#331/#347/#348 fixed in v0.7.0). Remaining: #227 and #367, both the mapped/SMB-drive integrity-check class — fix (lowercase drive letters, c1dabc9) shipped in v0.7.0, but neither is reproducible in CI (no SMB share / mapped drive available), so both are awaiting reporter confirmation on v0.7.0. The bug surface is addressed; closure is reporter-dependent.

Acceptance

  1. CI runs Windows smoke tests for ASCII / non-ASCII paths (PR fix(windows): use wide-char API for non-ASCII path support #386), paths with spaces / & / ( / ). ✅ (mapped/UNC drives not CI-testable)
  2. .cbmignore parsing matches POSIX behavior on Windows. ✅ (.cbmignore patterns silently ignored on Windows #274)
  3. No crashes on Windows for repos that index on Linux/macOS. ✅ (Crash when indexing a repository #347)
  4. Privacy-critical Indexing repository unexpectedly indexes C:/Users/{USERNAME} instead of selected repo path (security/privacy risk) #331 (wrong path indexed) has a defense-in-depth test. ✅

Why one task

Windows-specific bugs share infrastructure (path normalization, process spawning, wide-char API surface).

Added 2026-06-24 (triage)

Added 2026-06-29 (triage)

Added 2026-06-30 (triage)

Added 2026-07-09 (triage)

(#929 hook OpenWith dialog → PR #926; #950 empty /api/processes → PR #955 — tracked in their PRs.)

Added 2026-08-03 (triage)

Activity

  1. added
    bugSomething isn't working
    windowsWindows-specific issues
    taskUmbrella task grouping multiple related issues
    on May 30, 2026
  2. DeusData commented on Jun 1, 2026

    @DeusData
    OwnerAuthor

    All 8+ Windows bugs are now closed — fixed across v0.7.0: non-ASCII path support via wide-char API (#386), PATHEXT probing in find_in_path (#221), Cursor MCP registration (#222 via integration), fish PATH syntax (#319), lowercase/mapped-drive root_path integrity (#367/#227, c1dabc9), and the cmd.exe git-log history pass (df38e33). Closing the umbrella.

  3. bsun0000 commented on Jun 2, 2026

    @bsun0000

    It is marked as closed and completed, but it still does not work for me, Windows 10.
    Tested versions: v0.6.1, v0.7.0, git-latest (forked & compiled via git workflow).

    Cache sits in C:\Users\BlackSun.cache\codebase-memory-mcp\ - no weird symbols in the path, no spaces.
    My codebase is indexed here, stored in a .db file.

    codebase-memory-mcp.exe cli list_projects - does not list anything. Even if i explicitly set the CBM_CACHE_DIR env. parameter.
    {"projects":[],"hint":"No projects indexed. Call index_repository(repo_path=...) first."}

    If i copy _config.db to config.db, it now shows:
    {"projects":[{"name":"config","root_path":"","nodes":0,"edges":0,"size_bytes":12288}]}

    So it sees the path and can read it. Same behavior with --ui=true - webui ignores the actual indexed codebase.

    The web UI is still broken - "Select Repository Folder" shows folders with empty names.

    The index is 4.2Gb big, memory usage spiked to almost 128GB of RAM during indexing. But there were no errors in the console.. still, could this be the issue? The codebase was simply.. too big? Around 100k files to index, 5.85Gb in total, assuming this program didn't ignore both .gitignore and .cbmignore i setup to cut some large and problematic files.

    UPD: Both DB Browser and SQLite Expert fails to open the index: "database disk image is malformed". *sigh*..

  4. DeusData commented on Jun 2, 2026

    @DeusData
    OwnerAuthor

    Hey @bsun0000 thx for reporting, will take another look. Sorry for the inconvenience. Can you give more details on what kinda project you try to index? In general a summary of your setup and indexing targets would be good. Maybe you can let your agent make a summary on this one. Need some way to reproduce this

  5. janmajorczyk commented on Jun 2, 2026

    @janmajorczyk

    Adding a second data point for the reopen — this one is a minimal, deterministic, CI-reproducible repro of the lowercase-drive root_path integrity check that c1dabc9 was supposed to fix, on a plain local NTFS path with no SMB/mapped drive. It still fails on v0.7.0.

    This looks distinct from @bsun0000's case (100k files, 4.2 GB index, ~128 GB RAM, "database disk image is malformed") — that one smells like a size/OOM-driven corruption. Mine is the opposite: a normal ~1,200-file repo, no memory pressure, no crash. The only variable is the case of the drive letter, which isolates the integrity-check path cleanly.

    It also directly answers the two things asked in #227/#367 — "v0.7.0 retest" and "exact stored root_path".

    Environment

    • codebase-memory-mcp 0.7.0 (also repro'd that uppercase works on the same build)
    • Windows 11, local NTFS C: drive, cache at the default C:\Users\<user>\.cache\codebase-memory-mcp\
    • No SMB / UNC / mapped / subst drive. No spaces or non-ASCII in the path.

    Exact stored root_path

    • Fails: c:/WEBDEV/Signalyzed_Projects/Cardio-Cloud → project key c-WEBDEV-Signalyzed_Projects-Cardio-Cloud
    • Works: C:/WEBDEV/Signalyzed_Projects/Cardio-Cloud → project key C-WEBDEV-Signalyzed_Projects-Cardio-Cloud

    The only difference is c: vs C:.

    Minimal repro (CLI)

    # lowercase drive letter -> indexes, then self-deletes
    codebase-memory-mcp cli index_repository '{"repo_path":"c:/Projects/MyRepo","mode":"moderate"}'
    codebase-memory-mcp cli list_projects     # -> {"projects":[]}
    
    # identical repo, uppercase drive letter -> persists, queries work
    codebase-memory-mcp cli index_repository '{"repo_path":"C:/Projects/MyRepo","mode":"moderate"}'
    codebase-memory-mcp cli list_projects     # -> project present

    What the lowercase run logs — the build completes, then the projects-table integrity check rejects the row, deletes the DB, and still returns "indexed":

    level=info  msg=pipeline.done nodes=0 edges=15308 elapsed_ms=4947
    ERROR store.corrupt table=projects bad_root_path=c:/WEBDEV/Signalyzed_Projects/Cardio-Cloud
    level=error msg=store.auto_clean project=c-WEBDEV-Signalyzed_Projects-Cardio-Cloud \
                path=C:/Users/<user>/.cache/codebase-memory-mcp/c-WEBDEV-Signalyzed_Projects-Cardio-Cloud.db \
                action=deleting corrupt db — re-index required
    {"project":"c-WEBDEV-Signalyzed_Projects-Cardio-Cloud","status":"indexed"}
    

    Every later search_graph / index_status / get_architecture then returns "project not found or not indexed" — even though the response's own available_projects lists the project — because the DB was deleted right after being written.

    Why this should be CI-testable (the blocker mentioned in #394): no SMB/mapped drive is involved — just a lowercase drive letter. A smoke test that indexes a fixture with repo_path starting c:/… and asserts list_projects is non-empty afterward would catch it.

    Two things that may help:

    1. The "indexed" response after store.auto_clean deletes the DB is the real trap — index_repository reports success while list_projects is empty, so it looks like a query bug rather than an indexing one. Surfacing the corruption as an error (or dropping nodes/edges + adding a warning) would make this self-evident.
    2. This is very common with agent-driven indexing. Agents like Claude Code report the Windows CWD as lowercase c:\…, so anything that derives repo_path from the CWD hits this by default. (Workaround we're using: always pass an uppercase drive letter and set auto_index=false, since on a case-insensitive FS the c-….db and C-….db cache files collide and a lowercase auto-index clobbers a good uppercase index.)

    Suggested fix: upper-case (or case-fold) the drive letter wherever separator normalization already happens (cbm_normalize_path_sep() from v0.5.7?), before the projects-table integrity check computes/compares bad_root_path — or compare case-insensitively on Windows. Since c1dabc9 shipped in v0.7.0 but this still reproduces, the normalization likely isn't applied on the integrity-check read path for plain local drives.

    Happy to run a diagnostic build or grab fuller --verbose logs if useful.

  6. DeusData commented on Jun 2, 2026

    @DeusData
    OwnerAuthor

    @bsun0000 thanks for sharing. You can take down the link. Ideally provide me with an OSS project with similar traits, not feeling so comfortable with downloading files from anonymous people (nothing against you, hope you understand it). Maybe you can ask your agent to compare your repo with public available OSS ones and get the key characteristics matched so that I can use it for reproducibility. The size I can replicate easily by just copying the repo over and over and indexing them together. That is fine for me. @janmajorczyk also thanks, will have a look as well

  7. FDiskas commented on Jun 2, 2026

    @FDiskas

    CPU and 32GB of ram was used at max level to index my small project and everything crashed.

  8. lichaoren commented on Jun 4, 2026

    @lichaoren

    I still experience (not so) random crash on indexing my large C++ codebase. As pointed out in another closed issue, running in a single thread delays the crash, and parses 99% of the files.

    PS D:\mcp\codebase-memory-mcp> ./codebase-memory-mcp.exe cli index_repository '{"repo_path":"D:/repo/fresh-gameservice"}'; echo "EXIT=$LASTEXITCODE"
    level=info msg=mem.init budget_mb=32728 total_ram_mb=65456
    level=info msg=pipeline.discover files=8459 elapsed_ms=235
    level=info msg=pipeline.route path=glimmer/amber/route
    level=info msg=pass.start pass=structure files=8459
    level=info msg=pass.done pass=structure nodes=6433 edges=6319
    level=info msg=pass.timing pass=structure elapsed_ms=27
    level=info msg=pipeline.mode mode=parallel workers=32 files=8459
    level=info msg=parallel.extract.start files=8459 workers=32
    level=info msg=parallel.mem.budget total_mb=32728 per_worker_mb=1022
    level=info msg=parallel.extract.file.start pos=0 size_kb=316 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-responsive.css
    level=info msg=parallel.extract.file.start pos=1 size_kb=307 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-web.css
    level=info msg=parallel.extract.file.start pos=2 size_kb=262 path=vendor/atlas/mysql-kit-linux/include/zephyr_error.h
    level=info msg=parallel.extract.file.start pos=3 size_kb=259 path=quartz/nova/ember/ridge/flux/static/js/toolkit/toolkit.js
    level=info msg=parallel.extract.file.start pos=5 size_kb=251 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-web.min.css
    level=info msg=parallel.extract.file.start pos=6 size_kb=200 path=quartz/service/aurora/aurora_state.cpp
    level=info msg=parallel.extract.file.start pos=4 size_kb=257 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-responsive.min.css
    level=info msg=parallel.extract.file.start pos=7 size_kb=181 path=quartz/service/meteor/meteor_controller.cpp
    level=info msg=parallel.extract.file.start pos=8 size_kb=152 path=quartz/service/comet/comet_controller.cpp
    level=info msg=parallel.extract.file.start pos=10 size_kb=137 path=quartz/core/network/neutron_cluster.cpp
    level=info msg=parallel.extract.file.start pos=11 size_kb=128 path=quartz/core/network/neutron_connection.cpp
    level=info msg=parallel.extract.file.start pos=12 size_kb=117 path=quartz/nova/ember/ridge/flux/static/js/toolkit/toolkit.min.js
    level=info msg=parallel.extract.file.start pos=9 size_kb=139 path=quartz/core/http/orbit_http2_server.cpp
    level=info msg=parallel.extract.file.start pos=16 size_kb=96 path=quartz/nova/ember/ridge/flux/static/js/third-party/sundown/sundown.min.js
    level=info msg=parallel.extract.file.start pos=14 size_kb=115 path=settings/nebula/common.yaml
    level=info msg=parallel.extract.file.start pos=15 size_kb=106 path=quartz/core/stream/nebula/consumer_impl.cpp
    level=info msg=parallel.extract.file.start pos=18 size_kb=92 path=quartz/service/accounting/storage/account_storage.cpp
    level=info msg=parallel.extract.file.start pos=13 size_kb=117 path=vendor/atlas/mysql-kit-win/include/zephyr_ername.h
    level=info msg=parallel.extract.file.start pos=20 size_kb=85 path=quartz/service/aurora/aurora_controller.cpp
    level=info msg=parallel.extract.file.start pos=17 size_kb=95 path=quartz/nova/ember/ridge/flux/static/css/develop/develop.min.css
    level=info msg=parallel.extract.file.start pos=22 size_kb=83 path=quartz/service/guild/guild_controller.cpp
    level=info msg=parallel.extract.file.start pos=19 size_kb=86 path=vendor/atlas/mysql-kit-win/include/mysql/psi/psi.h
    level=info msg=parallel.extract.file.start pos=23 size_kb=81 path=quartz/core/session/consul_session.cpp
    level=info msg=parallel.extract.file.start pos=21 size_kb=84 path=quartz/service/accounting/account_command.cpp
    level=info msg=parallel.extract.file.done pos=2 elapsed_ms=61 defs=1 path=vendor/atlas/mysql-kit-linux/include/zephyr_error.h
    level=info msg=parallel.extract.file.done pos=14 elapsed_ms=16 defs=9 path=settings/nebula/common.yaml
    level=info msg=parallel.extract.progress done=30 total=8459
    level=info msg=parallel.extract.file.done pos=0 elapsed_ms=121 defs=1 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-responsive.css
    level=info msg=parallel.extract.file.done pos=1 elapsed_ms=123 defs=1 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-web.css
    level=info msg=parallel.extract.file.done pos=17 elapsed_ms=33 defs=1 path=quartz/nova/ember/ridge/flux/static/css/develop/develop.min.css
    level=info msg=parallel.extract.file.done pos=16 elapsed_ms=66 defs=1 path=quartz/nova/ember/ridge/flux/static/js/third-party/sundown/sundown.min.js
    level=info msg=parallel.extract.file.done pos=5 elapsed_ms=117 defs=1 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-web.min.css
    level=info msg=parallel.extract.file.done pos=19 elapsed_ms=31 defs=681 path=vendor/atlas/mysql-kit-win/include/mysql/psi/psi.h
    level=info msg=parallel.extract.file.done pos=4 elapsed_ms=122 defs=1 path=quartz/nova/ember/ridge/flux/static/css/toolkit/opal-responsive.min.css
    level=info msg=parallel.extract.file.done pos=3 elapsed_ms=174 defs=12 path=quartz/nova/ember/ridge/flux/static/js/toolkit/toolkit.js
    level=info msg=parallel.extract.file.done pos=12 elapsed_ms=152 defs=12 path=quartz/nova/ember/ridge/flux/static/js/toolkit/toolkit.min.js
    level=info msg=parallel.extract.file.done pos=22 elapsed_ms=111 defs=98 path=quartz/service/guild/guild_controller.cpp
    level=info msg=parallel.extract.progress done=20 total=8459
    level=info msg=parallel.extract.file.done pos=21 elapsed_ms=103 defs=47 path=quartz/service/accounting/account_command.cpp
    level=info msg=parallel.extract.file.done pos=13 elapsed_ms=149 defs=1 path=vendor/atlas/mysql-kit-win/include/zephyr_ername.h
    level=info msg=parallel.extract.progress done=40 total=8459
    level=info msg=parallel.extract.file.done pos=11 elapsed_ms=204 defs=81 path=quartz/core/network/neutron_connection.cpp
    level=info msg=parallel.extract.file.done pos=10 elapsed_ms=213 defs=79 path=quartz/core/network/neutron_cluster.cpp
    level=info msg=parallel.extract.file.done pos=18 elapsed_ms=187 defs=77 path=quartz/service/accounting/storage/account_storage.cpp
    level=info msg=parallel.extract.file.done pos=23 elapsed_ms=154 defs=60 path=quartz/core/session/consul_session.cpp
    level=info msg=parallel.extract.file.done pos=9 elapsed_ms=225 defs=121 path=quartz/core/http/orbit_http2_server.cpp
    level=info msg=parallel.extract.file.done pos=15 elapsed_ms=214 defs=64 path=quartz/core/stream/nebula/consumer_impl.cpp
    level=info msg=parallel.extract.file.done pos=20 elapsed_ms=231 defs=128 path=quartz/service/aurora/aurora_controller.cpp
    level=info msg=parallel.extract.progress done=60 total=8459
    level=info msg=parallel.extract.progress done=10 total=8459
    level=info msg=parallel.extract.progress done=50 total=8459
    level=info msg=parallel.extract.progress done=70 total=8459
    level=info msg=parallel.extract.file.done pos=6 elapsed_ms=356 defs=121 path=quartz/service/aurora/aurora_state.cpp
    level=info msg=parallel.extract.progress done=100 total=8459
    level=info msg=parallel.extract.file.done pos=7 elapsed_ms=352 defs=96 path=quartz/service/meteor/meteor_controller.cpp
    level=info msg=parallel.extract.file.done pos=8 elapsed_ms=370 defs=88 path=quartz/service/comet/comet_controller.cpp
    level=info msg=parallel.extract.progress done=90 total=8459
    level=info msg=parallel.extract.progress done=80 total=8459
    level=info msg=parallel.extract.progress done=110 total=8459
    level=info msg=parallel.extract.progress done=120 total=8459
    level=info msg=parallel.extract.progress done=140 total=8459
    level=info msg=parallel.extract.progress done=130 total=8459
    level=info msg=parallel.extract.progress done=160 total=8459
    level=info msg=parallel.extract.progress done=180 total=8459
    level=info msg=parallel.extract.progress done=150 total=8459
    level=info msg=parallel.extract.progress done=170 total=8459
    level=info msg=parallel.extract.progress done=190 total=8459
    level=info msg=parallel.extract.progress done=230 total=8459
    level=info msg=parallel.extract.progress done=210 total=8459
    level=info msg=parallel.extract.progress done=200 total=8459
    level=info msg=parallel.extract.progress done=240 total=8459
    level=info msg=parallel.extract.progress done=220 total=8459
    level=info msg=parallel.extract.progress done=270 total=8459
    level=info msg=parallel.extract.progress done=260 total=8459
    level=info msg=parallel.extract.progress done=250 total=8459
    level=info msg=parallel.extract.progress done=280 total=8459
    level=info msg=parallel.extract.progress done=290 total=8459
    level=info msg=parallel.extract.progress done=300 total=8459
    EXIT=-1073741819
    

    Single thread was in an ubuntu WSL, the other variable is smaller RAM size there, FYI

  9. 9 remaining items

  10. added a commit that references this issue on Jul 4, 2026
  11. added this to the 0.9.1-rc milestone on Jul 8, 2026
  12. added
    editor/integrationEditor compatibility and CLI integration
    parsing/qualityGraph extraction bugs, false positives, missing edges
    stability/performanceServer crashes, OOM, hangs, high CPU/memory
    ux/behaviorDisplay bugs, docs, adoption UX
    on Aug 3, 2026
  13. DeusData commented on Oct 25, 2026

    @DeusData
    OwnerAuthor

    Thank you to everyone who supplied the Windows retests and workarounds. The later comments show why the original completed checklist cannot represent the whole umbrella: installer registration, UI indexing, and path/CLI behavior have separate follow-ups. I have no new blanket resolution to report, and the supplied examples do not need repeating. Sorry for the delay—this is waiting on maintainer follow-up, and I’ll follow up soon.

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

    bugSomething isn't workingeditor/integrationEditor compatibility and CLI integrationparsing/qualityGraph extraction bugs, false positives, missing edgespriority/highNeeds near-term maintainer attention; high-impact bug, regression, safety issue, or release blocker.stability/performanceServer crashes, OOM, hangs, high CPU/memorytaskUmbrella task grouping multiple related issuesux/behaviorDisplay bugs, docs, adoption UXwindowsWindows-specific issues

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions