mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-06 15:49:59 +00:00
Three related defects in how the watcher decides what counts as a change. 1. `git rev-parse --git-dir` walks UP the tree, so an ordinary folder that merely sits under an unrelated repository answered yes. The watcher then inherited that ancestor's dirty state -- permanently non-empty and about entirely different files -- and reindexed on every poll forever. A directory is now git-managed only if it carries its own .git (directory or gitlink file) or the ancestor actually tracks something inside it, so a real monorepo sub-package still qualifies while a scratch or ignored folder does not. 2. `git status` reports the whole repository regardless of -C, so every package in a monorepo reindexed whenever any sibling was edited. The status call is now scoped with a `-- .` pathspec. 3. Porcelain paths are REPOSITORY-relative but were stat'ed against root_path. For a project watched at the repository root the two coincide and the bug is invisible; for a subdirectory project every stat missed, silently degrading the dirty signature to text-only and losing the size/mtime component that makes an edit to an already-dirty file detectable. Paths now resolve through `rev-parse --show-cdup`. --show-cdup rather than --show-toplevel because MSYS/Cygwin git returns a translated absolute path from the latter that will not join onto the native path we hold; a relative hop composes on every platform. Distilled from #1001 by bethzyy, whose diagnosis identified all three. Main independently fixed that PR's two headline problems (the unbounded non-git file count, and per-poll churn via a dirty-state signature) while it waited, and the watcher was rewritten onto a supervised argv-spawn harness in between, so this is a reimplementation against the new code rather than a rebase of theirs. Both new tests are verified binding: reverting the classification guard reddens the nested-directory test, and removing the pathspec reddens the monorepo one, each without disturbing the other. Addresses the remaining parts of #713, #841 and #937. Co-authored-by: bethzyy <bethzyy@users.noreply.github.com> Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>